15031-5 中描述的关于 OBD 输出信息的 9 种模式
1, 请求动力系当前数据
2, 请求冻结帧数据
3, 请求排放相关的动力系诊断故障码
4, 清除/复位排放相关的诊断信息
5, 请求氧传感器监测测试结果
6, 请求非连续监测系统 OBD 测试结果
7, 请求连续监测系统 OBD 测试结果
8, 请求车载系统,测试或者部件
9, 读取车辆和标定识别号
在 CAN 通讯中的使用
1. 请求动力系的当前数据
1) 第一步:
在请求具体 PID 之前,应该发一些探测该 ECU 支持哪些 PID 的指令:
描述 十六进制数值
SID
01
用来查询在$00~$20 之间支持 PID 的 PID 00
用来查询在$21~$40 之间支持 PID 的 PID 20
用来查询在$41~$60 之间支持 PID 的 PID 40
用来查询在$61~$80 之间支持 PID 的 PID 60
用来查询在$81~$A0 之间支持 PID 的 PID 80
用来查询在$A1~$C0 之间支持 PID 的 PID A0
回应:如果发送的消息为-$02 01 00 FF FF FF FF FF
描述 十六进制数值
#2:SID 01
#3:PID 00
#4:PID$01~08 Supported BF 表示支持 01,03~08
#5:PID$09~10Supported BF 表示支持 09,0B~10
#6:PID$11~08Supported A8 表示支持 11,13,15
#7:PID$09~20Supported 91 表示支持 19,1C,20
在请求 01~20 段到底支持哪些 PID 时,回应消息中分了 4 个字节来描述支持,每个字节
正好描述 8 个 PID 的支持情况,如:在#4 描述的是第一个 8 个 PID,如果 BF(Hex)
就是 10111111(Bin)1 表示支持,0 表示不支持,MSB 对应的 01,LSB 对应着 08,可
知 01,03~08 是支持的,而 02 不支持。在请求 21~40,41~60 等其他段同理。
2) 第二步
在第一步之后就可以请求支持的 PID 了。
在一个请求消息帧中,最大可以请求 6 个 PID,通常情况下,请求的数据可能来自
不同的 ECU,如果用物理寻址分别请求不方便,不如功能寻址,直接从不同的 ECU
中拉取数据。
在返回消息中,可以根据在 PID 后面的数据是占 ByteA,还是 ByteA+B 来断句,翻
译出返回的数据,也可以一个请求消息中只有一个 PID,但这样需要 6 条 CAN 消
息去请求,6 条接收。