OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5442|回复: 3

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

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-11-20
在线时间
9 小时
发表于 2016-11-20 16:04:32 | 显示全部楼层 |阅读模式
1金钱
入手探索者一段时间了,对于单片机的探索纯属个人爱好,结合工作,自己准备开发一款可以读取车辆数据流的嵌入式设备。目前已根据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个数发生变化时,有没有比较好的解析方法?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-11-20 18:56:21 | 显示全部楼层
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2016-5-26
在线时间
84 小时
发表于 2016-11-21 09:39:09 | 显示全部楼层
本帖最后由 FlyLu 于 2016-11-25 12:47 编辑

楼主,可以通过函数指针的方法。
可以交流交流,之前写过一个CAN驱动,针对该ISO157651.
1. 单帧发送 -> 单帧接收
2. 单帧发送 -> 多帧接收
3. 多帧发送 -> 单帧接收
3. 多帧发送 -> 多帧接收
回复

使用道具 举报

21

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2469
金钱
2469
注册时间
2014-4-26
在线时间
172 小时
发表于 2016-11-26 15:39:03 | 显示全部楼层
LZ :你读取的OBD信息时,标示ID是标准的,还是扩展的?都是7E0开始的么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 16:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表