UDS(ISO14229 - 1)-0x19服务(DTC信息读取)
服务描述
19服务允许客户端从任何服务器或车辆内的服务器组,读取存储在服务器中的诊断故障代码 (Diagnostic Trouble Code,DTC) 信息的状态。除非特定子功能另有要求,否则服务器应返回所有DTC信息(例如,与排放相关和非排放相关)。
由于19服务的子服务太多了,所以在这里只讲几个我们常用的子服务:
先看一下服务的请求格式:
sub-function = 0x01,检索与客户端定义的 DTC 状态掩码匹配的 DTC 数量
如果你不知道DTC以及不清楚DTC的状态掩码是什么的话,建议先阅读我写的另一篇文章,汽车诊断中常说的DTC是什么?这里详细讲述了DTC以及DTC的状态掩码信息。客户端可以通过发送对此服务的请求,并将子服务设置为0x01,来检索与客户端定义的状态掩码匹配的 DTC 数的计数。
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
例如:我想请求与以上掩码一致的DTC的数量,即目前Test Failed的DTC有几个,则可以发送一条请求。
REQ:0x19 0x010x01 0x00 0x00 0x00 0x00
则可能会得到一条Positive的回应:
RESP:0x49 0x01 0x12 0x00 0x00 0x00 0x00
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
例如:我想请求与以上掩码一致的DTC的数量,即目前Test
Failed的DTC或者是(这里是或集)Confirmed的DTC有几个,则可以发送一条请求。
REQ:0x19 0x01 0x09 0x00 0x00 0x00 0x00
则可能会得到一条Positive的回应:
RESP:0x59 0x01 0x1 0x00 0x00 0x00 0x00
PS:如果你对服务的请求和回应格式不太清楚,可以参考这一篇文章UDS 之服务描述约定。
sub-function = 0x02,检索与客户端定义的 DTC 状态掩码匹配的所有 DTC 的列表
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
例如:我想请求与以上掩码一致的DTC列表,即目前Test Failed的DTC有哪些,具体的是哪几个,则可以发送一条请求
REQ:0x19 0x02 0x09 0x00 0x00 0x00 0x00
则可能会得到一条Positive的回应:
RESP:0x59 0x02 0x16 0x03 0x11 0x16 0x03
回复后面跟着的 0x16 0x03 0x11则为具体的故障码编号,如果有对应的CDD文件做解析,则可以很方便的通过CAN工具来看到具体的故障信息,如下图所示:
sub-function = 0x04,检索与客户端定义的 DTC 关联的DTC Snapshot 数据(有时称为冻结帧,freeze frames)通过DTC。
DTC Snapshot是与 DTC 关联的特定数据记录,存储在服务器的内存中。DTC Snapshot的典型用途是在检测到系统故障时存储数据。DTC Snapshot将充当系统故障发生时的数据值快照,存储在DTC Snapshot中的数据参数应与DTC相关联。
例如:我想请求DTC 16a300第1次发生时的Snapshot 数据(DTCSnapshotRecordNumber = 0x01),则可以发送一条请求。
REQ:0x19 0x04 0x16 0xa3 0x00 0x01 0x00
则可能会得到多条Positive的回应(这里如果数据很多超过八个字节,则会有多帧的形式回复):
RESP:59 04 16 a3 00 AF 01 10 01 2C 03 FF
DTCAndStatusRecord:
1)DTC:16 a3 00
2)DTC Status :AF(八位:10101111)
DTCySnapshotRecordNumber:
1)DTCSnapshotRecordNumber :0x01
2)DTCSnapshotRecordNumberofID:0x10(记录的snapshot数量是16个)
3)DTCSnapshotRecordData:0x012C(snapshot编号是012c)
4)DTCSnapshotRecordValue:0x03FF (012csnapshot的值)
5)DTCSnapshotRecordData:…
6)DTCSnapshotRecordValue:…
…
sub-function = 0x06,reportDTCExtDataRecordByDTCNumber,检索与客户端定义的 DTC 关联的Extended 数据(即扩展数据,例如故障发生的次数等)通过DTC。
DTC Snapshot是与 DTC 关联的特定数据记录,存储在服务器的内存中。DTC Snapshot的典型用途是在检测到系统故障时存储数据。DTC Snapshot将充当系统故障发生时的数据值快照,存储在DTC Snapshot中的数据参数应与DTC相关联。
例如:我想请求DTC 16a300的Extended 数据,则可以发送一条请求。
REQ:0x19 0x06 0x16 0xa3 0x00 0x00 0x00
则可能会得到一条Positive的回应(这里如果数据很多超过八个字节,则会有多帧的形式回复):
RESP:59 06 16 a3 00 AF 01 01 00
DTCAndStatusRecord:
1)DTC:16 a3 00
2)DTC Status :AF(八位:10101111)
DTCExtDataRecordNumber: 01
DTCExtDataRecord:
1)OCC :0x01
2)aging Count: 0x00
3)…
sub-function = 0x0A,reportSupportedDTC,检索服务器支持的所有 DTC 的状态。
DTC Snapshot是与 DTC 关联的特定数据记录,存储在服务器的内存中。DTC Snapshot的典型用途是在检测到系统故障时存储数据。DTC Snapshot将充当系统故障发生时的数据值快照,存储在DTC Snapshot中的数据参数应与DTC相关联。
例如:我想请求DTC 16a300的Snapshot 数据,则可以发送一条请求。
REQ:0x19 0x0A 0x00 0x00 0x00 0x00 0x00
则可能会得到一条Positive的回应:
59 0A 7F 12 34 56 24 23 45 05 00 AB CD 01 2F
其中包含的DTC为:123456,234505,ABCD01它们对应的状态掩码为:24,00,2F