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编号,必须结合状态位与计数器一起读。

Dem事件状态 → DTC状态位 → 事件内存 映射链 应用/BSW事件源 SWC / IoHwAb / Com Dem_SetEventStatus() PASSED / FAILED / PREPASSED… Dem 核心处理 事件去抖 / 确认 Event → DTC 映射 状态位更新 / 老化计数 事件内存 Event Memory Primary / Secondary / Mirror DTC + StatusByte + 计数器 Snapshot / Extended Data DTC状态位(Status Byte)逐位含义与故障定位解读 bit0 testFailed 当前测试失败 实时故障标志 bit1 testFailedThisCycle 本循环失败过 操作循环内 bit2 pendingDTC 待定故障 未确认 bit3 confirmedDTC 已确认故障 写入内存 bit4 testNotCompleted 本循环未完成 条件不满足 bit5 testFailedSinceClear 清码后失败过 清码后标志 bit6 testNotCompletedSinceClear 清码后未完成 清码后状态 bit7 warningIndicator 警告灯 MIL请求 老化(Aging)机制 每个操作循环PASSED → 老化计数器+1 达到老化阈值(如40)→ 删除DTC记录 期间再次FAILED → 计数器清零,故障保持 定位意义:老化中说明故障间歇,未彻底修复 清除(Clear)机制 UDS 0x14 清码 → 清除状态位与计数器 Mirror/Permanent内存可能保留记录 清码后bit5/bit6置位,用于追踪复发 定位意义:清码后立即复现 → 故障仍存在

二、DTC状态位的定位解读

UDS 0x19 02服务读取的DTC状态字节共8位,每一位都对应一个可判断的事实。定位时建议按以下顺序读:

  1. bit0 testFailed:当前测试是否失败。若为1,说明故障此刻仍存在,应优先检查信号链与执行器。
  2. bit3 confirmedDTC:是否已确认并写入事件内存。bit0=0但bit3=1,说明故障曾发生、当前已恢复,属于间歇性故障。
  3. bit2 pendingDTC:是否处于待定状态。待定通常表示首次失败、尚未满足确认条件,是早期预警。
  4. bit4 testNotCompleted:本操作循环测试是否未完成。若为1,说明诊断条件未满足,不能据此判定无故障。
  5. bit5/bit6:清码后是否失败过、清码后测试是否未完成,用于判断清码后的复发行为。
  6. bit7 warningIndicator:是否请求点亮警告灯,与法规和驾驶者提示相关。
定位口诀:先看bit0判断“现在有没有”,再看bit3判断“曾经有没有”,最后看bit4/bit6判断“测试到底跑没跑”。三者缺一,结论都不可靠。

三、老化与清除的实操判断

老化(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记录发生次数、老化计数器、故障持续时间等。定位时建议:

  1. 用0x19 04读取Snapshot,确认故障发生时的工况是否处于边界条件。
  2. 用0x19 06读取Extended Data,查看发生次数与老化计数器,判断是首次故障还是长期间歇。
  3. 对比同一DTC在不同事件内存(Primary/Secondary/Mirror)中的记录,判断是否涉及法规或OBD特殊要求。
  4. 结合0x19 02的状态字节,形成“当前状态+历史频次+环境快照”的三维判断。
注意:清码会复位状态位与计数器,但不会删除Mirror/Permanent内存中的关键记录。若定位时只读Primary内存,可能漏掉清码前的历史证据。

五、定位检查清单

观察项典型值/现象定位含义
bit0 testFailed1故障当前存在,优先查信号链
bit3 confirmedDTC1且bit0=0历史故障,当前已恢复,查间歇原因
bit4 testNotCompleted1诊断条件未满足,不能判无故障
老化计数器接近阈值但未清零故障间歇,未彻底修复
清码后bit51清码后再次失败,真实复发
Snapshot工况低温/高负载/振动指向边界条件或接触不良

把Dem事件状态、DTC状态位、事件内存、老化与清除机制串起来看,故障定位就不再是“读到一个DTC换一个件”,而是基于状态位与计数器的证据链推理。下一步应结合具体DTC的确认条件与去抖参数,进一步缩小到部件或线束级别。