基于SAE J1939协议的车辆,默认开启数据广播。当有故障码时,也会按照故障码的格式进行广播。
此处基于外设主动:读取故障码个数->读取故障码->故障码解析 这个步骤来讲,如果被动接收故障码广播,如下解析也适用。
根据故障码个数分如下几种情况:
一、单个故障码时
读取故障码个数:
请求:18EA00F9 CE FE 00
响应:18FECE00 01 00 09 02 05 05 05 05
根据SAE J1939-73协议,解析响应如下:
01:当前激活故障码个数为1;
00:历史故障码个数为0;
09:符合EOBD、OBD和OBD II;
后面几个字节表明系统支持及状态。
有1个当前激活的故障码,下面去读取这个故障码:
请求:18EA00F9 CA FE 00
响应:18FECA00 10 FF B8 04 03 0A FF FF
根据SAE J1939-73协议,解析响应如下:
10:亮红色停车灯;
FF:警示灯不闪烁;
B8 04 03 0A:一条故障码信息。
FF FF:填充。
根据SAE J1939-73协议,一个故障码信息包括4个字节,组成如下:
故障码信息解析如下:
十六进制(B8 04 03 02)转为
二进制(1011 1000 0000 0100 0000 0011 0000 0010)
则:SPN =(000 0000 0100 1011 1000)B=(4B8)H=(1208)D
FMI =(00011)B=(3)D
CM = 0
OC = (0001010)B=(10)D
根据SAE J1939-71协议,查找SPN=1208的项,
根据SAE J1939-73协议附录,找到FMI=3的说明,
此故障码信息为:发动机机油滤清器前机油压力过高,亮红灯,已发生10次。
二、没有故障码时
读取故障码个数:
请求:18EA00F9 CE FE 00
响应:18FECE00 00 00 09 02 05 05 05 05
没有故障码,可以不用再去读取了。当然读取也可以,下面去读取故障码:
请求:18EA00F9 CA FE 00
响应:18FECA00 00 FF 00 00 00 00 FF FF
注意:未使用的字节7和8的应设置为FF(根据SAE J1939-21)。
注意:当没有故障码时,此应答字节3到6应设置为零。
三、多个故障码时
读取故障码个数:
请求:18EA00F9 CE FE 00
响应:18FECE00 04 00 09 02 05 05 05 05
有4个当前激活的故障码,下面去读取故障码:
请求:18EA00F9 CA FE 00
响应:18EC0000 10 12 00 03 FF CA FE 00
10:为RTS请求应答广播;
12 00:长度为18个字节;
03:后续数据分3帧传送;
CA FE 00:对应的请求PGN。
请求:18EC00F9 11 03 01 FF FF CA FE 00
表明:准备好接收从编号 1 开始的3个数据包
响应:18EB0000 01 10 FF B8 04 03 0A 20
18EB0000 02 3F 01 03 02 51 11 01
18EB0000 03 12 3E 04 02 FF FF FF
4个故障码为:B8 04 03 0A,20 3F 01 03,02 51 11 01,12 3E 04 02