如何根据ISO15765协议获取的CAN帧解析数据?

2019-07-20 18:38发布

入手探索者一段时间了,对于单片机的探索纯属个人爱好,结合工作,自己准备开发一款可以读取车辆数据流的嵌入式设备。目前已根据ISO15765能将CAN的多帧数据解析出来组合为ISO15031-5格式的CAN消息了,但是由于自己没有系统的学习过程序设计,对于数据的解析遇到困难,还请各位大虾能帮忙出出主意,给点建议,万分感谢!
情况是这样的:我想通过SID和PID读取到想要的车辆数据流,如:发动机转速,车速,水温等,发送的CAN消息如果是08 07 E0 04 01 0C 0D 05 00 00 00,接收到的是08 07 E8 08 41 0C 0A 6B 0D 23 05 6E.如果仅仅只是固定的一条这样的信息还好解决,我可以按照ISO标准计算出发动机转速为:667rpm,车速为:35km/h,水温:110度,然后显示出来。但是如果我第一次是想获取这样的3个参数,但是下一次我可能想再获取失火次数或者更多参数怎么来解析这些数据呢?我目前的想法是将获取到的PID用switch语句来判断,根据不同的PID查表得到对应PID包含的字节数,然后根据该PID的计算方法计算得到该PID的值,再打包一起用于显示,我总觉得这个方法不够优化,当有很多个PID时,需要的case语句就无不庞大
当获取的PID个数发生变化时,有没有比较好的解析方法?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。