定义
诊断故障码(Diagnostic Trouble Code,简称DTC)是车载电控系统检测到故障时生成的标准化故障编码,用于快速定位和识别车辆系统异常,是汽车维修和诊断的核心依据。
每一个DTC对应一个特定故障类型,DTC中还包含故障状态信息,指示故障是当前存在还是历史故障。在总线工具INTEWORK-VBA中,提供了快捷读取DTC的功能,用户可以一键读取多个ECU的故障码信息。
DTC工作原理
当ECU检测到输入信号超出合理范围、执行器响应异常或通信超时等问题时,会将对应的故障码存储在非易失性存储器中,并设置相应的故障状态位。
故障状态掩码
故障状态掩码是一个1字节(8位)的DTC状态过滤器,读取DTC时作为服务参数发送(UDS 19 02服务:19 02 + 状态掩码),可设置范围为0x00–0xFF。ECU将每个DTC的状态字节与掩码做按位与运算,结果非零才返回该DTC。
DTC状态字节的8个位按ISO 14229-1定义,每一位代表一种故障状态属性:
| 位 | 状态位名称 | 含义 |
|---|---|---|
| bit0 | testFailed | 本次测试失败 |
| bit1 | testFailedThisOperationCycle | 本操作循环内测试失败 |
| bit2 | pendingDTC | 待定故障(尚未确认) |
| bit3 | confirmedDTC | 已确认故障 |
| bit4 | testNotCompletedSinceLastClear | 自上次清除后测试未完成 |
| bit5 | testFailedSinceLastClear | 自上次清除后曾经测试失败 |
| bit6 | testNotCompletedThisOperationCycle | 本操作循环内测试未完成 |
| bit7 | warningIndicatorRequested | 请求点亮故障警告灯 |
工程中读取DTC常用的掩码取值(在VBA的"设置故障码状态掩码"输入框中填写):
- 0x08:读取已确认故障(confirmedDTC),即工程上常说的"历史/记忆故障"
- 0x09:读取当前故障(testFailed + confirmedDTC,即当前存在且已确认,工程上最常用)
- 0xFF:读取所有状态的故障
DTC快照记录
DTC快照是故障发生时刻整车状态信息的记录,类似照相机按下快门定格:
- 包含故障发生时的发动机转速、冷却液温度、节气门位置、车速等关键数据
- 通过UDS 19 04服务获取
- 帮助诊断人员分析故障发生时的车辆运行状态,定位根本原因
- 注意:并非所有车辆都支持DTC快照,取决于制造商具体实现
DTC扩展记录
DTC扩展数据提供与故障相关的附加信息:
- 包含更详细的故障描述、发生条件、故障影响和解决建议
- 通过UDS 19 06服务获取
- 帮助技术人员更准确地诊断和解决故障
为什么需要DTC
在汽车电子系统日益复杂的今天,一台车可能包含数十个ECU:
- 人工排查难:没有DTC,排查故障需要逐一检查各个系统,效率极低
- 标准化不足:不同厂商故障描述不统一,维修人员需要记忆大量不同格式
- 定位不准确:经验判断容易误判,导致错换零件增加维修成本
标准化DTC解决了这些问题:
- 统一编码:SAE J2012统一了DTC编码定义,不同厂商含义一致
- 快速定位:根据DTC可直接定位故障系统和类型,大幅缩短诊断时间
- 信息丰富:除了故障类型,还包含状态、快照、扩展数据帮助深度分析
在VBA中读取DTC的步骤
- 准备工作:确保已导入诊断数据库文件(.odx/.pdx/.cdd)
- 选择诊断节点:点击"+"号选择要读取DTC的诊断节点(相同请求ID的节点互斥)
- 设置状态掩码:根据需要设置故障状态掩码,如0xFF读取所有故障
- 执行读取:勾选目标ECU,点击"Read DTC"按钮
- 查看结果:界面显示故障码信息,如果诊断数据库中包含描述,会显示详细故障说明
- 清除故障:读取完成后可点击"Clear DTC"清除存储的故障码