事件状态管理概述
事件状态管理主要描述从SW-Cs和BSW上报结果到Dem模块,Dem模块同步处理monitor状态,同时Dem模块还会异步处理事件的DTC status,最后Dcm模块可以通过Dem模块API接口获取相关的状态信息。
事件状态配置
事件状态上报流程
Dem模块提供了Dem_SetEventStatus接口,SW-Cs和BSW模块可以调用该接口上报相关事件的检测结果。当Dem模块监视到一个新的检测结果时会通过内部逻辑改变Dem模块的UDS status。
Dem模块提供了Dem_ResetEventStatus接口,SW-Cs和BSW模块可以调用复位Dem模块的内部参数。Dem模块使用Dem_ResetEventStatus函数切换到正常模式,Dem模块的内部状态的Testfailed bit位置0,同时debounce复位成初始值,但是不会改变Dem模块的monitor status、UDS status Bit6以及快照数据。需要注意的是这个执行周期内事件已经检测过,Dem_ResetEventStatus函数会返回E_NOT_OK。
Dem模块提供了Dem_GetEventUdsStatus接口,SW-Cs和BSW模块可以调用该接口获取指定事件的UDS status。
Dem模块提供了Dem_GetMonitorStatus接口,SW-Cs和BSW模块可以调用该接口获取指定事件的monitor status。
Dem模块的DemEventRecoverableInSameOperationCycle参数。当设置为flase,在本运行周期内,只要事件的UDS status bit1(TestFailedThisOperationCycle)为1,事件的passed结果都会被忽略。
Dem模块会周期调用Dem_SetEventStatus函数,根据Sw-Cs和BSW模块上报的检测结果,同步处理Monitor status,同时Dem模块会异步处理UDS status,
当状态改变时Dem模块会通知monitor和别的组件,同时Dem模块会根据每个event状态和DTC的状态改变触发特定的函数。通过DemCallbackEventUdsStatusChanged参数可以配置多个Ports。通过配置参数,当Monitor status发生改变时,Dem模块会调用DemGeneralCallbackMonitorStatusChangedFnc函数;当UDS status发生改变时,Dem模块会调用DemCallbackDTCStatusChangedFnc函数。
Monitor status
Monitor status type
Bit0:DEM_MONITOR_STATUS_TF,当前的检测结果.
Bit1:DEM_MONITOR_STATUS_TNCTOC,本运行周期内是否完成检测。
Monitor status update
Dem模块为每个event提供了monitor status(存放当前状态信息)。SW-Cs和BSW模块通过调用Dem_SetEventStatus接口来更新monitor status。Dem模块会根据Dem_SetEventStatus函数上报的结果计算debounce值。
Dem模块提供DemGeneralCallbackMonitorStatusChangedFnc参数。若配置回调函数,任何一个event的monitor status改变,Dem模块都会调用这个回调函数。
通过14服务清除DTC之后,所有event的monitor status都会设置为0x40。
UDS status
UDS状态描述如下图所示,我们来聊聊状态切换的细节。
Testfailed
代表最近的测试结果。若为false,代表最近一次故障检测结果是成功,或是当前运行周期还未完成检测;若 为true,代表最近一次故障检测结果是失败。
上图为Testfailed 状态位的切换流程:
- Testfailed初始状态为 false;
- 最近检测结果为Passed,Testfailed状态为 false;最近检测结果为Failed,Testfailed状态为 true。
- 清除诊断DTC(14服务)后,Testfailed状态为 false。
TestFailedThisOperationCycle
代表在当前运行周期内是否上报过失败结果。若为false,代表当前运行周期内故障检测结果全部成功,或是当前运行周期还未完成检测;若为true,代表当前运行周期内故障检测结果有发生过失败。
上图为TestFailedThisOperationCycle 状态位的切换流程:
- TestFailedThisOperationCycle初始状态为 false;
- 在运行周期内,检测结果为Failed,TestFailedThisOperationCycle状态为 true。只要在运行周期内发生过Failed,无论之后检测结果是Passed还是Failed,TestFailedThisOperationCycle状态都为 true。
- 直到新的周期开始时,TestFailedThisOperationCycle状态为 false
- 清除诊断DTC(14服务)后,TestFailedThisOperationCycle状态为 false。
PendingDTC
代表在当前运行周期和上一次运行周期内是否上报过失败结果。若为false,代表在当前运行周期和上一次运行周期内故障检测结果全部成功,或是当前运行周期还未完成检测;若为true,代表在当前运行周期和上一次运行周期内故障检测结果有发生过失败。
上图为PendingDTC 状态位的切换流程:
-
PendingDTC初始状态为 false;
-
在运行周期内,检测结果为Failed,PendingDTC状态为 true。只要上次运行周期和本次运行周期发生过Failed,无论之后检测结果是Passed还是Failed,PendingDTC状态都为 true。
-
上次运行周期和本次运行周期全部检测结果为Passed时,PendingDTC状态为 false。
-
清除诊断DTC(14服务)后,PendingDTC状态为 false。
ConfirmedDTC
代表经过足够长时间的检测故障是否确认。若为false,自从上次清除DTC到当前时刻DTC未确认,或者是DTC已经完成老化;若为true,自从上次清除DTC到当前时刻DTC已确认,同时DTC还未完成老化流程。
上图为ConfirmedDTC状态位的切换流程:
- ConfirmedDTC初始状态为 false;
- 检测结果为Failed和TripCountWithTestFailed满足要求,ConfirmedDTC状态为 true。
- 当完成老化流程后,ConfirmedDTC状态为 false。
- 清除诊断DTC(14服务)后,ConfirmedDTC状态为 false。
TestNotCompletedSinceLastClear
代表自从上次清除DTC(14服务)到当前是否完成故障检测。若为false,代表自上次清除DTC到目前时刻完成一次Passed或者Failed结果的检测;若为true,代表自上次清除DTC到目前时刻还未完成一次检测操作。
上图为TestNotCompletedSinceLastClear状态位的切换流程:
- TestNotCompletedSinceLastClear初始状态为 true;
- 自上次清除DTC到目前时刻,完成一次Passed或者Failed结果的检测,TestNotCompletedSinceLastClear状态为 false。
- 清除诊断DTC(14服务)后,TestNotCompletedSinceLastClear状态为 true。
TestFailedSinceLastClear
代表自从上次清除DTC(14服务)到当前是否发生过故障。若为false,代表自上次清除DTC到目前时刻检测结果都是Passed;若为true,代表自上次清除DTC到目前时刻检测到Failed结果。
上图为TestFailedSinceLastClear状态位的切换流程:
- TestFailedSinceLastClear初始状态为 false;
- 自上次清除DTC到目前时刻,检测一次Failed结果,TestFailedSinceLastClear状态为 true。
- 清除诊断DTC(14服务)后,TestFailedSinceLastClear状态为 false。
TestNotCompletedThisOperationCycle
代表当前运行周期内是否完成故障检测。若为true,代表本次运行周期还未完成一次检测操作;若为false,代表本次运行周期完成一次Passed或者Failed结果的检测。
上图为TestNotCompletedThisOperationCycle状态位的切换流程:
- TestNotCompletedThisOperationCycle初始状态为 true;
- 本次运行周期,完成一次Passed或者Failed结果的检测,TestNotCompletedThisOperationCycle状态为 false。
- 清除诊断DTC(14服务)后,TestNotCompletedThisOperationCycle状态为 true。
WarningIndicatorRequested
代表是否上报与特定DTC相关联的警告指示。若为false,服务器未请求警告指示;若为false,服务器请求警告指示。
上图为WarningIndicatorRequested状态位的切换流程:
- WarningIndicatorRequested初始状态为 false;
- DTC存在警告指示并且confirmed bit为1(或者满足特定警告指示的标椎),同时当前检测结果为Failed,WarningIndicatorRequested状态为 true。
- 当前检测结果为Failed,或者不满足特定警告指示的标椎,WarningIndicatorRequested状态为 false。
- 清除诊断DTC(14服务)后,WarningIndicatorRequested状态为 false。
总结
本章节主要描述了事件状态的上报流程以及事件monitor状态和DTC status状态的改变机制,以及相关Autosar配置。这些功能仅仅是Dem模块的一小部分,同时我们还需要了解Dem模块其他功能和Autosar工具的配置选项,这样才能灵活使用Autosar工具配置和调试相关的BUG。
本章节主要参考Autosar标准的Dem模块相关文档和ISO14229标准等。