当前位置: 首页 > news >正文

Autosar Dem学习笔记-DTC状态位详解与用法

文章目录

  • DEM DTC 状态位详解与用法(AUTOSAR Classic 实践)
    • 1. 为什么 DTC 状态位如此重要?
    • 2. DTC 状态字节位布局
    • 3. 各状态位详细含义 + 状态迁移
      • 3.1 核心状态迁移图
      • 3.2 逐 bit 详细说明
    • 4. 从事件报告到状态位落地的完整流程
    • 5. Confirmed / Pending / Aging 三大机制对比
    • 6. Operation Cycle 对状态位的影响
    • 7. UDS 0x19 如何使用状态位(Dcm + Dem 交互)
    • 8. 项目实践(ETAS + 本项目)
      • 8.1 常见配置影响状态位
      • 8.2 调试技巧
    • 9. 常见问题与陷阱
    • 10. 总结与最佳实践

DEM DTC 状态位详解与用法(AUTOSAR Classic 实践)

参考标准:ISO 14229-1 (UDS)、AUTOSAR_SWS_DiagnosticEventManager (Dem)、AUTOSAR_SWS_DiagnosticCommunicationManager (Dcm)
适用对象:诊断开发、BSW 集成、功能安全监控、标定测试工程师


1. 为什么 DTC 状态位如此重要?

在 AUTOSAR DEM 中,每个诊断事件(Event)最终都会映射到一个或多个 DTC(Diagnostic Trouble Code)。DTC 的“健康状态”不是一个简单的布尔值,而是由一个 8 位状态字节(DTC Status Byte / UDS Status Byte)完整描述

这个字节直接决定了:

  • 诊断仪能否通过 0x19 服务读到这个 DTC(status mask 过滤)
  • 是否点亮 MIL / 报警灯(WIR bit)
  • 是否进入故障记忆(Event Memory)并存储 FreezeFrame / ExtendedData
  • 是否触发 FiM 功能抑制、SWC 降级策略
  • 整车诊断会话中“本次循环 / 历史故障”的区分

如果状态位管理混乱,会导致:

  • 偶发故障无法被确认(客户投诉)
  • 愈合后 DTC 无法自动清除(售后返修困扰)
  • UDS 读取返回的状态与实际车辆状态不一致(审核问题)

2. DTC 状态字节位布局

标准 UDS 状态字节(Dem_UdsStatusByteType / ISO 14229 StatusOfDTC)定义如下:

说明:Bit0(LSB 右侧)为 TF,Bit7(MSB 左侧)为 WIR。蓝色位为“测试完成性”相关位,红色/橙色为失败与指示器相关位。初始值使 TNCTOC 与 TNCSLC 同时置位。

Bit名称 (中文)英文缩写位置含义简述
7警告指示器请求WIRMSB是否请求点亮故障灯/指示器
6本操作循环测试未完成TNCTOC-本操作循环内测试尚未完成(或未开始)
5上次清除后测试失败TFSLC-自上次清除以来,曾经出现过失败
4上次清除后测试未完成TNCSLC-自上次清除以来,测试尚未完成
3已确认 DTCCDTC-满足确认条件,DTC 被正式确认
2待确认 DTCPDTC-本操作循环内检测到故障,但尚未达到确认阈值
1本操作循环测试失败TFTOC-本操作周期内测试结果为失败
0测试失败TFLSB当前报告为失败

初始值(DEM_ISO14229BYTE_INITVALUE):

(DEM_ISO14229_BM_TESTNOTCOMPLETE_TOC|DEM_ISO14229_BM_TESTNOTCOMPLETE_SLC)

即上电或清除后,TNCTOC + TNCSLC 置位,表示“尚未完成测试”。


3. 各状态位详细含义 + 状态迁移

3.1 核心状态迁移图

说明:红色表示进入 Confirmed 后的“持久故障记忆”路径;黄色为 Pending 预警状态;绿色为 Aging 自动愈合恢复路径。实际项目中还受 debounce 算法、EnableCondition、StorageCondition 影响。

下面用 Mermaid 给出更精确的简化状态机(实际 DEM 实现中还有 debounce、storage condition、enable condition 等前置判定):

上电/清除后初始

"Dem_SetEventStatus(FAILED) 且 debounce 合格"

"本周期首次失败 + 未达确认阈值"

"满足 Dem 确认计数器 (通常 1 次或配置阈值)"

"连续多周期 qualified pass (Aging 计数达标)"

"Aging 完成或 Clear"

"本周期 qualified pass + ResetEventStatus"

"Clear 或 新周期开始且 pass"

NoFault

TestFailed

Pending

Confirmed

Healing

CDTC=1, 可存储 EventMemory
可触发 WIR / MIL

PDTC=1, TFTOC=1
通常不触发长期动作

3.2 逐 bit 详细说明

Bit 0 - testFailed (TF)
当前“瞬时”失败标志。Dem_SetEventStatus(FAILED)经 debounce 后立即反映。
注意:即使 TF=1,也不一定存储 DTC,要看 PDTC/CDTC 和存储条件。

Bit 1 - testFailedThisOperationCycle (TFTOC)
本操作循环内是否出现过失败。新操作循环启动时会被清零(除非失败在同一周期内再次发生)。
常用于区分“本次循环故障”与“历史故障”。

Bit 2 - pendingDTC (PDTC)
“待确认”。本操作循环内检测到故障,但尚未达到确认阈值。
典型场景:间歇性故障、需要多周期确认的严重故障。
清除条件:新操作循环开始且测试完成且 qualified pass、或 Clear DTC。

Bit 3 - confirmedDTC (CDTC)
最关键的位!一旦置位:

  • DTC 会被持久化到 Primary Event Memory
  • 可被 0x19 0x0A / 0x02 等子功能报告
  • 可驱动 Indicator / MIL
  • 进入 healing / aging 流程

Bit 4/6 - testNotCompleted(TNCSLC / TNCTOC)*
这两个位非常容易被误解:

  • TNCSLC:自上次 Clear 以来,是否从未完成过测试(包括 pass 或 fail)。一旦测试完成(无论结果),该位清零。
  • TNCTOC:本操作循环内测试是否尚未完成。新循环开始时重新置位。

诊断仪常用这两个位判断“监控器是否执行过”。

Bit 5 - testFailedSinceLastClear (TFSLC)
自上次清除以来,曾经失败过(历史痕迹)。即使当前已经 pass,该位也保持,直到 Clear。
对“历史故障统计”非常有用。

Bit 7 - warningIndicatorRequested (WIR)
是否请求激活警告指示器。

  • 由 Dem_SetWIRStatus 或 Indicator 管理模块根据配置的 IndicatorAttribute 自动联动。
  • 也可在项目 custom hook 中手动控制。
  • 通常只有 CDTC + 特定事件类才会真正点灯。

4. 从事件报告到状态位落地的完整流程

说明:PREFAILED 经 debounce 合格后才真正影响 status byte。自定义 hook 可在第 3~6 步之间插入项目特定逻辑。

核心代码路径(ETAS RTA DEM + 项目集成):

// SWC / Monitor 典型调用Dem_SetEventStatus(EventId,DEM_EVENT_STATUS_PREFAILED);// 或Dem_SetEventStatus(EventId,DEM_EVENT_STATUS_FAILED);// 内部关键处理(简化自 Dem_EventStatus.c + Dem_EvtSt_*)if(debounce qualified failed){Dem_ISO14229ByteSetTestFailed(&status,TRUE);Dem_ISO14229ByteSetTestFailedTOC(&status,TRUE);Dem_ISO14229ByteSetTestFailedSLC(&status,TRUE);Dem_ISO14229ByteSetTestCompleteTOC(&status,TRUE);Dem_ISO14229ByteSetPendingDTC(&status,TRUE);// 视配置}// 达到确认条件后Dem_EvtSt_CustomConfirmation(...){Dem_ISO14229ByteSetConfirmedDTC(&status,TRUE);}

5. Confirmed / Pending / Aging 三大机制对比

说明:三栏分别对应“短期预警”“长期确认”“自动恢复”三个阶段。颜色与状态位含义一致(黄=Pending,红=Confirmed,绿=愈合)。

维度PendingDTCConfirmedDTCAging (愈合)
触发条件本周期检测到故障 + 未达阈值满足 Dem 确认计数器连续 N 个操作循环 qualified pass
典型存储可能不进 EventMemory必须进 Primary Memory从 Memory 移除或标记 healed
对 MIL/WIR 影响一般无通常触发关闭指示器
UDS 可见性0x19 子功能可见强烈可见清除后不可见
清除方式新周期 pass / ClearAging 或 Clear自动或 Clear

6. Operation Cycle 对状态位的影响

新操作循环开始(Dem_SetOperationCycleState(START)或等效的 Dem 内部处理)是状态位重置的重要时机。

Yes

No

新 OperationCycle START
Dem_EvtAdvanceOperationCycle

事件受影响?

保存 old status

调用 Dem_EvtSt_HandleNewOperationCycle

清 TFTOC、TNCTOC

若上一周期 complete 且 pass,则清 PDTC

重置 FDC 阈值、InitMonitoring

触发 status change callback

跳过

对应项目实现(Dem_EventStatus.c 片段):

Dem_EvtSt_HandleNewOperationCycle(eventId){if(custom enabled){if(completeTOC&&!failedTOC){clear PDTC;}clear TFTOC;clear TNCTOC;// 即置 TNCTOC}...}

实践建议

  • 驾驶循环(Driving Cycle)通常映射到 DemOperationCycle “DC”;
  • 暖机循环、点火循环可单独配置;
  • 确保Dem_EndOperationCycle/Dem_SetOperationCycleState(END)在下电前被正确调用,否则某些 healing 计数不会累加。

7. UDS 0x19 如何使用状态位(Dcm + Dem 交互)

诊断仪最常用的就是通过 status mask 过滤 DTC 列表。

典型子功能:

  • 0x01 reportNumberOfDTCByStatusMask
  • 0x02 reportDTCByStatusMask
  • 0x0A reportSupportedDTC
  • 0x12 reportEmissionsRelatedDTC 等
DemDcmTesterDemDcmTesterloop[每个匹配的 DTC]19 02 [statusMask=0x2F] %% PDTC | CDTC | TF | ...1Dem_SelectDTC / Dem_GetNumberOfFilteredDTC2过滤符合 mask 的 DTC 数量3Positive + Count419 02 [statusMask=0x08] %% 只关心 Confirmed5Dem_SetDTCFilter(..., DEM_UDS_STATUS_CDTC)6DTC + 当前 statusByte (已 & AvailabilityMask)7DTC + Status 列表8

重要规则

  • Dem 返回的 statusByte 会被AvailabilityMask掩码(配置在 DemDTCStatusAvailabilityMask)。
  • 客户端发送的 mask 是“按位与”匹配:(dtcStatus & mask) == mask才返回。
  • 某些子功能只返回特定 bit 置位的 DTC。

8. 项目实践(ETAS + 本项目)

8.1 常见配置影响状态位

  • DemRbEventStatusBitStorageTestFailed:是否把 TF bit 持久化到 NvM
  • Confirmation 阈值:DemEventParameter / DemRbEventClass 下的计数器
  • Aging 阈值:决定多少个合格循环后清除 Confirmed
  • Storage Condition / Enable Condition:即使 SetEventStatus,也可能不更新状态位
  • Operation Cycle 绑定:事件属于哪些 Cycle 决定何时重置 TOC 类 bit

8.2 调试技巧

  1. Dem_GetDTCStatus(或内部Dem_EvtGetIsoByte)打印 8 bit 十六进制。
  2. 关注DemTriggerOnDTCStatusChanged/DemTriggerOnEventStatusChangedcallback。
  3. Clear 行为差异:
    • Clear DTC默认会全清(包括 SLC 位)
    • ONLY_THIS_CYCLE_AND_READINESS只清 TOC 类位(项目有定制 hook)。
  4. Mirror Memory 中的 DTC 状态可能独立存储(视DEM_CFG_EVMEM_MIRROR_MEMORY_DTC_STATUS_STORED)。

9. 常见问题与陷阱

问题现象可能原因建议排查
明明失败了,诊断仪读不到 CDTC未达到确认阈值、EnableCondition 关闭、Event 被 suppress检查 confirmation counter、Dem_EnableDTCSetting
故障愈合后 CDTC 仍为 1Aging 阈值配置过高、操作循环未正确结束验证 Dem_SetOperationCycleState + aging 计数
TNCSLC 一直为 1对应监控器从未执行检查运行条件、FiM 抑制、任务调度
WIR 点灯但无 DTC直接通过 Dem_SetWIRStatus 设置,或 Indicator 配置独立审查 IndicatorAttribute

10. 总结与最佳实践

  1. TF 只是起点,真正驱动售后和功能的是CDTC + WIR
  2. PDTC是“预警”,不要让它长期停留在 pending 而不确认或清除。
  3. TNCTOC / TNCSLC是“测试执行证明”,对 OBD 和功能安全监控至关重要。
  4. 善用项目 CustomStatusByte hook 做差异化定制,但不要破坏标准位语义。
  5. 操作循环管理必须与实车驾驶循环对齐,否则 healing 和 TOC 语义全部失效。
  6. UDS 0x19 读取时始终考虑 AvailabilityMask 和客户端 mask 的按位匹配规则。

掌握这 8 个 bit 的每一次置位/清零时机,是做好车载诊断系统的基石。


参考资料

  • AUTOSAR_SWS_DiagnosticEventManager (最新版)
  • ISO 14229-1:2020 Unified Diagnostic Services
  • 本项目Dem_CustomStatusByte.hDem_EventStatus.cDem_DTCStatusByte.cDem_ISO14229Byte.h

http://www.cnnetsun.cn/news/3812242.html

相关文章:

  • HFSS仿真核心:材料属性三要素设置与工程实践指南
  • PCL库common.h头文件解析与点云处理优化
  • 天正CAD图纸打不开的5大原因与解决方案
  • UnityExplorer反射检查器:运行时探查与修改Unity游戏内存的终极指南
  • Xshell终端工具:高效运维与安全连接指南
  • 动物森友会存档编辑器NHSE:3分钟掌握终极岛屿改造秘籍
  • Unity游戏模组开发实战:基于BepInEx框架的修改器插件开发与调试指南
  • 3分钟完成视频字幕提取:本地OCR工具的终极指南
  • 告别网盘限速烦恼:8大平台直链获取终极指南
  • Python零基础学习路径全解析:从环境搭建到实战项目
  • 量化交易技术指标计算:MACD、KDJ与BOLL实现详解
  • 膜结构汽车棚厂家哪个安全性好?
  • 07.31每日总结
  • BilibiliDown:5分钟掌握B站视频下载完整指南
  • LPDDR5X内存技术解析:性能提升与优化策略
  • 15款专业字体一站式获取:设计师和开发者的终极字体解决方案
  • Spring Boot会话管理:原理、问题与优化实践
  • 酒吧iPad收银 vs 传统收银:为什么夜店老板都在换?
  • 终极AMD Ryzen调试利器:SMU Debug Tool完全指南与实战技巧
  • TPFanCtrl2:ThinkPad双风扇终极控制指南 - 免费降低噪音提升性能
  • PHP开发环境搭建与Xdebug调试配置指南
  • AI扁平风终极进化路径(从静态扁平→感知扁平→意图扁平),谷歌Material 4.0核心团队未公开方法论首次披露
  • 企业接入千赫智能体前要准备什么?一份可验收的资料清单
  • 深入解析CRC循环冗余校验:从原理到实战应用
  • 魔兽争霸3现代化终极指南:5分钟实现高清宽屏与流畅体验
  • 5分钟搞定:PotPlayer字幕翻译插件让你的外语视频无障碍观看
  • 革命性游戏模组管理平台:XXMI启动器智能化解决方案
  • 零基础实战Codex:从环境搭建到项目集成的完整指南
  • 如何在3天内掌握NeRF领域:Awesome-NeRF资源库终极指南
  • JSP入门实战:从原理到应用,掌握JavaWeb动态网页开发