【UDS诊断】——0x19 01

🙋‍♂️【UDS诊断服务介绍合集】系列💁‍♂️点击跳转


19服务作用是允许外部诊断仪(Client)通过该服务读取存储在ECU芯片内的故障码(DTC)状态信息

一、服务概述

通过该服务诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数。简单来说就是通过状态掩码去读取DTC数量。

二、报文

1.请求报文定义

在这里插入图片描述

2.肯定响应

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

3.报文讲解

3.1格式及内容

发 送: 19 +01+DTCStatusMask(DTC状态掩码)
正响应: 59+01+DTCStatusAvailabilityMask+DTC格式+DTCCount

注:DTCStatusAvailabilityMask是ECU支持的状态掩码,不能根据请求中的DTC状态掩码变化,容易误解为要返回的ECU支持的状态掩码和请求中的状态掩码做与运算后的结果

3.2举例

DTCStatusMask:为0000 0001->01
DTCStatusAvailabilityMask:ECU支持的状态位1111 1111->FF
DTC格式:00(J2012-DATACF00)

ECU中存储的DTC状态如下:
DTC1:0010 1111
DTC2:0010 1111

DTC3:0010 1100
DTC4:0010 1110

例① 发送19 01 01
回复59 01 FF 00 00 02
如图:
在这里插入图片描述
回复中02,表明有2个DTC:
解析如下:
ECU中存储的DTC状态(DTC1、DTC2、DTC3、DTC4)和
ECU支持的状态位(DTCStatusMask:01)相与
DTC1:0010 1111 &0000 0001->01
DTC2:0010 1111 &0000 0001->01
DTC3:0010 1100 &0000 0001->00
DTC4:0010 1110 &0000 0001->00
从相与结果可以看出有两个非0结果,所以DTCCount为2

例 ② 发送19 01 02
回复59 01 FF 01 00 04
如图:在这里插入图片描述
回复中04,表明有4个DTC:
解析如下:
ECU中存储的DTC状态(DTC1、DTC2、DTC3、DTC4)和
ECU支持的状态位(DTCStatusMask:01)相与
DTC1:0010 1111 &0000 1001->09
DTC2:0010 1111 &0000 1001->09
DTC3:0010 1100 &0000 1001->08
DTC4:0010 1110 &0000 1001->08
从相与结果可以看出有4个非0结果,所以DTCCount为4

### 关于ISO 14229 UDS诊断协议的概述 UDS(Unified Diagnostic Services)是一种由ISO 14229标准定义的世界范围内的汽车诊断通信协议[^2]。该协议旨在为汽车行业提供一种统一的标准,用于支持车辆内部的各种诊断功能和服务。UDS不仅被广泛应用于现代汽车制造过程中,还服务于修理厂和诊断设备开发者。 #### 协议的核心组成 UDS协议主要分为以下几个部分:ISO 14229-1、ISO 14229-2、ISO 14229-3 和 ISO 14229-4。其中,ISO 14229-1 是整个体系的基础,描述了诊断服务的概念及其基本框架[^1]。 --- ### 基础概念与框架 #### 诊断服务的基本分类 根据ISO 14229-1的规定,UDS的服务可以按照其用途划分为多个类别,主要包括但不限于以下几种: - **会话控制 (Session Control)** 提供进入不同工作模式的能力,例如默认会话、扩展会话等。 - **ECU重编程 (Ecu Reset and Programming Support)** 支持ECU重启以及软件更新等功能。 - **测试仪身份验证 (Tester Present)** 维护诊断连接的有效性,防止因超时而导致断开。 - **数据读写操作 (Data Read/Write Operations)** 允许访问特定参数或配置存储器的内容。 - **输入输出控制 (Input Output Control by Identifier)** 对指定信号进行实时监控或者调整。 - **周期性传输管理 (Periodic Data Transmission Management)** 实现定时发送某些监测结果给外部设备的需求。 每项服务都有对应的SID(Service ID),以便识别请求的具体类型并执行相应的动作。 --- ### 使用方法及示例教程 以下是基于Python的一个简单例子来展示如何利用Socket CAN接口模拟发起一次典型的UDS交互过程——查询当前支持的所有DTCs(Diagnostic Trouble Codes): ```python import can def send_uds_request(bus, request_id): message = can.Message(arbitration_id=0x7DF, data=[request_id], is_extended_id=False) bus.send(message) def receive_response(bus): response = bus.recv() return response.data if response else None if __name__ == "__main__": with can.interface.Bus(channel='vcan0', bustype='socketcan') as bus: # 发送Read DTC Information命令 send_uds_request(bus, 0x19) # SID for 'Report MIL status and DTC count' result = receive_response(bus) if result: print(f"Received Response: {result}") else: print("No valid response received.") ``` 此脚本展示了通过CAN总线向目标节点发出一个询问现存故障码数量的消息,并等待返回的数据包作为回应。 注意实际部署时可能还需要考虑更多细节比如错误处理机制、时间延迟补偿等问题;此外真实环境中也可能涉及加密认证流程确保安全性等方面的要求。 --- ### 总结 综上所述,UDS作为一个国际认可的技术规范,在促进全球范围内汽车工业标准化方面起到了至关重要的推动作用[^3]。无论是对于原始设备制造商(OEM), 还是对第三方服务商而言,理解和运用好这一套完整的解决方案都是非常必要的。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值