0x19服务有一定的门槛,需要先了解DTC,可以先看看我的另一篇文章全面了解DTC_不吃鱼的羊的博客-CSDN博客
子功能
0x19服务是用来查询DTC的,往往子服务是最多的,测试起来工作量也是最大最容易出问题的,下面分开不同的子功能的请求应答报文进行详细说明。
0x01服务
通过状态掩码去查找与其相匹配的故障码个数。如果某一个故障码的实际状态位为1,并且DTC状态掩码中的相应位也为1,那么就认为该故障码的状态与DTC状态掩码相匹配(即:如果DTC状态掩码字节与DTC实际状态字节进行逻辑“位与”运算后的结果为非零值,那么两者就相匹配);此时则将故障数+1。如果诊断仪定义了一个状态掩码,其中包含ECU不支持的位,那么ECU仅使用本身支持的位进行处理故障信息。
0x02服务
按照定义的状态掩码的形式去查找匹配的故障,将匹配的DTC标识符(3个字节)、DTC状态(1个字节)信息返回。上一小节的01子服务只统计与状态掩码相匹配的DTC个数,02子服务则会将这些匹配的DTC信息返回。
请求报文格式:0x19 + 0x02子服务 + 掩码,掩码一般为一个字节,范围从0x00-0xFF,查询跟掩码匹配的DTC列表里面故障状态。
举个例子,如果掩码为0x08,历史故障位bit3,当前故障位bit0。被测电路板里面“没有故障的DTC”、“有只有历史故障的DTC”和“有当前故障和历史故障的DTC”,每个DTC的故障状态跟掩码相与,不为0的DTC都是符合要求的,也就是全部“有只有历史故障的DTC”和“有当前故障和历史故障的DTC”。这时候就要将所有符合要求的DTC ID和故障状态进行响应。
响应报文格式:0x59 + 0x02子服务 + 掩码 + 【DTC ID + 故障状态】* N个符合要求的DTC
0x0A子服务跟0x02类似,此处不再赘述。
0x03服务
该服务是查询所有DTC的快照
请求报文格式:0x19 + 0x03子服务
响应报文格式:0x59 + 0x03子服务 + 【DTC ID + 整个快照信息】* 全部DTC个数
0x04服务
该服务根据DTC ID的快照记录码查询对应DTC的,每次只能查一条DTC的快照记录。
请求报文格式:0x19 + 0x04子服务 + DTC ID + 快照记录码(如果发送的快照记录码位0xFF则响应整个快照)
响应报文格式:0x59 + 0x04子服务 + DTC ID + 快照记录码数量 + 快照记录码 + 快照信息
0x06服务
该服务根据DTC ID和扩展数据码读取扩展数据
请求报文格式:0x19 + 0x06子服务 + DTC ID + 扩展数据码
响应报文格式:0x59 + 0x06子服务 + DTC ID + 扩展数据码 + 扩展数据
扩展数据可以是故障次数、老化时间等。