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