汽车诊断服务(UDS协议—14229—19、14服务解析)

目录

一、什么是UDS?

二、诊断服务

1、UDS服务

2、DTC状态位定义

3、0x19 读取故障码信息服务

3.1 0x19 01服务(reportNumberOfDTCByStatusMask)

3.1.1 0x19 01服务报文讲解

3.2 0x19 02服务(reportDTCByStatusMask)

3.1.1 0x19 02服务报文讲解

3.3 0x19 04服务(reportDTCSnapshotRecordByDTCNumber)

3.3.1 0x19 04服务报文讲解

3.4 0x19 06服务(reportDTCRecordByDTCNumber)

3.4.1 0x19 06服务报文讲解

3.5 0x19 0A服务(reportSupportedDTC)

3.5.1 0x19 0A服务报文讲解

4、0x14 清除诊断信息服务(ClearDiagnosticInformation)

4.1 0x14 服务报文讲解


一、什么是UDS?

UDS(统一诊断服务) 是汽车电子系统中广泛使用的诊断协议,基于ISO 14229标准的汽车电子诊断协议,用于ECU(电子控制单元)的诊断、调试、编程和维护。"UDS诊断"指通过访问车辆电子控制单元(ECU)提供的服务,获取车辆实时状态信息。技术人员可主动请求这些数据服务,从而分析车辆运行状况、定位故障原因,并据此进行维修维护或系统配置。

形象点说,就是用一套仪器对当前汽车出现的问题进行分析,而这套仪器与汽车交谈所使用的语言就是UDS。

二、诊断服务

车辆诊断用于整车厂开发、产线测试、售后维修、OTA升级。主要目标是检测和查询电子控制单元(ECU)的故障,更新ECU软件,与ECU硬件进行交互(如控制IO引脚的开关使能),以及执行自检操作。

1、UDS服务

    UDS服务包括但不局限于以下内容:

  • 诊断会话控制服务(0x10):用于控制诊断的启动和停止
  • 安全访问服务(0x27):用于解锁ECU访问,访问受保护的功能
  • 通讯控制服务(0x28):用于打开和关闭ECU报文的传输及接受
  • 诊断设备在线服务(0x3E):用于保持诊断工具与ECU之间的诊断连接
  • 通过标识符读取数据服务(0x22):使诊断工具从ECU中通过数据标识符进行数据读取
  • 通过标识符写入数据服务(0x2E):使用此服务通过数据标识符将数据写入到ECU中
  • 清除故障信息服务(0x14):用于清除ECU存储的故障码信息
  • 读取故障码信息服务(0x19):从ECU中读取存储在ECU内部的DTC信息
  • 例程控制服务(0x31):用于零部件标定的启动、结束以及请求零部件标定结果

2、DTC状态位定义

DTC状态位包含1个字节的数据长度,每个Bit位都有各自的含义,对应以下表格满足条件时,所对应的Bit位置1,通过读取各个Bit位的信息可以知道当前DTC的状态情况。开发时,需要双方协商一致,并不是每一个Bit都需要使用。

Bit Field
位场
Bit Description
描述
0Test Failed(测试失效(当前故障))
1Test Failed This operation cycle(当前操作循环检测故障位)
2Pending DTC(待确定的DTC)
3Confirmed DTC(确认DTC(历史故障))
4Test Not Complete Since Last Clear(上次清零后测试未完成)
5Test Failed Since Last Clear(上次清零后测试失效)
6Test not completed this monitoring cycle
(本检测周期测试未完成)
7Warning indicator requested
(警告指示位请求)

3、0x19 读取故障码信息服务

0x19服务:允许诊断仪通过该服务读取存储在ECU芯片内的故障码(DTC)状态信息。其中,该服务中又包含很多子服务,重点讲解常用的01、02、04、06、0A这5个子服务。

3.1 0x19 01服务(reportNumberOfDTCByStatusMask)

通过该服务,诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数

3.1.1 0x19 01服务报文讲解

发送:19+01+DTCStatusMask(DTC状态掩码)

正响应:59+01+DTCStatusAvailabilityMask(ECU支持的状态掩码)+DTC格式(如下图进行选择)+DTCCount(2个字节)

例:

发 送:19 01 09

正响应:59 01 FF 01 00 04

DTCStatusMask=:09

DTCStatusAvailabilityMask:FF 这里只ECU支持的状态为1111 1111

DTC格式:01 (14229-1DTCF)

DTCCount:00 04  DTCCount的计算

                                              ECU中存储的DTC状态如果有:

DTC1 0000 1111

DTC2 0000 1101

DTC3 0000 1001

DTC4 0000 1100

DTC5 0000 0010

ECU中存储的DTC状态(DTC1、DTC2、DTC3、DTC4、DTC5)和
ECU支持的状态位(DTCStatusMask:09)相与
DTC1:0000 1111 &0000 1001->09
DTC2:0000 1101 &0000 1001->09

DTC3:0000 1001 &0000 1001->09

DTC4:0000 1100&0000 1001->08

DTC5: 0000 0010&0000 1001->00

从相与的结果可以看出,有4个非0的结果,所以回复00 04,表明有4个DTC满足

3.2 0x19 02服务(reportDTCByStatusMask)

按照定义的状态掩码形式去查找匹配的故障信息列表,将DTC标识符(3个字节)、DTC状态(1个字节)的所有信息返回。

3.1.1 0x19 02服务报文讲解

发送:19+02+DTCStatusMask(DTC状态掩码)

正响应:59+02+DTCStatusAvailabilityMask(ECU支持的状态掩码)+(DTC故障码(3个字节)……+DTC状态……)

例:

发 送:19 02 09

正响应:59 02 FF 60 00 01 2C 60 00 02 4F

DTCStatusMask:09

DTCStatusAvailabilityMask:FF

DTC1故障码:60 00 01

DTC1状态:2C

DTC2故障码:60 00 02

DTC2状态:4F

从回复中看出有两个故障:

2C:0010 1100  Bit0(Test Failed)为0,Bit3(Confirmed DTC)为1,故DTC1是一个历史故障

13:0100 1111  Bit0(Test Failed)为1,Bit3(Confirmed DTC)为1,故DTC1是一个当前故障

3.3 0x19 04服务(reportDTCSnapshotRecordByDTCNumber)

该服务用于请求指定故障码(DTC)的快照信息,通过查找故障发生时刻的这些数据,来分析故障原因,快照信息包括故障的发生时间、电压、行驶里程数、车速等。

3.3.1 0x19 04服务报文讲解

发送:19+04+DTC故障码(3个字节)+DTC快照记录编号

正响应:59+04+DTC故障码(3个字节)+DTC状态+DTC快照记录编号(如图)+快照信息中记录的信息成员数(几个DID)+第1个DID(2字节)+第1个DID对应的数值信息+第2个DID(2字节)+第2个DID对应的数值信息……

例:

发 送:19 04 60 00 01 02

正响应:59 04  60 00 01 2C 02 15 F1 02 01 C8 F1 03 21 C8 23……

DTC故障码: 60 00 01 

DTC快照记录编号:02(DTC 快照可以分为不同的组,包含不同种类的快照信息,通常要记录某个DTC第一次发生(用01表示)和最近一次发生的快照数据时(用02表示)以及读取所有快照记数据(用FF表示)。

DTC状态:2C

快照信息中记录的信息成员数:15(这指的是所定义的快照数据为15个)

第1个DID:F1 02 

第1个DID对应的数值信息:01 C8

第2个DID:F1 03

第2个DID对应的数值信息:21 C8 23

……还有13个DID和数值信息省略

3.4 0x19 06服务(reportDTCRecordByDTCNumber)

该服务获取指定DTC的扩展信息,用于记录故障的一些其他信息,比如故障发生的次数、老化次数、已老化次数等。

3.4.1 0x19 06服务报文讲解

发送:19+06+DTC故障码(3个字节)+扩展信息记录码

正响应:59+04+DTC故障码(3个字节)+DTC状态+扩展信息记录码+扩展信息

例:

发 送:19 06 60 00 01 01

正响应:59 06  60 00 01 2C 01 02

DTC故障码:60 00 01

扩展信息记录码:01(故障发生计数器)

DTC状态:2C

扩展信息:02(故障发生了2次)

3.5 0x19 0A服务(reportSupportedDTC)

该服务用于请求所有支持的DTC信息(3个字节DTC与1个字节的DTC状态),响应的报文返回的是所有DTC的信息,而02服务返回的是请求时状态掩码与之不为0的DTC信息。

3.5.1 0x19 0A服务报文讲解

发送:19+0A

正响应:59+0A+DTCStatusAvailabilityMask(ECU支持的状态掩码)+(DTC故障码(3个字节)……+DTC状态……)

例:

发 送:19 0A

正响应:59 0A FF 60 00 01 2C 60 00 02 4F……

DTCStatusAvailabilityMask:FF

DTC1故障码:60 00 01

DTC1状态:2C

DTC2故障码:60 00 02

DTC2状态:4F

……

4、0x14 清除诊断信息服务(ClearDiagnosticInformation)

该服务用于清除ECU内存储的故障码信息。

4.1 0x14 服务报文讲解

发送:14+DTC编码/DTC编码组

正响应:54

例1:(清除某个固定的DTC)

发 送:14 B0 76 54

正响应:54

例2:(清除车身系统组DTC)

发 送:14 80 00 00

正响应:54

按组清除分为:

000000:排放相关系统

100000:动力系统组

400000:底盘系统组

800000:车身系统组

C00000:网络系统组

FFFFFF: 所有组故障信息

### UDS诊断协议中的服务19详解 #### 服务概述 `ReadDTCInformation Service` (服务19) 是统一诊断服务(UDS) 中用于读取故障码(DTCs, Diagnostic Trouble Codes) 的重要功能之一。该服务允许客户端请求车辆控制单元存储的不同类型的故障信息[^1]。 #### 子服务分类 此服务下设多种子命令来细化查询需求,具体如下: - **报告当前DTC状态字**:获取当前活动的DTC数量及其严重程度等信息。 - **报告已确认的DTC**:返回已经由ECU验证过的永久性故障代码列表。 - **报告待处理的DTC快照数据记录编号**:提供有关尚未被确认但仍处于监控下的潜在问题的信息。 - **报告指定DTC的快照数据组**:针对特定的一个或几个DTC,提取其发生时刻的相关运行参数。 - **清除/冻结帧并重置DTC计数器和指针**:执行清零操作,移除所有现存的DTC以及关联的数据,并初始化内部统计量。 - **停止镜像内存快照到非易失RAM中保存**:终止周期性的自动备份过程,防止临时状况成为历史记录的一部分。 - **启动镜像内存事件捕获**:激活特殊条件触发机制,在满足预定义标准时捕捉实时工作环境变量。 - **报告支持的服务子集**:列举本设备所实现的支持选项,便于工具识别兼容特性。 ```python def read_dtc_information(sub_function_code): """ 发送UDS服务19请求 参数: sub_function_code : int 表示所需调用的具体子函数编码 返回: response_data : bytes 来自ECU的实际响应报文内容 """ request_message = b'\x19' + bytes([sub_function_code]) # 假定存在send_uds_request方法发送消息给汽车网络节点... response_data = send_uds_request(request_message) return response_data ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值