4. 诊断事件与DTC体系
在AUTOSAR故障定位链路中,应用层SWC或BSW模块通过Dem_SetEventStatus()上报的是“事件状态”,而不是直接写DTC。Dem模块负责把事件状态映射为DTC状态位,再写入事件内存。理解这条映射链,是判断“为什么故障已消失但DTC还在”“为什么清码后马上又出现”“为什么同一故障在OBD与UDS下表现不同”的关键。
一、事件、DTC与事件内存的关系
一个诊断事件(Event)通常由Event ID标识,通过配置与一个或多个DTC建立映射。事件内存(Event Memory)是Dem中实际保存故障记录的区域,常见划分包括:
- Primary Event Memory:主事件内存,保存当前故障与历史故障,是UDS 0x19读取的主要来源。
- Secondary Event Memory:次事件内存,常用于OBD或特定法规要求的独立存储。
- Mirror / Permanent Memory:镜像或永久内存,用于清码后仍保留关键故障信息,例如排放相关DTC。
事件内存中每条记录至少包含:DTC编号、DTC状态位(Status Byte)、发生次数、老化计数器、时间戳、快照(Snapshot)与扩展数据(Extended Data)。故障定位时,不能只看DTC编号,必须结合状态位与计数器一起读。
二、DTC状态位的定位解读
UDS 0x19 02服务读取的DTC状态字节共8位,每一位都对应一个可判断的事实。定位时建议按以下顺序读:
- bit0 testFailed:当前测试是否失败。若为1,说明故障此刻仍存在,应优先检查信号链与执行器。
- bit3 confirmedDTC:是否已确认并写入事件内存。bit0=0但bit3=1,说明故障曾发生、当前已恢复,属于间歇性故障。
- bit2 pendingDTC:是否处于待定状态。待定通常表示首次失败、尚未满足确认条件,是早期预警。
- bit4 testNotCompleted:本操作循环测试是否未完成。若为1,说明诊断条件未满足,不能据此判定无故障。
- bit5/bit6:清码后是否失败过、清码后测试是否未完成,用于判断清码后的复发行为。
- bit7 warningIndicator:是否请求点亮警告灯,与法规和驾驶者提示相关。
三、老化与清除的实操判断
老化(Aging)与清除(Clear)是两种完全不同的消失路径,定位时必须区分:
- 老化消失:故障连续多个操作循环PASSED,老化计数器递增到阈值后记录被删除。若在老化过程中再次FAILED,计数器归零,DTC保留。看到“老化中”的DTC,说明故障是间歇性的,不能简单判为已修复。
- 清除消失:通过UDS 0x14强制清除,状态位与计数器被复位,但Mirror/Permanent内存可能仍保留。清码后bit5/bit6会置位,用于追踪清码后的行为。
实际定位中,一个典型场景是:客户抱怨“清码后第二天又亮灯”。读取状态字节若为 0x2F(bit0=1, bit1=1, bit2=1, bit3=1, bit5=1),说明清码后故障再次失败并已确认,属于真实复发,应继续查根因;若为 0x28(bit3=1, bit5=1,bit0=0),说明清码后曾失败但当前已恢复,属于间歇性故障,应重点检查线束接触、温度漂移或工况边界。
四、事件内存读取与快照分析
仅凭状态位不足以定位到具体部件,必须结合快照(Snapshot)与扩展数据。Snapshot记录故障发生瞬间的电压、转速、温度、车速等环境参数;Extended Data记录发生次数、老化计数器、故障持续时间等。定位时建议:
- 用0x19 04读取Snapshot,确认故障发生时的工况是否处于边界条件。
- 用0x19 06读取Extended Data,查看发生次数与老化计数器,判断是首次故障还是长期间歇。
- 对比同一DTC在不同事件内存(Primary/Secondary/Mirror)中的记录,判断是否涉及法规或OBD特殊要求。
- 结合0x19 02的状态字节,形成“当前状态+历史频次+环境快照”的三维判断。
五、定位检查清单
| 观察项 | 典型值/现象 | 定位含义 |
|---|---|---|
| bit0 testFailed | 1 | 故障当前存在,优先查信号链 |
| bit3 confirmedDTC | 1且bit0=0 | 历史故障,当前已恢复,查间歇原因 |
| bit4 testNotCompleted | 1 | 诊断条件未满足,不能判无故障 |
| 老化计数器 | 接近阈值但未清零 | 故障间歇,未彻底修复 |
| 清码后bit5 | 1 | 清码后再次失败,真实复发 |
| Snapshot工况 | 低温/高负载/振动 | 指向边界条件或接触不良 |
把Dem事件状态、DTC状态位、事件内存、老化与清除机制串起来看,故障定位就不再是“读到一个DTC换一个件”,而是基于状态位与计数器的证据链推理。下一步应结合具体DTC的确认条件与去抖参数,进一步缩小到部件或线束级别。