AUTOSAR之DEM(四)——Event Memory

Event Memory

event memory是DEM的精髓所在。

event memory是用于存储故障的EventID、扩展数据、故障状态、冻结帧等故障相关的数据的存储块,这个存储块应当被写入非易失性存储空间。如果存在一个完整的上下电过程,可以在NvM_ReadAll的时候把数据读取到存储在RAM中的变量,当下电时,NvM_WriteAll写入NvM。Event memory管理负责故障相关数据的进入event memory(Entry)、更新(update)、和去除(remove)。

1. event memory分类

event memory分为四种:

类型

 

DemPrimaryMemory

存储EventId、故障状态、冻结帧、扩展数据

DemUserDefinedMemory

 

DemMirrorMemory

 

permanent event memory

用于存储OBD-relevant DTC

 

2. primary memory

2.1 primary memory entry

primary memory是一个大小为DemMaxNumberEventEntryPrimary用于存储故障相关数据的非易失性存储空间。如果每个故障进入primary memory的条件(DemEventMemoryEntryStorageTrigger)是DEM_TRIGGER_ON_TEST_FAILED ,那么故障在test failed时就可以向Dem_MainFunction “申请”进入primary memory,在Dem_MainFunction中会轮询不同的SWC或者BSW报告的故障,如report故障且primary memory有足够的空间用于存储,把这些故障有序地进入primary memory。用于管理primary memory的数组或者管理单元会把故障的EventID与存在primary memory中的位置相关联,然后更新下一个存储位置的索引。流程图如下:

AUTOSAR之DEM(四)——Event Memory

有一个问题就是如何使得SWC调用Dem_SetEventStatus(EventId, EventState)在故障failed之后进入到event memory中,并在event memory中处理故障状态(pending、confirmed、warningIndicator、老化)和记录故障相关的数据(冻结帧、扩展数据等)。因为SWC的monitor程序和Dem_MainFunction()处在两个不同的任务中,可以使用一个队列用于管理申请进入primary memory的请求(request),SWC或者BSW在report故障时,做入队操作,把故障及故障状态入队,在Dem_MainFunction()做出队操作 。由此实现event memory entry。

2.2 event memory 存储

在Dem_MainFunction任务中,在检查到故障event memory entry的请求,如何把故障存到event memory中呢?

基本思路如下图:

AUTOSAR之DEM(四)——Event Memory

第一步,检查故障是否已经存在event memory中,如果已经存在,则进入event memory processing,增加error cycle counter、判断故障状态是否达到confirmed条件、判断是否需要更新冻结帧;

如果不存在,则在event memory中寻找空间用于存储故障及其状态,如果event memory中空间已满,可以使用replacement机制。

DemEventDisplacementStrategy

 

DEM_DISPLACEMENT_FULL

替换机制考虑优先级、故障状态active或者passive和故障出现次数

DEM_DISPLACEMENT_NONE

替换机制失能

DEM_DISPLACEMENT_PRIO_OCC

替换机制考虑优先级、故障出现次数

replacement机制基本逻辑流程图如下:

AUTOSAR之DEM(四)——Event Memory

2.3 event  memory processing

进入primary memory之后应当先整理event memory中的顺序,使得event memory中故障存储的顺序是按照故障进入memory的先后顺序排序,也可在entry时排序,然后对所有的故障进行故障状态位(pending、confirmed、warningindicator)的处理、扩展数据计算、老化处理、对新加入的或者更新状态的故障执行冻结帧存储逻辑等等。

2.3.1 UDS 故障状态(PENDING 、confirmed 、warningIndicator)

 

(1)pending

故障(testFailed)进入event memory之后便会在给event memory的状态或上PENDING的状态位。

pending由1变为0的条件如下两图:

AUTOSAR之DEM(四)——Event Memory

AUTOSAR之DEM(四)——Event Memory

从图中标记5可以看出,如果连续两个operation cycle, event的状态都是test passed,那么PENDING的状态位即可由1变为0,event memory的PENDING状态即可清零。图中还可看出PENDING位由1变0的条件为:在两个operation cycle中故障都未发生,在第二个testPassed的operation cycle 结束的时候,PENDING位清零。但是对于没有shut down过程即直接掉电的ECU而言,可以在下一个operation cycle开启时把PENDING位清零。

(2)confirmed

故障状态confirmed策略有两种情况:

① 在non-emission related ECU中

当故障状态故障testFailed之后,置PENDING位后confirmed位便会同时置位,如下图:

AUTOSAR之DEM(四)——Event Memory

(2)emission-related ECU

在故障状态PENDING置位后,此时的tested and failed cyclescounter加一,如果此时tested and failed cycles counter达到DemEventFailureCycleCounterThreshold,且此时的OBD driving cycle 处于开启状态,confirmedDTC位才会置位。

AUTOSAR之DEM(四)——Event Memory

2.4 冻结帧存储

冻结帧根据不同类型的也分emission related freeze frame和non-emission related freeze frame,此处仅以non-emission related冻结帧为例。

冻结帧主要用于在发生故障的一瞬间记录当时的工况,如故障发生时的车速、发动机或电机转速、KL30电电压、里程数等,这些冻结帧可以被所有的故障记录,也就是任何一个故障在发生时,都应当记录这几个数据,作为冻结帧,可以称之为公共冻结帧。但是每个故障有其独特的功能和特性,需要记录与其特性相关的冻结帧,如转子过温,故障发生时,可记录转子温度、冷却液温度、三相电流等与温度相关的数据作为该故障特有的冻结帧,可称这些冻结帧为特有冻结帧。

event-specific的冻结帧既可以提前配置好,也可以通过标定分配不同与之相关的冻结帧。

每一个冻结帧应当有一个独有的DID与之对应,用于区分不同冻结帧的含义,可以为检测仪读取冻结帧时识别不同冻结帧的含义及长度。

冻结帧相关参数:

DemFreezeFrameRecordTrigger

冻结帧存储的触发条件

DEM_TRIGGER_ON_CONFIRMED

UDS故障状态bit3(confirmedDTC)由0变为1时触发存储冻结帧

 

DEM_TRIGGER_ON_FDC_THRESHOLD

当FDC到达阈值时触发冻结帧存储

 

DEM_TRIGGER_ON_PENDING

UDS故障状态bit2(PENDING)由0到1触发冻结帧存储

 

DEM_TRIGGER_ON_TEST_FAILED

UDS故障状态bit1(testFailed)由0变为1触发冻结帧存储

DemFreezeFrameRecordUpdate

该参数定义了冻结帧存储和更新的条件

DEM_UPDATE_RECORD_NO

This record is only captured for new event memory entries.

记录只在第一次进入event memory时捕捉,及时第一次存储后不再更新。

 

DEM_UPDATE_RECORD_YES

This record is captured every time.

记录每次触发都会捕捉

 

上一篇:Autosar入门与应用 Autosar入门视频教程


下一篇:Adaptive Autosar 整体架构理解