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则横向记录各模块在开发阶段的异常。
三、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工具链中的典型配置过程如下:
- 在DEM中定义事件参数,例如
DemEventParameter命名为DemEvent_CoolantTempRange,分配Event ID,设置去抖算法为计数器型(例如步长+1/-1,阈值±5),并关联快照数据记录(记录车速、水温、发动机转速等)。 - 在DCM中配置服务0x19的子功能0x02(按状态掩码读取DTC),将该DTC加入响应列表;同时配置0x14清除服务,确保清除后DEM状态复位。
- 在FIM中定义功能
Function_CoolantControl,抑制条件为DemEvent_CoolantTempRange状态为 confirmed 时禁止该功能。 - 应用层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重新允许功能执行。
五、DET的定位与使用边界
DET在量产诊断栈中通常不参与功能逻辑,但它在集成阶段价值很高。当DCM调用DEM接口时传入了非法Event ID,或FIM查询了未配置的FunctionId,DET会记录 DET_ERROR 并携带模块ID与API ID。在ETAS调试环境中,可以通过DET的错误缓冲区快速定位配置不一致问题。量产版本一般将DET配置为关闭或仅保留最小记录,以节省RAM和ROM。