?
1.Dem 中為什么用到 debounce
故障診斷通常由診斷事件管理Dem模塊和SW-C共同完成,即先由SWC中的Monitor Function對故障條件實時監控,并不斷將故障條件的判定結果上報給Dem模塊,而在Dem為了防止所有的故障誤報,在其處理過程中增加一個Debouncing(去抖動)環節,也就是采用Debounce算法來確定事件的最終狀態,即確認事件是PASSED、是FAILED,還是 No Result,除此之外還包括PREFAILED和PREPASSED。Dem模塊中提供2種Debounce算法,基于計數器的Debounce算法是通過計數器計數來完成對事件的確認;基于時間的Debounce算法則通過計時來完成對事件的確認。
2. SWC 與 Dem 的故障診斷關系
故障診斷是由Dem模塊和SWC共同完成的,SWC中的Monitor Function對故障條件進行實時監控,并實時將故障條件的判定結果反饋至Dem模塊判斷是否發生故障,因為故障診斷由SWC與Dem模塊共同完成的,所以debounce策略即可在SWC中實現,也可在Dem模塊中實現。
3. Dem 中實現的 debounce 策略
Dem中實現debounce策略有三種,如下圖7.30所示
3.1 基于計數器的Debounce策略
針對該算法,Dem模塊為每一個事件提供一個Debounce計數器(范圍為-128到127)用來記錄判斷的結果。
當一個事件上報一次PREFAILED狀態,那么計數器(Fault Detection Counter)會按步長增加1,當達到設定的Failed限值時,故障狀態就變成Failed。如下圖t1時刻。
當一個事件上報一次PREPASSED狀態,那么計數器按步長減少1,當達到設定的Passed限值時,故障狀態就變成Passed,如下圖t2時刻。
注釋:Failed限值根據需求來定義,例如有的是3個event條件就會觸發DTC的Failed狀態。
FDC(fault detection counter):錯誤計數器,其范圍為-128~127;
DemDebounceCounterFailedThreshold:故障從prefailed狀態跳轉至failed的限值;
DemDebounceCounterPassedThreshold:故障從prepassed狀態跳轉至passed狀態的限值;
DemDebounceCounterIncrementStepSize:當DiagnosticMonitor上報Prefailed,錯誤計數器的增加量;
DemDebounceCounterDecrementStepSize:當DiagnosticMonitor上報Prepassed,錯誤計數器減少量;
DemDebounceCounterJumpDown:是否使能JumpDown功能。JumpDown功能是指當上一次Diagnostic Monitor上報的狀態是prefailed,而當前上報的是prepassed,且當前計數器的值大于DemDebounceCounterJumpDownValue,錯誤計數器的值會重置為DemDebounceCounterJumpDownValue。如果JumpDown功能禁止,計數器按步長減少;
DemDebounceCounterJumpDownValue:當JumpDown功能使能,該變量定義了計數器的重置值;
DemDebounceCounterJumpUp:是否使能JumpUp功能。JumpUp功能是指當上一次Diagnostic Monitor上報的狀態是prepassed,而這次上報的是prefailed,且當前計數器的值小于DemDebounceCounterJumpUpValue,錯誤計數器的值會重置為DemDebounceCounterJumpUpValue。如果JumpUp功能禁止,計數器按步長增加;
DemDebounceCounterJumpUpValue:當JumpUp功能使能,該變量定義了計數器的重置值;
注釋:根據【AUTOSAR_SWS_DiagnosticEventManager】文檔中說明,Dem 模塊應通過 DemDebounceAlgorithmClass 來支持去抖算法的特定事件的配置。如圖所示,所屬的模塊位置。
3.2 基于時間的Debounce策略
針對該算法,Dem模塊為每一個事件提供一個Debounce計時器(范圍同樣為-128到127)用來記錄判斷的結果。
當一個事件上報一次PREFAILED狀態,那么計時器(Fault Detection Counter)開始計時,在一段時間t failed,如果都沒有出現PREPASSED或PASSED狀態,那么到達t failed時,故障狀態就變成Failed,如下圖t1時刻;在t failed內,如果出現FAILED狀態,那么故障狀態就直接變成Failed,如下圖t4時刻。
當一個事件上報一次PREPASSED狀態,那么計時器(Fault Detection Counter)開始計時,在一段時間t passed內,如果都沒有出現PREFAILED或FAILED狀態,那么到達t passed時,故障狀態就變成Passed,如下圖t2時刻;在t passed內,如果出現PASSED狀態,那么故障狀態就直接變成Passed,如下圖t3時刻。
對于基于時間debounce的策略主要配置以下幾個參數:
DebounceTimeBasedTaskTime:該變量定義基本的檢測周期;
DemDebounceTimeFailedThreshold:定義故障狀態從prefailed跳轉至failed需要多少個DebounceTimeBasedTaskTime周期;
DemDebounceTimeFailedThreshold:定義故障狀態從prepassed跳轉至passed需要多少個DebounceTimeBasedTaskTime周期;
3.3 基于SWC中Debounce策略
在SWC中,可以通過手寫代碼來實現上面兩個的邏輯,比如說DTC判斷的需求是每10ms判斷一次,如果三次判斷都是Failed,則DTC set Failed,否則是 PASSED。
現在,我創建了一個Task,這個Task每10ms就會執行一次,我可以將DTC的判斷條件放在這個Task里,如果判斷(Failed)條件成立三次,就會set Failed狀態。否則 PASSED。
4. Debounce 對UDS DTC狀態的影響
通過 《ISO 14229》 UDS服務中的 0x19服務,可以讀取到此時DTC的狀態,依據AutoSAR描述,當event report的EventStatuse為passed或者failed或者bounce counter到達debounce counter的閾值時,UDS Status的bit0(TestFailed),bit1(TestFailedThisOperationCycle)和 bit6(TestNotCompletedThisOperationCycle)會發生變化。
根據ISO14229-1_2013規定,bit4(testNotCompletedSinceLastClear)由“1”變為“0”的條件是“DTC測試的結果為passed或者failed。
bit5(testFailedSinceLastClear)由“1”變為“0”的條件是“從上一次診斷信息被清除之后的DTC測試結果為failed”。
注意:具體可參考《AUTOSAR_SWS_DiagnosticEventManager》中第 7.7 章 《Event memory description》
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
在經過 debounce 或者 no debounce 濾波之后的結果為 failed 時,bit4 和 bit6 會被清零,bit5 應當被置 1 ;
在經過 debounce 或者 no debounce 濾波之后的結果為passed時,bit4 和 bit6 會被清零。而 bit2(pendingDTC)、bit3(confirmedDTC)和 bit7(warningIndicatorRequested)是需要在Fault memory中其他的條件去判斷(具體的可以在Fault Memory章節和UDS Status大總結中看到),所以這3個位和debounce影響的4個UDS狀態位是異步置位。由于診斷事件report故障及狀態是獨立于DEM模塊,所以為了保存debounce之后的故障狀態,可以給每個故障再給配一個變量記錄debounce的狀態。
5. 需求參考
審核編輯:黃飛
評論
查看更多