UDS诊断(ISO14229-1) 19服务

功能简介

19服务,即 ReadDTCInformation(读取 DTC 信息)服务,允许客户端读取接受自任何车载服务器或服务器组的服务器常驻故障诊断码(DTC)信息。除非特殊子功能提出要求,服务器应返回所有 DTC 信息(如排放或非排放相关信息)。

请求和响应

  • 1、请求基本格式

归纳起来,诊断的request格式无非以下两种:

<SID> + <Sub-function> + <Parameter>

<SID> + <Parameter>

即有无sub-function的区别。Parameter可以是DID,可以是输入参数,可以是自定义的值,字节数视具体要求而定。

  • 2、子功能参数定义(1字节数据)

    • Bit7:抑制肯定响应消息指示位suppressPosRspMsgIndicationBit
      • 0=False:需要肯定响应
      • 1=True:禁止肯定响应
    • Bit6-0:子功能参数值(0x00~0x7F)

由于 19 服务子功能较多,此处只介绍常用子功能,其他参考ISO14229-1 文档。

  • 3、肯定响应基本格式

<SID + 0x40> + <Sub-function> + <Parameter>

<SID + 0x40> + <Parameter>

要注意,第一个字节是由SID和0x40的和构成。这里的Parameter项是optional的,具体要看协议规定。

1、sub-function = 0x01 reportNumberOfDTCByStatusMask

检索与客户端定义 DTC 状态掩码相匹配的 DTC 的数量

  • 请求:
    在这里插入图片描述

  • 肯定响应
    在这里插入图片描述
    在这里插入图片描述

  • 示例
    假设服务器共支持三个 DTC(为简单起见!),DTC码和状态分别为

    • P0805-11“离合器位置传感器对地短路( 0x080511) ”, statusOfDTC(DTC 状态)为 0x24(0010 0100b)。
    • P0A9B-17 “混合电 池温度传 感器电 压超出阈 值( 0x0A9B17) ”,statusOfDTC(DTC 状态)为 0x26(0010 0110b)。
    • P2522-1F A/C 请求“B”- 电路不时断开( 0x25221F), statusOfDTC(DTC 状态)为 0x2F(0010 1111b)。

在这里插入图片描述
在这里插入图片描述

2、sub-function = 0x02 reportDTCByStatusMask

检索与客户端定义 DTC 状态掩码相匹配的 DTC 列表

  • 请求
    在这里插入图片描述

  • 肯定响应
    在这里插入图片描述

  • 示例
    假设服务器共支持三个 DTC(为简单起见!),DTC码和状态分别为

    • DTC P0A9B-17 “混合电 池温度传 感器电 压超出阈 值( 0x0A9B17) ”,statusOfDTC(DTC 状态)为 0x24(0010 0100b)
    • P2522-1F A/C 请求“B”- 电路不时断开( 0x25221F), statusOfDTC(DTC 状态)为 0x00(0000 0000b)
    • P0805-11“离合器位置传感器对地短路( 0x080511) ”, statusOfDTC(DTC 状态)为 0x2F(0010 1111b)
      在这里插入图片描述
      在这里插入图片描述

3、sub-function = 0x03 reportDTCSnapshotIdentification

获取DTC快照记录ID

诊断仪可以通过该子功能请求来检索所有捕获的 DTC快照记录的ID信息。服务器应返回所有已存储 DTC快照记录的 ID信息列表。服务器在响应消息中为单个 DTCSnapshot 记录放置的每个项目都应包含一个DTCRecord [包含 DTC number(high,middle,low字节)]和 DTCSnapshot record number。如果为单个 DTC 存储了多个DTCSnapshot 记录,则ECU应在每次响应时使用1个不同的DTCSnapshot record number(便于后续的查询)来表示。

ECU可支持对单个DTC存储多个DTCSnapshot records来跟踪每次DTC发生时的环境条件。DTCSnapshot records数量应被系统供应商或整车厂定义。

客户端成功发出 ClearDiagnosticInformation 请求后,应清除 DTCSnapshot 记录ID信息。 整车厂需要定义清楚删除已存储 DTC 和 DTCSnapshot 数据的规则以防内存溢出。

  • 请求
    在这里插入图片描述

  • 肯定响应
    在这里插入图片描述

  • 示例

  • 下述假定适用于:

    • 服务器具有能够存储指定 DTC 的两个 DTCSnapshot(DTC 快照)记录的能力。
    • 服务器须显示 DTC0x123456 当前存储的两个 DTCSnapshot(DTC 快照)记录。在本示例中,假
      定该 DTC 已出现三次(由于服务器内存储空间不足,因此仅存储第一次和最近一次的 DTC 快照记录)。
    • 服务器须显示 DTC0x789ABC 当前存储的一个 DTCSnapshot(DTC 快照)记录
    • 所有 DTCSnapshot(DTC 快照)记录的存储均以升序排列。

在这里插入图片描述
在这里插入图片描述

4、sub-function = 0x04 reportDTCSnapshotRecordByDTCNumber)

是用于请求指定故障码(DTC)的快照信息

  • 请求
    在这里插入图片描述

其中,DTCSnapshotRecordNumber表示DTC快照记录码,占一个字节,表示特定的DTC快照数据记录编号。

例如当我们需要记录某个DTC第一次发生(假设用1表示)和最近一次发生的快照数据时(假设用2表示);那么当DTCSnapshotRecordNumber为1时,则表示请求该DTC第一次发生时的快照信息。

如果ECU支持多个DTC快照数据记录,那么该纪录码应使用Ox01~0xFE范围内的数值。当该参数值为0xFF时,要求ECU一次性报告所有存储的DTC快照数据记录。

  • 肯定响应
    在这里插入图片描述
    在这里插入图片描述

  • 示例

  • 下述假定适用于:

    • 服务器具有能够存储指定 DTC 的两个 DTCSnapshot(DTC 快照)记录的能力。
    • 本示例假定延续使用先前的示例。
    • 假定服务器请求服务器存储的 DTC 号 0x123456 的两个 DTCSnapshot(DTC 快照)记录的第二个记录(参见先前示例中 0x02 DTCSnapshotRecordCount(DTC 快照记录计数)返回至客户端的情况)
    • 假定 DTC 0x123456 的 statusOfDTC(DTC 状态)为 0x24,且每次出现 DTC 时均可获取下述环境数据。
    • 通过 dataIdentifier(数据标识符) 0x4711 引用 DTCSnapshot(DTC 快照)记录数据。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

5、sub-function = 0x06 reportDTCRecordByDTCNumber

读取与客户端定义 DTC 掩码和客户端定义 DTCExtendedData(DTC 扩展数据)记录编号匹配的DTCExtendedData ( DTC 扩 展 数 据 ) 记 录 数 据

除了前面04服务中介绍到的快照信息;一般还会再定义一个扩展信息,用于记录故障的一些其他信息,比如故障发生的次数、老化次数、已老化次数等。

  • 请求
    在这里插入图片描述

  • 肯定请求
    在这里插入图片描述

  • 示例

  • 下述假定适用于:

    • 服务器具有能够存储指定 DTC 的两个 DTCExtendedData(DTC 扩展数据)记录的能力。
    • 假定服务器请求服务器存储的 DTC 号 0x123456 所有可用 DTCExtendedData(DTC 扩展数据)记录。
    • 假定 DTC 0x123456 的 statusOfDTC(DTC 状态)为 0x24,且下述扩展数据适用于该 DTC。
    • 通 过 DTCExtDataRecordNumber ( DTC 扩 展 数 据 记 录 号 ) 0x05 和 0x10 引 用 DTCExtendedData(DTC 扩展数据)。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

6、sub-function = 0x0A reportSupportedDTC

读取ECU支持的所有DTC列表及其状态

  • 请求
    在这里插入图片描述

  • 肯定响应
    在这里插入图片描述
    在这里插入图片描述

  • 示例

    • 在客户端请求时,服务器共支持三个具有下述状态的 DTC(为简便起见!)。
    • 下述假定适用于 DTC 0x123456, statusOfDTC(DTC 状态) 0x24(0010 0100b)。
    • 下述假定适用于 DTC 0x234505, statusOfDTC(DTC 状态) 0x00(0000 0000b)。
    • 下述假定适用于 DTC 0xABCD01, statusOfDTC(DTC 状态) 0x2F(0010 1111b)。
      在这里插入图片描述
      在这里插入图片描述

7、sub-function = 0x19 reportUserDefMemoryDTCExtDataRecordByDTCNumber

检索 DTC 内存中与客户端定义 DTC 掩码以及客户端定义 DTCExtendedData(DTC 扩展数据)记录编号匹配的用户定义内存 DTCExtendedData(DTC 扩展数据)记录数据

  • 请求
    在这里插入图片描述

  • 肯定响应
    在这里插入图片描述
    在这里插入图片描述

  • 示例

否定响应

基本格式:

<0x7F> + <SID> + <NRC>

看起来比较简单,格式比较固定,只要是Negative Response,第一字节就是0x7F,第二字节照抄原来的SID,第三个字节是错误响应码,指示具体错误响应的原因
在这里插入图片描述

UDS中常用 NRC

在这里插入图片描述

参考

  • https://blog.csdn.net/qq_42957717/article/details/117289491
在探讨汽车电子系统中的UDS诊断服务通信过程时,理解ISO 14229-1标准至关重要。UDS诊断服务的实现涉及到数据链路层的协议和应用层的服务。数据链路层负责物理传输,而应用层则定义了具体的诊断服务和消息格式。通信过程可以分为以下步骤: 参考资源链接:[UDS诊断ISO27145解析:应用层与服务概述](https://wenku.csdn.net/doc/6412b47cbe7fbd1778d3fc10?spm=1055.2569.3001.10343) 1. **初始化诊断会话**:车辆上电启动后,诊断工具通过发送特定的服务请求(如0x10请求)来初始化诊断会话。根据ISO 14229-1标准,有多种会话模式,如默认会话、编程会话等,每种模式下的诊断操作权限不同。 2. **请求诊断服务**:诊断工具通过发送包含功能代码和必要参数的服务请求消息来请求特定的诊断服务。例如,要读取故障码(DTCs),会使用0x19B***的服务ID发送请求。 3. **服务确认**:车辆控制器接收到诊断请求后,会发送一个确认消息,表明它已经接收到了请求。对于有确认服务,这一步是必须的。 4. **执行诊断服务**:车辆控制器根据请求执行相应的诊断操作,如读取数据、写入数据或者激活控制功能。 5. **响应诊断结果**:操作完成后,车辆控制器将结果通过响应消息发送回诊断工具。对于有确认服务,还需要发送响应确认消息(如0x59B***)以完成消息的双向确认。 在实际应用中,每一个步骤都需要根据ISO 14229-1标准进行编码和解码,以确保通信的准确性和可靠性。诊断工具开发者需要确保他们的软件能够符合标准,正确解析和构造UDS协议中的各种消息。 如果想要深入了解UDS诊断服务的通信过程及其在ISO 14229-1标准下的实现,建议参阅《UDS诊断ISO27145解析:应用层与服务概述》这份资料。该资料详细介绍了UDS的各个服务和通信过程,不仅适用于汽车电子工程师,也适合诊断工具开发者等专业人士参考。通过这份资料的学习,可以帮助你更系统地掌握UDS通信协议的精髓,为实际工作中遇到的问题提供解决方案。 参考资源链接:[UDS诊断ISO27145解析:应用层与服务概述](https://wenku.csdn.net/doc/6412b47cbe7fbd1778d3fc10?spm=1055.2569.3001.10343)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值