Python定义UDS诊断服务(6):ReadDTCInformation(0x19)

目录

1. 文档概述

2. 服务简介

2.1 服务定义

2.2 服务重要性

2.3 协议规范

3. 类结构设计

3.1 继承关系

3.2 类成员说明

3.2.1 ReadDTCInformation 类属性

3.2.2 Sub_function 嵌套类

3.2.3 Response_Interpret 嵌套类

4. 核心方法详解

4.1 make_request 方法

4.1.1 方法签名

4.1.2 参数说明

4.1.3 子功能参数要求

4.2 interpret_response 方法

4.2.1 方法签名

4.2.2 响应解析逻辑

5. 协议细节

5.1 子功能详细说明

5.1.1 0x01 - reportNumberOfDTCByStatusMask

5.1.2 0x02 - reportDTCByStatusMask

5.1.3 0x03 - reportDTCSnapshotIdentification

5.1.4 0x04 - reportDTCSnapshotRecordByDTCNumber

5.1.5 0x06 - reportDTCExtendedDataRecordByDTCNumber

5.1.6 0x0A - reportSupportedDTCs

5.2 否定响应处理

5.2.1 支持的否定响应码

6. 使用示例

6.1 基本使用

6.1.1 获取DTC数量

6.1.2 获取DTC列表

6.1.3 获取快照数据

6.2 完整诊断流程

7. 高级用法和最佳实践

7.1 状态掩码管理

7.2 批量DTC处理

8. 错误处理和调试

8.1 响应验证工具

8.2 调试和日志记录


1. 文档概述

        本文档详细说明基于ISO 14229-1标准的读取诊断故障码信息服务(Read DTC Information, Service ID 0x19)的Python实现。该服务是UDS协议中最复杂的服务之一,提供了多种子功能来读取和管理ECU中的诊断故障码(DTC)及其相关数据。

2. 服务简介

2.1 服务定义

        读取诊断故障码信息服务(0x19)允许客户端从服务器(ECU)读取诊断故障码信息,包括DTC状态、数量、快照数据和扩展数据等。

2.2 服务重要性

  • 故障诊断:获取当前和历史故障信息
  • 系统监控:监控ECU健康状态
  • 数据分析:收集故障相关数据用于分析
  • 维护支持:支持预防性和 corrective 维护

2.3 协议规范

        本实现遵循ISO 14229-1:2020标准中关于0x19服务的规范,支持6个核心子功能。

3. 类结构设计

3.1 继承关系

ReadDTCInformation(BaseService)
    ├── Sub_function(BaseService_fun)
    └── Response_Interpret(Response)

3.2 类成员说明

3.2.1 ReadDTCInformation 类属性
属性 类型 描述
_sid int 0x19 服务标识符
_use_sub_function bool True 使用子功能参数
_has_response_data bool True 有响应数据
supported_negative_response List[ResponseCode] [0x12, 0x13, 0x31] 支持的否定响应码
3.2.2 Sub_function 嵌套类

定义了6个子功能:

  • 0x01reportNumberOfDTCByStatusMask - 按状态掩码报告DTC数量
  • 0x02reportDTCByStatusMask - 按状态掩码报告DTC状态
  • 0x03reportDTCSnapshotIdentification - 报告DTC快照标识
  • 0x04reportDTCSnapshotRecordByDTCNumber - 按DTC编号报告快照记录
  • 0x06reportDTCExtendedDataRecordByDTCNumber - 按DTC编号报告扩展数据记录
  • 0x0AreportSupportedDTCs - 报告支持的DTC
3.2.3 Response_Interpret 嵌套类
class Response_Interpret(Response):
    dtc_list: list[DTC]
    dtc_count: Optional[int]
    status_availability: Optional[DTC.Status]

响应解析类包含DTC列表、数量和状态可用性信息。

4. 核心方法详解

4.1 make_request 方法

4.1.1 方法签名
@classmethod
def make_request(cls,
                 sub_function: int,
                 status_mask: Optional[Union[int, DTC.Status]] = None,
                 dtc: Optional[Union[int, DTC]] = None,
                 snapshot_record_number: Optional[int] = None,
                 extended_data_record_number: Optional[int] = None) -> Request
4.1.2 参数说明
参数 类型 描述
sub_function int 子功能代码 (0x01-0x0A)
status_mask Optional[Union[int, DTC.Status]] 状态掩码
dtc Optional[Union[int, DTC]] DTC标识符
snapshot_record_number Optional[int] 快照记录编号
extended_data_record_number Optional[int] 扩展数据记录编号
4.1.3 子功能参数要求
子功能 必需参数 可选参数
0x01 status_mask -
0x02 status_mask -
0x03 - -
0x04 dtc, snapshot_record_number -
0x06 dtc, extended_data_record_number -
0x0A - -

4.2 interpret_response 方法

4.2.1 方法签名
@classmethod
def interpret_response(cls, response_data: Optional[Union[int, list[int], bytes]]) -> Response_Interpret
4.2.2 响应解析逻辑

根据不同的子功能,解析响应数据:

  • 0x01: 解析状态可用性和DTC数量
  • 0x02/0x0A: 解析DTC列表和状态
  • 0x03: 解析DTC快照标识
  • 0x04: 解析DTC快照记录数据
  • 0x06: 解析DTC扩展数据

5. 协议细节

5.1 子功能详细说明

5.1.1 0x01 - reportNumberOfDTCByStatusMask
  • 功能: 报告符合状态掩码的DTC数量
  • 请求格式[0x19, 0x01, status_mask]
  • 响应格式[0x59, 0x01, status_availability, count_high, count_low]
5.1.2 0x02 - reportDTCByStatusMask
  • 功能: 报告符合状态掩码的DTC列表
  • 请求格式[0x19, 0x02, status_mask]
  • 响应格式[0x59, 0x02, status_availability, dtc1_high, dtc1_mid, dtc1_low, status1, ...]
5.1.3 0x03 - reportDTCSnapshotIdentification
  • 功能: 报告有快照数据的DTC标识
  • 请求格式[0x19, 0x03]
  • 响应格式[0x59, 0x03, dtc1_high, dtc1_mid, dtc1_low, snapshot_count1, ...]
5.1.4
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python自动化码农

感谢打赏,您的鼓励是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值