目录
说在前面:
PID分为两类:
一类PID用于指出该ECU支持哪些PID.
这些PID包括是0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0,SWS标准中称为"availability PIDs";读取其中一个PID后ECU会返回4个字节的结果,这4个字节中的每个bit表示其所对应的PID是否被支持。
例如:PID 0x00表示0x01到 0x20之间的PID,PID 0x20表示0x21到0x40之间的PID。
每次请求最多包含6个availability PID.
另一类用于查询具体数据值的PID.
SWS标准中称为 not "availability PIDs"。
上述概念同样适用于OBD MonitorIDs/TIDs/INFOTYPEs,分别对应0x02、0x06 、0x08 、0x09 .服务。
下面介绍不同OBD服务的请求和响应数据格式(参考15031-5, 2015)
0x01服务
该服务用于读取动力系统当前的诊断数据,比如某个传感器的状态、发动机转速、DTC数量、故障指示灯是否亮起等,命令格式是SID + 若干PID(Parameter ID)。每个PID也是一个byte,所以理论上PID取值范围是0x00至0xFF,但是ISO-15031-5只明确定义了部分PID,其余的值都保留。
请求ECU支持的PIDs:
请求格式:
响应格式:
请求查值PID:
请求格式:
响应格式:
并非所有与排放有关的ECU都支持请求消息中包含的所有PID,其应符合iso15031的这一部分。因此,每辆车的ECU,其中至少支持1个PID,应发送包含数据的PID的响应消息。
示例
STEP1:请求ECU支持哪些查值PID
ECU应响应所有支持的范围。一个范围被定义为32个PID的块(例如范围#1:PID 01-20)。ECU不应响应不支持的PID范围,除非随后范围有一个支持的PID。
不同ECU支持的PID范围不同,假设有两个ECU,分别为ECU1、ECU2,其各自的响应如下:
ECU1#:
从响应信息可看出:ECU1支持的PID包括:0x01 , 0x03 - 0x09 , 0x0B - 0x11 , 0x13 , 0x15 , 0x19 , 0x1C , 0x20 , 0x21.
ECU2#:
从响应信息可看出:ECU2支持的PID包括:0x01 , 0x0D.
STEP2:请求ECU支持的查值PID携带的数据信息
外部测试设备在一个请求消息中请求最多六(6)个pid的组合,以获得显示当前数据的最佳性能:
发送请求消息:
响应数据流:
ECU1#:
从响应数据可看出:ECU #1 (ECM)报告MIL命令,三个存储dtc,所有监视器支持,催化剂,加热催化剂,氧传感器和氧传感器加热器未完成,所有其他监视器已完成。
ECU2#:
从响应信息可以看出:ECU #2 (TCM)报告MIL命令关闭,一个存储DTC,支持完整的综合组件监视器,不支持所有其他监视器。
注意:响应消息中PID的顺序不需要与请求消息中的PID顺序匹配。