汽車控制器(ECU)中DTC的狀態位

從汽車ECU中讀取儲存的DTC(故障碼)時,除了故障碼本身,還可以讀出很多其他的信息,包括優先順序、發生次數計數器、發生時的里程和時間,以及本文中所講的狀態位(DTC status )。

這個狀態位包含1個byte,這裡面的8個bit都有各自的含義,但是這8個 bit不一定都要使用,各個主機廠可以根據自己的需求使用其中的幾個,當然也可以全部使用。下圖是UDS對DTC status這8個bit的定義。

DTC status中8個狀態bit的定義

bit 0 : testFailed

通常來說,ECU內部以循環的方式不斷地針對預先定義好的錯誤路徑進行測試,如果在最近的一次測試中,在某個錯誤路徑中發現了故障,則相應DTC的這一個狀態位就要被置1,表徵出錯。此時DTC的testFailed位被置1,但是它不一定被ECU存儲到non-volatile memory中,只有當pendingDTC或confirmedDTC被置1時DTC才會被存儲。而pendingDTC或confirmedDTC被置1的條件應該是檢測到錯誤出現的次數或時間滿足某個預定義的門限。當錯誤消失或者診斷儀執行了清除DTC指令時,testFailed會再次被置為0。

bit 1 :testFailedThisOperationCycle

這個bit用於標識某個DTC在當前的operation cycle中是否出現過testFailed置1的情況,即是否出現過錯誤。operation cycle的起始點是ECU通過網路管理喚醒到ECU通過網路管理進入睡眠,對於沒有網路管理的ECU,這個起始點就是KL15通斷。通過bit 0我們無法判斷某個DTC是否出現過,比如,當前testFailed = 0, 說明當前這個DTC沒有出錯,如果testFailedThisOperationCycle = 1的話,就說明這個DTC在當前這個operation cycle中出過錯,但是當前錯誤又消失了。

bit 2 : pendingDTC

根據規範的解釋,pendingDTC = 1表示某個DTC在當前或者上一個operation cycle中是否出現過。pendingDTC位其實是位於testFailed和confirmedDTC之間的一個狀態,有的DTC被確認的判定條件比較嚴苛,需要在多個operation cycle中出現才可以被判定為confirmed的狀態,此時就需要藉助於pendingDTC位了。pendingDTC = 1的時候,DTC就要被存儲下來了,如果接下來的兩個operation cycle中這個DTC都還存在,那麼confirmedDTC就要置1了。如果當前operation cycle中,故障發生,pendingDTC = 1,但是在下一個operation cycle中,故障沒有了,pendingDTC 仍然為 1,再下一個operation cycle中,故障仍然不存在,那麼pendingDTC 就可以置0了。

bit 3 : confirmedDTC

當confirmedDTC = 1時,則說明某個DTC已經被存儲到ECU的non-volatile memory中,說明這個DTC曾經滿足了被confirmed的條件。但是請注意,confirmedDTC = 1時,並不意味著當前這個DTC仍然出錯,如果confirmedDTC = 1,但testFailed = 0,則說明這個DTC表示的故障目前已經消失了。將confirmedDTC 重新置0的方法只有刪除DTC,UDS用0x14服務,OBD用0x04服務。

bit 4 : testNotCompletedSinceLastClear

這個bit用於標識,自從上次調用了清理DTC的服務(UDS用0x14服務,OBD用0x04服務)之後,是否成功地執行了對某個DTC的測試(不管測試結果是什麼,只關心是否測了)。因為很多DTC的測試也是需要滿足某些邊界條件的,並不是ECU上電就一定會對DTC進行檢測。

testNotCompletedSinceLastClear = 1 : 自從清理DTC之後還沒有完成過針對該DTC的測試。

testNotCompletedSinceLastClear = 0 : 自從清理DTC之後已經完成過針對該DTC的測試。

bit 5 : testFailedSinceLastClear

這個位與bit 1 :testFailedThisOperationCycle有些類似,後者標識某個DTC在當前的operation cycle中是否出現過testFailed置1的情況,而testFailedSinceLastClear標識的是在上次執行過清理DTC之後某個DTC是否出過錯。

testFailedSinceLastClear = 0 , 自從清理DTC之後該DTC沒有出過錯。

testFailedSinceLastClear = 1, 自從清理DTC之後該DTC出過至少一次錯。

bit 6 : testNotCompletedThisOperationCycle

這個位與bit 4 : testNotCompletedSinceLastClear類似,後者標識自從上次調用了清理DTC的服務之後,是否成功地執行了對某個DTC的測試。而testNotCompletedThisOperationCycle則標識在當前operation cycle中是否成功地執行了對某個DTC的測試。

testNotCompletedThisOperationCycle = 1 : 在當前operation cycle中還沒在完成過針對該DTC的測試。

testNotCompletedThisOperationCycle = 0 : 在當前operation cycle中已經完成過針對該DTC的測試。

bit 7 : warningIndicatorRequested

某些比較嚴重的DTC會與用戶可見的警告指示相關聯,比如儀錶上的報警燈,或者是文字,或者是聲音。這個warningIndicatorRequested就用於此類DTC。

warningIndicatorRequested = 1 : ECU請求激活警告指示。

warningIndicatorRequested = 0: ECU不請求激活警告指示。

注意,如果這個DTC不支持警告指示,則這個位永遠置0。

總結來說,這8個狀態位只用文字描述的話會略顯抽象,如果在工作中看到這些狀態位的變化,那麼就很好理解它了。


推薦閱讀:

TAG:汽車電子控制 | 汽車製造 | 嵌入式開發 |