目录
1. 文档概述
本文档详细说明诊断故障码(DTC)类的Python实现,该类用于表示和管理符合ISO 14229-1标准的诊断故障码。DTC是汽车电子系统中用于标识和跟踪故障的核心数据结构,包含故障标识、状态信息、快照数据和扩展数据等重要信息。
2. DTC 基本概念
2.1 DTC 定义
诊断故障码(DTC)是汽车电子控制单元(ECU)中用于标识特定故障情况的标准化代码。每个DTC由3字节组成,提供了关于故障类型、系统和子系统的信息。
2.2 DTC 结构
[字节1: 系统和高位故障码] [字节2: 低位故障码] [字节3: 故障类型]
- 字节1: 系统标识和故障码高位
- 字节2: 故障码低位
- 字节3: 故障类型和子系统信息
3. 类结构设计
3.1 DTC 类主要属性
| 属性 | 类型 | 描述 |
|---|---|---|
id |
Optional[Union[int, bytes, list[int]]] |
DTC标识符(3字节) |
status |
DTC.Status |
DTC状态信息 |
snapshots |
list[Union[DTC.Snapshot, int]] |
故障快照数据 |
extended_data |
list[DTC.ExtendedData] |
扩展数据 |
functional_unit |
Any |
功能单元标识 |
fault_counter |
Optional[int] |
故障计数器 |
3.2 嵌套类关系
DTC
├── Status
├── Snapshot
└── ExtendedData
4. 核心功能详解
4.1 构造函数 __init__
4.1.1 方法签名
def __init__(self, dtc_id: Optional[Union[int, bytes, list[int]]])
4.1.2 参数处理逻辑
支持多种DTC ID格式:
- 整数格式: 直接赋值(如
0xC01234) - 字节格式: 转换为整数(如
b'\xC0\x12\x34') - 列表格式: 转换为整数(如
[0xC0, 0x12, 0x34])
4.1.3 示例
# 不同格式的DTC初始化
dtc1 = DTC(0xC01234) # 整数格式
dtc2 = DTC(b'\xC0\x12\x34') # 字节格式
dtc3 = DTC([0xC0, 0x12, 0x34]) # 列表格式
4.2 Status 嵌套类
4.2.1 状态位定义
DTC状态使用一个字节的8个位来表示不同状态:
| 位位置 | 位掩码 | 属性 | 描述 |
|---|---|---|---|
| 0 | 0x01 | test_failed |
测试失败 |
| 1 | 0x02 | test_failed_this_operation_cycle |
本次操作周期测试失败 |
| 2 | 0x04 | pending |
待处理状态 |
| 3 | 0x08 | confirmed |
已确认状态 |
| 4 | 0x10 | test_not_completed_since_last_clear |
自上次清除后测试未完成 |
| 5 | 0x20 | test_failed_since_last_clear |
自上次清除后测试失败 |
| 6 | 0x40 | test_not_completed_this_operation_cycle |
本次操作周期测试未完成 |
| 7 | 0x80 | warning_indicator_requested |
请求警告指示灯 |
4.2.2 状态管理方法
获取状态名称列表
@classmethod
def get_status_name(cls) -> list[str]
返回所有设置为True的状态名称列表。
字节转换方法
@classmethod
def get_byte_as_int(cls) -> int
@classmethod
def get_byte(cls) -> bytes
将当前状态设置转换为整数或字节格式。
状态设置方法
@classmethod
def set_byte(cls, byte: Union[bytes, int]) -> None
@classmethod
def from_byte(cls, byte: Union[bytes, int]) -> "DTC.Status"
从字节数据设置状态位或创建新的状态对象。
Python实现UDS诊断DTC类

最低0.47元/天 解锁文章
5686

被折叠的 条评论
为什么被折叠?



