作者 | 寒月
小編 | CRYSTAL
DTC作為汽車故障診斷的核心標識,如同車輛的“醫療檔案”,可以讓工程師精準定位故障。從簡單的傳感器故障到復雜的網絡通信問題,DTC系統通過精密的編碼規則、狀態管理和老化機制,構建了一套完整的故障生命周期管理體系。本文內容基于ISO14229-1和ISO15031-6規范創建,詳細介紹了DTC組成格式、DTC狀態位、DTC狀態置位的算法、DTC的老化機制。

DTC定義
DTC:Diagnostic Trouble Code,診斷故障碼,是故障類型的身份ID號碼,用于汽車故障時對故障部位及原因的排查。
當ECU檢測到一個故障時,其將在存儲器中存儲對應的一個代碼,此代碼被稱為故障代碼。除故障代碼外,ECU還可能存儲與此故障相關的故障狀態、快照信息及擴展信息。

DTC的組成
基本格式

其中,DTC High Byte和DTC Middle Byte這兩個字節表示故障內碼,DTC Low Byte表示故障類型。
01
故障內碼與5位標準故障碼的對應關系
DTCHighByte、DTCMiddleByte這兩個字節表示故障內碼,對應5位標準故障碼(第一位是字母,后面四位是數字)。
示例:"B123416"這個故障碼中的"B1234"為故障內碼;最后面的"16"則是DTCLowByte的內容。故障內碼與5位標準故障碼的位置對應關系如下:

●第一位長度2個bit(Bit15~14)是字母,表示故障所屬系統;有如下的四種情況:

●第二位長度2個Bit(Bit13~12)是數字,表示故障類型(用的哪種法規);有如下的四種情況:

●第三位長度4個Bit(Bit11~8)是數字,表示故障所屬的子系統,按照4個Bit解析成1個16進制字符
●第四和第五位長度8個Bit(Bit7~0),分別按照4個Bit解析成2個16進制字符,是數字,表示具體故障對象和類型
02
故障種類和子類型DTCLowByte
DTCLowByte這個字節表示Failure Type Byte(FTB),包含Failure Category和Failure Sub Type兩個部分(ISO 15031-6中的DTCLowByte表示Failure Type Byte(FTB),而ISO 14229-1中的DTC LowByte表示ID序號)。具體種類和類型在ISO15031-6中詳細定義。

ISO 14229-1中DTCLowByte定義
故障種類:


ISO 14229-1中故障類型定義

基本概念
操作循環(OperationCycle)
各種操作循環是計算周期相關狀態信息(如testCompleteThisOperationCycle)的基礎,定義了測試的開始和結束條件,OperationCycle開始時開始檢測故障,結束時停止檢測。

確認閾值(Confirmation Threshold)
確認此故障一直存在的Operation Clycle個數,將其認定為歷史故障(ConfirmedDTC),在老化(aging)或手動清除前confirmed DTC狀態位會一直存儲在EEPROM。
老化計數器(AgingCounter)
老化計數器用于特定診斷故障代碼的測試都沒有失敗(testFailed)的連續操作循環的計數。當一個OpreationCycle沒有檢測到testFailed,AgingCounter就會自加1,同時DTC status的bit0就會清0。該數值應存儲于EEPROM。如果在一個操作循環中有任何已失敗的測試結果出現,則老化計數器將重置為“0”。
老化閾值(Aging Threshold)
在制造商或法規規定的操作循環內,特定診斷故障代碼的測試未出現“失敗”結果,這個規定的操作循環的次數就稱為老化閾值。DTC的Confirmed狀態位將會被清除,同時DTC從non-volatile內存中清除。也就是說此故障已經完成了老化,可以自愈。

DTC狀態位
從汽車ECU中讀取儲存的DTC故障碼時,除了故障碼本身,還可以讀出很多其它的信息,包括優先級、發生次數計數器、發生時的里程和時間,以及本節中所講的狀態位(DTC status)。
這個狀態位包含1個byte,這里面的8個bit都有各自的含義,但是這8個bit不一定都要使用,各個主機廠可以根據自己的需求使用其中的幾個,也可以全部使用。下圖是UDS對DTC status這8個bit的定義。

bit0:testFailed(當前故障)
通常來說,ECU會周期地檢測故障是否存在,如果在最近一次的測試中,測試結果為失敗,則相應DTC的這一個狀態位就要被置1,表示出錯。但是它不一定被ECU存儲到non-volatile memory中,只有當pendingDTC或confirmedDTC被置1時DTC才會被存儲。當錯誤消失或者診斷儀執行了清除DTC指令時,testFailed會再次被置0。
testFailed狀態位置位算法:

ISO 14229-1中testFailed狀態位置位示意圖
● 置1:表示該DTC此時發生了故障
● 清0:a)testPass;b)14服務清除DTC
bit1:testFailedThisOperationCycle
這個bit用于標識某個DTC在當前的OperationCycle中是否出現過testFailed置1的情況,即是否出現過錯誤。OperationCycle的起始點是ECU通過網絡管理喚醒到ECU通過網絡管理進入睡眠,對于沒有網絡管理的ECU,這個起始點就是KL15通斷。通過bit0我們無法判斷某個DTC是否出現過,比如,當前testFailed=0,說明當前這個DTC沒有出錯,如果testFailedThisOperationCycle=1的話,就說明這個DTC在當前這個OperationCycle中出過錯,但是當前錯誤又消失了。
testFailedThisOperationCycle狀態位置位算法:

ISO 14229-1中testFailedThisOperationCycle狀態位置位示意圖
● 置1:在當前的操作循環內,該DTC發生過故障
● 清0:a)開啟新的操作循環;b)14服務清除DTC
bit2:pendingDTC
根據規范的解釋,pendingDTC=1表示某個DTC在當前或者上一個OperationCycle中是否出現過。pendingDTC位其實是位于testFailed和confirmedDTC之間的一個狀態,有的DTC被確認的判定條件比較嚴苛,需要在多個OperationCycle中出現才可以被判定為confirmed的狀態,此時就需要借助于pendingDTC位了。pendingDTC=1的時候,DTC就要被存儲下來了。如果當前OperationCycle中故障發生,pendingDTC=1,但是在下一個OperationCycle中,故障沒有了,pendingDTC仍然為1,再下一個OperationCycle中,故障仍然不存在,那么pendingDTC就可以置0了。
pendingDTC狀態位置位算法:

ISO 14229-1中pendingDTC狀態位置位示意圖
● 置1:原本無故障,但在上一次或當前操作循環中出現一次測試結果為Failed
● 清0:a)在上一個操作循環和當前操作循環均未發生故障(pending被置位后,需要連續兩次OperateCycle沒有監測到故障);b)14服務清除DTC
bit3:confirmedDTC(歷史故障)
當confirmedDTC=1時,則說明某個DTC已經被存儲到ECU的non-volatile memory中,說明這個DTC曾經滿足了被confirmed的條件。但是請注意,confirmedDTC=1時,并不意味著當前這個DTC仍然出錯,如果confirmedDTC=1,但testFailed=0,則說明這個DTC表示的故障目前已經消失了。
confirmedDTC狀態位置位算法:

ISO 14229-1中confirmedDTC狀態位置位示意圖
● 置1:滿足confirmed條件(幾個連續的操作循環檢測到故障),此時該DTC已被存儲至EEPROM中
● 清0:a)當操作循環次數已滿足老化閾值;b)14服務清除DTC;c)故障記憶溢出
bit4:testNotCompletedSinceLastClear
這個bit用于表示,自從上次調用了清除DTC的服務之后,是否成功地執行了對某個DTC的測試(不管測試結果是什么,只關心是否測了)。因為很多DTC的測試也是需要滿足某些邊界條件的,并不是ECU上電就一定會對DTC進行檢測。
testNotCompletedSinceLastClear狀態位置位算法:

ISO 14229-1中testNotCompletedSinceLastClear狀態位置位示意圖
● 置1:自從清DTC之后還沒有完成過針對該DTC的測試
● 清0:自從清DTC之后已經完成過針對該DTC的測試
bit5:testFailedSinceLastClear
這個位與bit1:testFailedThisOperationCycle有些類似,后者表示某個DTC在當前的OperationCycle中是否出現過testFailed置1的情況,而testFailedSinceLastClear表示的是在上次執行過清除DTC之后某個DTC是否出過錯。
testFailedSinceLastClear狀態位置位算法:

ISO 14229-1中testFailedSinceLastClear狀態位置位示意圖
● 置1:自上次清除診斷信息以來,DTC測試至少返回了一次失敗的結果
● 清0:a)滿足老化閾值;b)故障記憶溢出;c)清除DTC后
bit6:testNotCompletedThisOperationCycle
這個位與bit4:testNotCompletedSinceLastClear類似,后者表示自從上次調用了清除DTC的服務之后,是否成功地執行了對某個DTC的測試。而testNotCompletedThisOperationCycle則表示在當前OperationCycle中是否成功地執行了對某個DTC的測試。
testNotCompletedThisOperationCycle狀態位置位算法:

ISO 14229-1中testNotCompletedThisOperationCycle狀態位置位示意圖
● 置1:a)指示DTC測試在當前操作循環內尚未運行完畢;b)14服務清除DTC
● 清0:測試運行并且通過或失敗;
bit7:warningIndicatorRequested
某些比較嚴重的DTC會與用戶可見的警告指示相關聯,比如儀表上的報警燈,或者是文字,或者是聲音。這個warningIndicatorRequested就用于此類DTC。如果這個DTC不支持警告指示,則這個位永遠置0。
warningIndicatorRequested狀態位置位算法:

ISO 14229-1中WarningIndicatorRequested狀態位置位示意圖
● 置1:ECU請求激活警告指示
● 清0:ECU不請求激活警告指示

DTCAging(DTC老化)
DTC診斷故障代碼一旦生成,將會一直保留,直到通過發送診斷指令清除,或者通過診斷故障代碼老化機制確定此故障不復存在。當一直處于TestPassed,可將這個DTC清除掉,這個過程的結果被稱為self-healing,而這個過程,我們就叫做DTC的老化。
在診斷自恢復過程中,往往會定義30個或40個循環周期作為自恢復的條件。原因是:在一個相對較長的過程中,如果車輛沒有發生這個故障,可以認為這個故障是一個偶發的現象,也可以認為現在的車輛處于一個相對穩定的狀態,因而,可以將這個故障碼清除。
DTC AgingCounter例子

ISO 14229-1中DTC AgingCounter示例
1
DTCAging計數器在完成測試未失敗的第一個操作循環后遞增為1,DTCAging計數器開始計數的條件是:testFailed=0,PendingDTC=0,ComfiredDTC=1。
2
pendingDTC=0的條件是在一個操作循環后測試完成且未失敗(testNotCompletedThisOperationCycle=0,tesetFailed=0,tesetFailedThisOperationCycle=0)。如果ECU不支持掉電順序(即在關閉點火開關時立即斷電),則將無法檢測到操作循環的結束。因此,在下一個操作循環開始時將pendingDTC設置為零也是有效的。
3
DTCAging計數器在完成測試未失敗的第二個操作循環后遞增為2。testNotCompleted-ThisOperationCycle=0,tesetFailed=0。
4
DTCAging計數器繼續遞增,因為測試在這些操作循環中沒有失敗。tesetFailed=0。
5
當完全滿足老化標準時(例如,DTCAging計數器達到特定值),confirmedDTC設置為零,DTC會從內存中清除掉。
6
DTCAging計數器達到最大值(例如40),此時confirmedDTC被清除。
7
車輛制造商有責任指定testFailedSinceLastClear位是否通過老化標準或由于故障存儲器溢出而重置。
通過本文的系統性介紹,我們全面解析了DTC從編碼規則、狀態管理到老化清除的完整生命周期。DTC不僅是簡單的故障代碼,更是連接車輛故障現象與根本原因的橋梁。掌握DTC的運作機制,就如同擁有了診斷汽車電子系統的“解碼器”,能夠從海量故障數據中提取有價值的信息,為故障排查、系統優化和品質提升提供堅實的數據支撐。
北匯信息在汽車診斷領域擁有深厚的技術積累,依托與多家主流OEM的長期合作,深入理解DTC在實際車型中的應用與診斷需求,積累了豐富的故障診斷測試經驗。如您有相關測試或診斷開發需求,歡迎隨時與我們聯系。
參考文獻:
[1] Road vehicles — Unified diagnostic services (UDS) — Part 1:Application layer
[2] Road vehicles — Communication between vehicle and external equipment for emissions-related diagnostics Part 6: Diagnostic trouble code definitions
-
汽車電子
+關注
關注
3045文章
8956瀏覽量
172795 -
DTC控制
+關注
關注
0文章
20瀏覽量
1379 -
汽車
+關注
關注
15文章
4153瀏覽量
41093
發布評論請先 登錄
【科普系列】DTC深度剖析
評論