文章目录
功能简介
01服务,即 Request current powertrain diagnostic data
(读取动力系统当前的诊断数据)服务,比如某个传感器的状态、发动机转速、DTC数量、故障指示灯是否亮起等
这些数据都是需要预先定义好的,如何进行定义呢,在ISO标准规定了一些参数标识符即PID(parameter Identifiers),每个PID代表一个变量参数。可以参考 J1979DA_202305.xlsx
OBD诊断中,ECU 至少应支持服务0x01
和 PID 0x00
ISO 15765-4的诊断服务定义
PID 的功能
PID 的大小占一个字节。
ISO其实定义了部分PID参数,其余的值都保留,并不要求所有的主机厂把这些参数都实现,也就是说PID参数是可以选择支持的。
那么ECU到底支持哪些PID?
实际上,PID分为两类,一类用于表示具体的数据,而另一类则用于指出该ECU支持哪些PID。
如PID 0x00\0x20\0x40\0x60\0x80等就是用来查询到底支持哪些服务的, 读取其中一个PID后ECU会返回4个字节(32 bit)的结果,依次对应ECU对其后 32 个PID是否支持。具体如何使用如下:
- PID 0x00 用于查询(0x01~0x20)之间支持的PID参数
- PID 0x20 用于查询(0x21~0x40)之间支持的PID参数
- PID 0x40 用于查询 (0x41~0x60)之间支持的PID参数
- 以此类推后面的0x60 0x80
1、 请求当前动力系统诊断数据请求信息定义(读支持的 PID)
例如: PID 0x00、PID 0x20、PID 0x40 等
2、 请求当前动力系统诊断数据应答信息定义(报文支持的 PID)
如果发送了请求, ECU 将报文所有支持的范围。范围定义为 32 个 PID 为一组(例如 范围#1:PID$01-$20)。除非后续的范围还有支持的 PID,否则 ECU 将对不支持的 PID 范围不进行应答。
应答格式:<SID + 0x40> + <PID> + <支持的 PID PID PID PID>
应答信息仅包含 PID 以及 ECU 所支持的 Data A-D。如果请求信息包含不被 ECU 支持的 PID 值,那么它们将不包含在应答信息中。
3、请求当前动力系统诊断数据请求信息定义(读 PID 值)
4、请求当前动力系统诊断数据应答信息定义(报文 PID 值)
应答格式:<SID + 0x40> + <PID> + <支持的 PID PID PID PID>
不是所有包含在请求信息内的 PID 才可能被所有与排放相关的 ECU 所支持,将符合该规定。因此,每个车辆的 ECU,至少支持一个 PID,并且发送一个包含带数据的 PID 应答信息。
5、示例报文
5.1 请求来自车辆的支持的 PID
5.2 请求来自车辆的多个 PID 值
数据解析,以 PID 0x0C 为例:
- 数据字节 A: 0A
- 数据字节 B: 6B
SAE J1979-DA 对 PID 0x0C 的定义为:
从表中可知,该PID占2个字节,分辨率为 1/4 = 0.25
- Hex: 0A 6B
- Dec:2667
- PID 实际值 2667 * 0.25 = 666.75
PID数据定义
SAE J1979-DA 规定了对受支持的 PID 数据定义和解释,指定了其含义以及大小。