Davinci学习–Dem
2020/11/2 10:08
DEM模块笔记
诊断事件管理器
Dem全称为Diagnostic Event Manager,负责故障事件的处理、故障数据的存储和管理。简单说其功能是故障事件确认前的故障debounce,故障事件确认时的故障数据存储,故障发生后的故障老化、故障替代(AUTOSAR的故障存储策略)。AUTOSAR标准中对Dem模块最上层分了两菜单栏(参见图1),分别是DemConfigSet,DemGeneral。其中DemConfigSet负责不同DTC、event等的配置,DemGeneral负责DTC、event的共用部分,包括冻结帧、扩展帧、使能条件等。
Dem负责处理和存储诊断事件,此外,Dem还向Dcm提供故障信息数据
故障诊断是由Dem模块和SWC共同完成的,SWC中的Monitor Function对故障条件进行实时监控,并实时将故障条件的判定结果反馈至Dem模块判断是否发生故障
其他
由于跨模块通信,建议将Dem和J1939Dcm映射到同一个任务,以便为RTE配置正确的呼叫上下文
缩写
DTC := diagnostic trouble code
OBD := on board diagnostic
配置依赖关系
DEM–>NvM–>Fee–>Fls
DEM模块架构
- 对于每个配置了Dem访问的OS分区,一个专门的DemSatellite服务SWC提供了接口DiagnosticMonitor和DiagnosticInfo
- 对于一个操作系统分区,DemMaster服务SWC提供AUTOSAR接口的其余部分
Debounce策略
- 基于计数器的Debounce策略
Dem会提供一个计数器(fault detection counter)用来记录判断的结果,当Diagnostic Monitor上报至dem的状态为prefailed,计数器会按步长增加,当达到设定的限值时,故障状态变成failed。当上报状态为prepassed,计数器按步长减少,当达到设定的限值时,故障状态变成passed
- 基于时间的Debounce策略
计数器的初始值为0,其范围为-128~127,当Dem接收到Diagnostic Monitor发送的状态值开始计数,计数器的增长方向由接收到的状态决定,当计数器的值在一定时间达到阈值,完成此次判断,如果在未达到阈值时,Dem接收的状态发生变化,计数器会重新开始计数,并且计数方向也发生转变。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUPXzb4V-1605070193533)(image/-5.png)]
ECU中DTC的状态位
Dem应将DTC值报告为一个uint32,字节0=低字节,字节1=中字节,字节2=高字节,字节3未使用。对于OBD DTC格式,只使用两个字节(HighByte,LowByte)。DEM Service应 将这些DTC报告为一个uint32,字节1=LowByte,字节2=HighByte,字节3未使用,字节0=0x00
重要接口
InitMonitorForEvent
如果InitMonitorForEvent的多个触发器同时发生,InitMforE只能被调用一次。根据优先级选择原因。DEM_INIT_MONITOR_CLEAR (最高优先级), DEM_INIT_MONITOR_RESTART, DEM_INIT_MONITOR_REENABLED(最低优先级)。
Dem_SetEventStatus重要
diagnositc monitor将事件结果通知给Dem
monitor状态包含定义在Dem_MonitorStatusType中的信息
在调用Dem_MonitorStatusType的情况下,会同步执行就业计数器的debouncing,之后会以与UDS状态相同的方式处理monitor状态:
- bit0(TestFailed)
- bit1( TestNotCompleteThisOperationCycle)
monitor状态字节的处理将在Dem_SetEventStatus函数的上下文同步中完成
Dem_SetEventStatusWithMonitorData
功能与Dem_SetEventStatus相同,但提供更多的参数以储存相关的事件数据
Dem_ResetEventStatus
将事件状态位设置为0
并复位Dem内部的debounce算法到初始值(在后面的时间点,异步执行)
Dem_ResetEventStatus不会改变monitor状态和UDS状态位6,也不会清除预存的冻结帧
如果该事件在这个操作周期已经被测试过了(UDS状态位6设置为0),则Dem_ResetEventStatus返回E_NOT_OK
Dem_GetEEventUdsStatus
返回特定事件的单签时间状态字节(event status byte),该接口是提供给SWC和BSW模块(eg FiM)的,而DEM在DTC层次使用函数Dem_GetStatusOfDTC
Dem_GetDebouncingOfEvent
报告事件的debouncing状态
其他接口
_DemTriggerOnMonitorStatus
每当monitor状态发生变化时,Dem会调用根据monitor状态改变的callback函数
CallbackMonitorStatusChange
对于DemEventKind = DEM_EVENT_KIND_SWC的事件,若配置了C/S接口,一旦monitor状态发生变化,Dem应调用monitor状态callback C/S接口CallbackMonitorStatusChange(当DemGeneralInterfaceSupport被设置为TRUE时)
Event Memory
每个以DemClient为参数的API调用,都只能存在该DemClient配置的Event Memory