1. OBD_II协议介绍
[OBD-II介绍(转)](https://blog.csdn.net/Touxon/article/details/109185559)
ISO 9141-2 ,4 ISO 14230-4 , ISOSAE J1850,ISO 15765-4
2. OBD_II读故障码
服务$03-请求与排放有关的诊断故障码.
服务$07-请求当前或最后完成的驾驶循环中与排放有关的诊断故障码
服务$0A-请求与排放有关的永久状态诊断故障码(在上面新增:ISO 15765-4 义 诊断服务定义)
[故障码库(转)](http://www.360doc.com/content/10/1215/22/4685270_78518591.shtml)
[识别故障码干货(转)](https://www.sohu.com/a/254819660_428861)
OBD_II故障码主要是针对发动机的故障码库(P码),汽车里面有PBCU码,分别对应关系是
P码:发动机故障码
B码:车身故障码
C码:底盘相关故障码
U码:网关相关的故障码
例子:
P0002:燃油量调节器控制 -电路范围/性能故障
kwp2000协议(ISO14229)
TX:80(帧头) 10(目标地址) f1(源地址) 01(有效数据长度) 03(服务ID) CS(检验和)
RX:80(帧头) F1(目标地址) 10(源地址) 03(有效数据长度) 43(服务ID的肯定回答) [02 00](具体数据) CS(检验和)
RX的有效数据:第一位的高4位 :0--3:显示P码 4--7:显示B码(第一个数据减去0x40) 8--11:显示C码(第一个数据减去0x80) 12-15:显示U码(第一个数据减去0xC0)
依上面的逻辑读取的故障码是P0200,查询故障码库可以发现故障码是"燃油量调节器控制 -电路范围/性能故障"
如果返回的有效数据:[42 00],故障码显示为B0200(0x42-0x40=0x02),具体什么意义需要去故障码表中查询
3. 清除故障码
服务$04-清除/复位与排放有关的诊断信息
命令:
TX:80(帧头) 10(目标地址) f1(源地址) 01(有效数据长度) 04(服务ID) CS(检验和)
RX:80(帧头) F1(目标地址) 10(源地址) 01(有效数据长度) 44(服务ID的肯定回答) CS(检验和)
4. 读数据流
服务$01-请求当前动力系统诊断数据.
局部ID:外部测试设备请求来自车辆的支持的 PID($00,$20,$40,$60,$80,$A0)

实车采集的数据:
08 07 DF 02 01 00 00 00 00 00 00 ;Times: 2931644 us SID 01 PID 00
08 07 E8 06 41 00 BE 1F A8 13 00 ;Times: 899 us //BE 1F A8 13
08 07 DF 02 01 10 00 00 00 00 00 ;Times: 141329 us //PID:10 空气流量
08 07 E8 04 41 10 00 EA 00 00 00 ;Times: 1031 us
08 07 DF 02 01 0C 00 00 00 00 00 ;Times: 62966 us //PID:0C Engine speed 发动机转速
08 07 E8 04 41 0C 0C B2 00 00 00 ;Times: 532 us
08 07 DF 02 01 0D 00 00 00 00 00 ;Times: 181738 us //PID:0D Vehicle speed 车速
08 07 E8 03 41 0D 00 00 00 00 00 ;Times: 571 us
08 07 DF 02 01 04 00 00 00 00 00 ;Times: 199405 us //PID:04 Calculated LOAD Value 引擎负载计算
08 07 E8 03 41 04 38 00 00 00 00 ;Times: 2485 us
08 07 DF 02 01 10 00 00 00 00 00 ;Times: 197363 us //PID:10 空气流量
08 07 E8 04 41 10 00 DB 00 00 00 ;Times: 1200 us
命令例子:
TX:80 10 F1 02 01(SID服务ID) 00(局部ID) CS
RX:80 F1 10 06 41(SID服务ID的肯定回答) 00(局部ID) [FF FF FF FF](具体数据) CS
具体数据是0XFFFFFFFF,则表示0x01~0x20都支持,这里是是从高位到低位
第一个:0xFF 1 1 1 1 1 1 1 1
PID 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08
第二个:0xFF 1 1 1 1 1 1 1 1
PID 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10
第三个:0xFF 1 1 1 1 1 1 1 1
PID 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18
第四个:0xFF 1 1 1 1 1 1 1 1
PID 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F 0x20
如果那一位为0,该PID对应的数据ECU(发动机电路板)不支持.
用于确定支持 PID21-40 的 PID 20 PID
命令则如下:
TX:80 10 F1 02 01(SID服务ID) 20(局部ID) CS
RX:80 F1 10 06 41(SID服务ID的肯定回答) 20(局部ID) [FF FF FF FF](具体数据) CS
具体数据是0XFFFFFFFF,则表示0x01~0x20都支持,这里是是从高位到低位
第一个:0xFF 1 1 1 1 1 1 1 1
PID 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28
第二个:0xFF 1 1 1 1 1 1 1 1
PID 0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F 0x30
第三个:0xFF 1 1 1 1 1 1 1 1
PID 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38
第四个:0xFF 1 1 1 1 1 1 1 1
PID 0x39 0x3A 0x3B 0x3C 0x3D 0x3E 0x3F 0x40
局部和对应的算法:[PID算法(转)](https://wenku.baidu.com/view/4248576e9b89680202d8255f.html)

TX:08 07 DF 02 01 0D 00 00 00 00 00 ;Times: 181738 us //PID:0D Vehicle speed 车速
RX:08 07 E8 【03】(SID+PID+数据长度) 【41 0D】(SID+PID) 【20】(数据) 00 00 00 00 ;Times: 571 us
看上面的图片车速是一个字节,则RX里面 0x20,换成10进制,车速就是32,其他的数据也是类似,根据链接中算法来计算
这里文档如下:
1.OBD_II故障码库
2.SAE J1979-2007中文.pdf
(未完待续)