2. AUTOSAR诊断架构解析

在AUTOSAR分层架构中,诊断功能并不是由单一模块完成的,而是由一组职责清晰、通过标准化接口协作的模块共同实现。理解这些模块的边界与接口,是后续在ETAS工具链中正确配置诊断栈的前提。本节围绕DCM、DEM、FIM、DET四个核心模块展开,说明它们各自"管什么、不管什么",以及数据和控制信号如何在它们之间流动。

一、四个模块的职责边界

DCM(Diagnostic Communication Manager)是诊断通信的管理者,位于服务层。它负责UDS服务的解析与响应:接收来自CAN/CAN FD/DoIP的诊断请求,判断服务是否支持、会话与安全等级是否满足,然后调用下层或应用层的处理逻辑,最后组织肯定或否定响应。DCM本身不存储故障,也不决定功能是否降级,它只负责"把请求翻译成内部调用,把结果翻译成UDS响应"。

DEM(Diagnostic Event Manager)是故障事件的管理者。它接收来自SWC或BSW的事件上报(Event),执行去抖(Debouncing)、故障确认、快照数据(Snapshot)与扩展数据记录(Extended Data)的存储,并维护故障状态字节。DEM对外提供故障查询、清除、状态读取等接口,是UDS服务0x19(读DTC信息)、0x14(清除DTC)背后的实际数据源。

FIM(Function Inhibition Manager)是功能抑制的管理者。它根据DEM中故障的当前状态,决定某个功能是否允许继续执行。FIM不产生故障,也不直接响应诊断请求,它输出的是"功能使能/禁止"的控制信号,供应用层SWC在执行前查询。

DET(Default Error Tracer)是开发阶段的错误追踪模块。它不参与诊断通信,也不管理故障,而是记录BSW和SWC在开发过程中出现的非法参数、非法调用顺序等错误,通常只在开发与集成阶段启用,量产版本可裁剪。

二、接口关系与数据流

这四个模块之间的协作可以概括为三条主线:诊断请求处理链、故障事件处理链、功能抑制链。诊断请求从DCM进入,涉及故障读取时调用DEM;故障事件从SWC或BSW上报到DEM,DEM更新状态后通知FIM;FIM据此更新功能抑制状态,应用层在执行功能前查询FIM。DET则横向记录各模块在开发阶段的异常。

诊断仪 / Tester UDS over CAN/DoIP DCM 诊断通信管理 服务解析 / 会话 / 安全 DEM 诊断事件管理 去抖 / 状态 / 快照 DTC存储 FIM 功能抑制管理 使能 / 禁止判断 应用层 SWC 事件上报 功能执行前查询 DTC读取 DET 默认错误追踪 开发阶段启用 请求 响应 0x19/0x14 查询 状态/数据 事件上报 故障状态 功能使能/禁止 错误记录 诊断请求/响应 DTC查询/状态 功能抑制 开发期错误追踪 注:DET 仅在开发/集成阶段启用,量产可裁剪;FIM 输出为功能级控制信号,不直接参与UDS响应。

三、ETAS实现映射

在ETAS工具链中,上述AUTOSAR标准模块有明确的实现对应关系。DCM、DEM、FIM、DET的配置通常通过ISOLAR-AB或RTA-CAR完成,生成的配置代码与BSW静态代码一起编译进ECU。具体映射如下:

AUTOSAR模块 ETAS实现/工具 关键配置对象 典型输出
DCM RTA-CAR DCM配置 + ISOLAR-AB DcmDsl、DcmDsp、会话/安全等级、服务表 UDS服务处理代码、会话状态机
DEM RTA-CAR DEM配置 DemEventParameter、去抖算法、快照/扩展数据记录 事件状态机、DTC存储结构
FIM RTA-CAR FIM配置 FunctionId、抑制条件、与DEM事件的映射 功能使能/禁止查询接口
DET RTA-CAR DET配置(开发版) 错误钩子、模块ID、API ID 错误记录缓冲区、调试输出

四、配置示例:一个DTC从产生到被读取

假设某ECU需要监控"冷却液温度传感器信号超范围"这一故障。在ETAS工具链中的典型配置过程如下:

  1. 在DEM中定义事件参数,例如 DemEventParameter 命名为 DemEvent_CoolantTempRange,分配Event ID,设置去抖算法为计数器型(例如步长+1/-1,阈值±5),并关联快照数据记录(记录车速、水温、发动机转速等)。
  2. 在DCM中配置服务0x19的子功能0x02(按状态掩码读取DTC),将该DTC加入响应列表;同时配置0x14清除服务,确保清除后DEM状态复位。
  3. 在FIM中定义功能 Function_CoolantControl,抑制条件为 DemEvent_CoolantTempRange 状态为 confirmed 时禁止该功能。
  4. 应用层SWC在周期任务中调用 Dem_SetEventStatus() 上报事件状态,并在执行冷却控制前调用 FiM_GetFunctionPermission() 查询是否允许执行。

当故障发生时,DEM经过去抖确认后更新DTC状态字节(例如bit0 testFailed、bit3 confirmedDTC置位),FIM随之禁止冷却控制功能。诊断仪发送 19 02 FF 请求时,DCM调用DEM接口获取DTC列表及状态,组织响应返回。若诊断仪发送 14 FF FF FF,DCM调用DEM清除接口,DTC状态复位,FIM重新允许功能执行。

工程提示:DCM与DEM之间的接口调用由RTE或BSW调度器完成,配置时需确保DCM的DTC列表与DEM的事件参数一一对应,否则会出现"诊断仪能读到DTC但状态始终为0"或"清除后状态不复位"的典型问题。FIM的抑制条件应基于confirmed状态而非testFailed,避免瞬时故障导致功能频繁抖动。

五、DET的定位与使用边界

DET在量产诊断栈中通常不参与功能逻辑,但它在集成阶段价值很高。当DCM调用DEM接口时传入了非法Event ID,或FIM查询了未配置的FunctionId,DET会记录 DET_ERROR 并携带模块ID与API ID。在ETAS调试环境中,可以通过DET的错误缓冲区快速定位配置不一致问题。量产版本一般将DET配置为关闭或仅保留最小记录,以节省RAM和ROM。