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中的位置相關聯,然後更新下一個存儲位置的索引。流程圖如下:

有一個問題就是如何使得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中呢?

基本思路如下圖:

第一步,檢查故障是否已經存在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機制基本邏輯流程圖如下:

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的條件如下兩圖:

從圖中標記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位便會同時置位,如下圖:

(2)emission-related ECU

在故障狀態PENDING置位後,此時的tested and failed cyclescounter加一,如果此時tested and failed cycles counter達到DemEventFailureCycleCounterThreshold,且此時的OBD driving cycle 處於開啓狀態,confirmedDTC位纔會置位。

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.

記錄每次觸發都會捕捉

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章