胡 杰,耿 號,李源潔,耿黃政,童敏敏
(1.武漢理工大學,現代汽車零部件技術湖北省重點實驗室,汽車零部件技術湖北省協同創(chuàng)新中心,湖北省新能源與智能網聯車工程技術研究中心,武漢 430070;2.上汽通用五菱股份有限公司,柳州 545007)
車輛故障碼誕生的初衷是為了簡化對車輛故障的判斷和定位過程,縮短故障檢修時間?,F代汽車包含大量的傳感器、執(zhí)行器和電控單元(electronic control units,ECUs)[1],單輛車定義的故障碼數量可達1 000以上。車輛電控模塊的獨立生產,使得單個電控模塊僅針對所接收的信號及報文數據進行故障判定,并不考慮與其他電控模塊的故障關聯。故障碼總數多,且單個模塊形成了故障判定“孤島”,實際電控故障發(fā)生時,由于電控系統的耦合性,電控信號的流轉使故障碼的產生出現了耦合與駁雜的情況,單次維修讀取的故障碼數量可以達到20 個甚至更多,大量的故障碼模糊了故障源頭,增加了故障定位時間。
目前基于車輛故障碼優(yōu)化車輛故障診斷過程研究主要集中在故障碼模式識別和以故障碼為特征輸入的機器學習:Theissler[1]提出了一種基于故障碼和車輛信號的車輛操作模式的分類方法,對故障診斷中的新穎的操作模式進行判斷;Kriebel 等[2]基于故障碼產生的時間和空間對特定時空產生的故障碼模式進行識別,并提出了一種模式融合的方法,但未將故障碼和實際故障結合進行分析;Thoorpu 等[3]將故障碼使用序列模型、非序列模型、深度學習模型進行分析,探尋其與車輛部件故障之間的關系,并提出了一種序列故障碼的嵌入方法以增加故障診斷的精確度;Kopuru[4]使用深度學習算法計算故障碼和車內信號之間的關系,并提出了一種故障碼的預測方法;Oliveira 等[5]提出一種基于故障碼的檢修過程融合和模塊可靠性分析方法。國內對于使用故障碼進行車輛故障診斷的研究較少,仍直接以故障碼釋義進行故障診斷[6],已不再滿足基于故障碼進行車輛故障診斷的實際需求。綜上,現有研究僅將故障碼作為分析的數據特征而忽略了故障碼本身的故障語言屬性,研究得出的結果對車輛內部故障的耦合及傳播機理沒有解釋作用,在終端檢修過程中,對基于故障碼定義進行檢修的工作流程沒有幫助。
車輛故障碼是車輛故障的語言載體,對故障碼間關系的分析,即是對車輛內有故障碼定義的故障之間關系的分析,這一分析結果對車輛耦合故障的解耦具有一定意義。對故障碼數據進行分析,挖掘故障碼之間的關聯性,形成故障碼關聯知識并保存。針對耦合電控故障產生的大量故障碼,基于關聯關系定位主要故障碼,可以顯著縮短故障檢修時間。
本文中基于某一新能源車型產生的歷史故障碼數據進行關聯規(guī)則挖掘,以故障碼之間的關聯規(guī)則建立整車故障碼關聯圖以存儲關聯知識,提出了基于此關聯圖的兩種應用場景:(1)故障碼關聯可視化,提供耦合故障碼的可解釋性;(2)主要故障碼的確定,縮短基于故障碼的故障分析時間。
基于故障碼產生及車輛信號傳播原理,對故障碼之間的關聯關系挖掘提出理論依據,給出故障碼之間的關聯規(guī)則定義、挖掘和應用流程。
車輛電子電氣故障發(fā)生時,車輛電控模塊會進行一系列的自診斷與自處理過程,如圖1 所示,主要包括診斷監(jiān)測、故障確認、診斷故障檢查、故障抑制處理和診斷故障事件存儲。在診斷故障事件存儲階段,故障所產生的故障碼被存儲于存儲器中。車輛電控模塊不斷增加的同時也變得更加集中[6],一些功能模塊對典型故障判斷僅僅依靠電控單元信號與通信報文進行。
故障信號傳播模型如圖2 所示,某車輛故障發(fā)生時,單一電控模塊的信號異常會導致相關聯的電控模型所監(jiān)測的信號值異常,若達到其他電控模塊自診斷監(jiān)測閾值等條件時,其他電控模塊也會進行相應的故障抑制處理。當多個電控模塊存在上述流程時,故障傳播形成一條復雜的“鏈路”。這種狀態(tài)下,由診斷設備讀取到的故障碼數據處于一種大量且駁雜的狀態(tài)。
根據上述討論,單次故障時產生的故障碼集合有如下特點。
特點1:同一故障產生的故障碼集合是確定的。由于模塊自診斷程序不會變化,診斷邏輯不會變化,同一故障產生的故障碼集合應是統一的。
特點2:故障碼集合中所有元素可以組成一個故障碼傳播有向圖。故障信號的傳遞過程就是故障碼的產生過程,與圖2 所示的傳播模型相似,是一個有向圖。
1.2.1 故障碼關聯關系
由上節(jié)所述,單次故障產生的故障碼集合不變且內部元素可構建故障碼關聯有向圖。設當某故障碼集合表述為有向圖時,存在相鄰故障碼節(jié)點為D1、D2,有關聯關系:D1→D2,表述此關聯關系為:“當D1發(fā)生的情況下,D2必然會發(fā)生”。將單次故障存在的關聯關系拓展至所有歷史數據,表述為:“在歷史故障碼數據中,當D1發(fā)生的情況下,D2必然會發(fā)生”,也即
由于電控模塊的不穩(wěn)定性,式(1)一般不會得到滿足。在實際情況中,則應有
式中p應為接近1的數字,在本文后續(xù)分析中,取p=0.84(本文3.2小節(jié)給出原因)。
由于故障信號傳播,故障碼關聯關系與一般單維布爾型數據的關聯關系的不同點在于:故障碼關聯關系揭示了故障碼的“因果”。可以認為,有關聯關系D1→D2,即意味著D1的產生為D2產生的原因,D2的產生為D1產生的結果。
綜上,可認為在歷史數據中出現的故障碼,若滿足式(2),則故障碼之間有相應的關聯關系。
1.2.2 故障碼關聯規(guī)則
關聯規(guī)則挖掘是數據挖掘中的重要組成部分[8],設某一數據庫為D,項目集為某單一數據特征的所有可能取值,記為Γ={I1,I2,…,Im},其中Γ為項目集,Ii為某一可能取值,稱為項,1 ≤i≤m。事務由項組成,記為T。每個事務中的項集都是項目集的子集,即有T?Γ。每條事務都有其唯一標識,記為TID。某一項集的支持度是指在事務數據庫中,包含此項集的事務個數與總體事務個數的比值;對于兩個項集A、B(A?I,B?I,A∩B= ?)產生的形如A→B的蘊含式,此蘊含式的置信度是指數據庫事務中同時包含A、B項集的個數與僅包含A項集的事務個數的比值。支持度和置信度的計算公式為
式中:||·||指某一數據“·”的數據個數;sup(A∪B)為同時包含項集A、B的事務個數。
關聯規(guī)則即為形如A→B的蘊含式,關聯規(guī)則的關聯性強弱由支持度和置信度閾值來決定,通常將支持度和置信度閾值稱為最小支持度和最小值置信度。滿足這些閾值,也即滿足sup(A∪B) ≥minsup,conf(A→B) ≥minconf的關聯規(guī)則認為是有趣的,將其稱為強關聯規(guī)則。
綜上,1.2.1 節(jié)所述的故障碼關聯關系可與關聯規(guī)則相結合,此時則有:(1)數據庫D為車輛故障所傳回的歷史數據;(2)Γ為車輛的故障碼清單;(3)Ii為某一故障碼;(4)T為單例故障產生的故障碼集合;(5)minconf為式(2)中的p。
式(2)的計算也即計算式(3)和式(4),由于電控系統存在偶發(fā)故障,使得低支持度閾值關聯規(guī)則的可信性較低,而選取較大支持度閾值可能會將部分重要但支持度較低的故障碼丟棄,所以minsup的選擇原則為:在可以對極少數偶然發(fā)生故障碼進行清理的情況下,取盡可能低的閾值。本文中取參數minsup= 0.0005。綜上,將1.2.1 節(jié)所述故障碼間關聯關系定義轉化為關聯規(guī)則挖掘中的置信度定義,為后續(xù)關聯規(guī)則計算及應用分析提供理論基礎。
關聯規(guī)則挖掘及應用流程主要如圖3 所示。主要包括數據預處理過程、基于改進Fp-Tree 的關聯規(guī)則挖掘過程和關聯規(guī)則存儲為故障碼關聯圖的方法。最后,探討使用故障碼關聯圖進行故障碼關聯挖掘與可視化、主要故障碼確定的應用方法,并舉例說明驗證。
數據來源是某企業(yè)某一新能源車型在2021 年3 月與8月在維修站點所讀取并保存的故障碼數據,數據集中共有故障碼279 122條,原始部分故障碼數據如表1所示。
表1 故障碼數據表
表1數據中每一條數據定義為
式中:ecu為對應的ECU 代碼;s為故障碼狀態(tài);t為上傳時間;vin為車輛識別代號。
以vin、time為標簽,則有
式中j代表第j輛車上傳的數據。
由于存在部分車輛故障碼重復上傳、亂碼等情況,對數據預處理中的其他規(guī)則做如下規(guī)定:
(1)同一車輛的檢修時間限定為同一輛車故障碼上傳時間間隔不得低于3天,對于3天內同一車輛多次上傳的事務丟棄;
(2)對于存在大量編碼亂碼情況的事務進行丟棄,對于少量編碼亂碼的數據僅丟棄亂碼項;
(3)丟棄所有故障碼項都以“U”開頭的故障碼事務,由于以“U”開頭的故障碼為網絡報文類故障碼,若整個事務中僅包含此類故障碼,則此時對故障碼關聯進行判斷得到的關聯無效(無故障原因對應的故障碼項)。
數據預處理后共有事務20 188 例,預處理完成的部分事務的項集合如表2所示。
表2 部分事務數據
本文基于Fp-growth 算法[9]中的Fp-Tree 思想,提出計算故障碼關聯規(guī)則的算法。
Fp-Tree 是Fp-growth 算法中的頻繁模式樹,其通過掃描兩次數據庫即可建立。建立過程如下:
(1)掃描一次數據庫,刪去支持度較小的數據項并將原始數據中的事務中的單個數據項按支持度降序進行排列;
(2)再次掃描數據庫,定義一個空的根節(jié)點進行Fp-Tree 的創(chuàng)建,同時構建頭部表(HeaderTable)進行相關節(jié)點信息存儲。
對Fp-Tree 中的節(jié)點屬性進行修改,除father、children 屬性以外,實際參與計算過程的屬性變化如圖4 所示,增加3 個基礎屬性,各屬性的含義如表3所示。各節(jié)點屬性值在Fp-Tree 構建過程中實時更新計算。
表3 Fp-Tree節(jié)點屬性及其含義
圖4 Fp-Tree節(jié)點計算相關屬性變化
Fp-Tree 的構建過程賦予了Fp-Tree 如下的基本性質:
(1)每一個可能的分支都是一次或多次事務數據的體現,這就代表每一個分支從葉子節(jié)點開始回溯時,葉子節(jié)點及其父輩節(jié)點肯定出現在同一個事務中,且同時出現的事務支持度為葉子結點的支持度;
(2)越接近Root 節(jié)點的節(jié)點支持度越大,某分支的葉子節(jié)點在此分支的所有節(jié)點中支持度最小;
(3)Fp-Tree 可以由HeaderTable 中出現的節(jié)點鏈接進行分層,低支持度的節(jié)點在Fp-Tree 的最高層。
基于上述性質,記項目支持度從小到大排序列表為OrderItem,則計算所有項目之間置信度的偽代碼如表4所示。
從低頻次節(jié)點開始,也即從樹的最高層開始,計算節(jié)點出現在某分支中的置信度大小,再將多個分支計算得到的置信度相加。此計算方法相較于多次掃描數據庫計算式(3)和式(4),有如下優(yōu)點:
(1)減小遍歷數據庫次數,僅遍歷兩次數據庫進行Fp-Tree 的構建,生成的Fp-Tree 已經包含了數據庫中所有相關聯信息,且關聯關系的計算可以直接根據已得Fp-Tree中各個節(jié)點的屬性值進行;
(2)減少了需要保存的參數數量,避免了冗余計算,Fp-Tree 的基礎性質中,有著樹分支即為事務這一特點,則對于沒有出現在同一個事務中的項目,在基于樹分支進行置信度計算的過程中,不會計算這些項目之間的置信度關系,避免了冗余計算,且減小了在計算過程中需要保存的參數量。
設一數據案例有Fp-Tree和HeaderTable,如圖5所示。
根據上述算法對各個節(jié)點之間的關聯關系進行計算。頻次最低的節(jié)點為I5,以I5在HeaderTable 中保存的節(jié)點鏈接開始,I5節(jié)點存在如圖5所示樹結構中最左兩個樹分支。分別計算兩個分支中的節(jié)點置信度,可得到:
其他節(jié)點之間的置信度計算與I5節(jié)點計算類似,此處不再贅敘。
綜上,基于Fp_Tree提出快速計算式(3)和式(4)的算法,實際計算過程共計算參數69 150個,其中滿足最小置信度閾值的參數共5 115個。
對于滿足最小置信度的節(jié)點進行有向圖構建,有向圖中節(jié)點關系存在的規(guī)則如下。設圖中節(jié)點A、B,在2.2 節(jié)計算置信度過程中,若滿足:conf(A→B) ≥p,則認為有邊A→B。
使用networkx 工具包進行有向圖構建,構建完成的圖結構共有節(jié)點666 個,存在5 115 條邊。構建的有向圖如圖6所示,其中藍色圓點代表故障碼。
圖6 故障碼有向圖
在上述的故障碼有向圖中,存在部分故障碼成環(huán)。成環(huán)故障碼之間的關聯關系可表述為:“故障碼互為因果,同時出現,同時消失”。在故障判斷環(huán)節(jié),可認為成環(huán)故障碼是同一故障碼,可同時分析處理。使用Tarjan算法[10]進行有向圖的強連通分量檢測,并可將強連通分量縮點處理,簡化故障碼有向圖結構。
基于故障碼有向圖可以對歷史故障碼中出現的有趣故障碼規(guī)則進行可視化挖掘分析;對故障檢修過程讀取的故障碼進行因果鏈路分析,確定主要故障碼,協助維修人員檢修故障。
故障碼傳播規(guī)則挖掘原理如圖7 所示,主要挖掘對象為某故障碼的前后鏈路節(jié)點,輔以圖結構進行故障碼規(guī)則鏈路的可視化。
如圖7 所示,橙色節(jié)點為故障核心節(jié)點,為分析輸入,通過故障碼有向圖對橙色節(jié)點的前驅節(jié)點和后置節(jié)點進行計算,可以得到橙色節(jié)點對應的故障碼與車輛其他故障碼的關聯規(guī)則。
以故障碼:“P140516:單體電壓低-2 級”節(jié)點為例,檢索與其相關故障碼,關聯關系如圖8 所示,從圖中可以取得如下結論:
(1)P140416,P140516,P140616 幾乎同時產生,同時消失,應為同一故障,進行縮點處理;
(2)單體電壓低故障碼會伴隨整車控制器報“B102A00:電池包告警級別--放電跛行行車”、“B104A00:電池包告警級別--電池停車請求”、“B101B00:電池包單體電壓告警狀態(tài)--電壓過低”。
有趣的故障碼關聯規(guī)則蘊含了電控系統內部的故障關聯關系,也是故障因果關系。如在上述以故障碼P140516 的分析中,可以明確得到的故障因果為:單體電壓低故障會導致行車異?;驘o法行車。類似的,以其他故障相關的故障碼節(jié)點為輸入,挖掘在實際使用中較為重要的故障關聯知識,對車輛故障的知識庫形成有良好的參考意義。如根據故障碼B102A00輸入得到的關聯圖(圖9),可以揭示在歷史數據中出現并會導致“電池包告警級別--放電跛行行車”的故障碼情況。
圖9 故障碼B102A00關聯圖(縮點后)
以某一故障碼為輸入,關聯圖為輸出,并結合故障碼定義進行故障分析的過程,是對歷史數據中出現的故障情況以及故障在車內傳播情況的剖析過程。這種分析方法可以站在更高的維度對故障情況進行全面解釋,所形成的故障規(guī)則,對于車輛質量把控以及檢修方案的制訂,有著良好的指導作用。
故障碼有向圖除了可用于對歷史數據中的故障碼關聯進行剖析之外,還可以用于故障維修過程,實現故障源所對應的主要故障碼的定位分析。
對復雜故障所產生的駁雜故障碼進行關聯分析,給出其內已存在的傳播路徑,從而確認故障源。若直接確認某一故障源對應的主要故障碼,此故障必須在歷史數據中多次出現,對于歷史數據要求較高。然而,即使對于部分案例無法直接定位故障源故障碼,得到的分析結果有一定冗余,也依舊對診斷設備直接讀出的故障碼有一定的精簡效果,可以大大縮短故障碼排查時間。分析過程主要分為關聯子圖構建和主要故障碼計算兩步。
基于實際故障時產生的故障碼進行關聯子圖構建,主要流程如圖10 所示。由于報文類故障(報文丟失、驗證錯誤等)一般在非報文故障之后檢修,則首先去除以“U”開頭的故障碼,然后將讀取的故障碼去重,取整車故障碼有向圖轉化的關聯矩陣中相同故障碼標識的行和列,組成故障時故障碼的關聯矩陣,根據此關聯矩陣生成故障碼子圖。
圖10 故障碼子圖構建流程
主故障碼分析過程如圖11 所示?;谇笆鰳嫿ǖ墓收洗a子圖,使用Tarjan 算法檢測強連通分量后縮點。考慮到故障源產生的故障碼無前驅節(jié)點,則此故障碼入度為0。通過計算所有節(jié)點的入度,此時入度為0 的強連通分量或單個故障碼即為故障源對應的故障碼,如圖11 中的1、2、6 橙色節(jié)點所示。
圖11 故障源故障碼分析原理
由于數據決定了關聯規(guī)則的挖掘結果,會使故障源故障碼判定僅對較高支持度的故障源故障碼有良好效果,但關聯規(guī)則依舊對讀取的故障碼有精簡作用。對于所有歷史事務數據進行關聯分析。采用5-fold 交叉驗證,計算在不同置信度條件下故障碼平均精簡率,結果如圖12所示。
圖12 不同置信度故障碼數據的精簡率
從圖12 中可以看出,隨著置信度上升,精簡率整體呈下降趨勢,這是由于關聯規(guī)則數量降低而產生的結果。在下降過程中,存在某些置信度條件下,精簡率升高的特點,這是因為關聯規(guī)則的準確性提高,成強連通分量的故障碼團內元素減少,數據精簡率上升。
為了滿足節(jié)點間高置信度需求,同時獲得更高的精簡率,本文在對已有的歷史數據分析過程中,取置信度為0.84,此時得到的關聯規(guī)則對歷史數據的精簡率為39.35%.
取此車型支持度較高的5 個典型故障產生的故障碼事務,使用基于歷史數據構建完成的有向圖模型對各個事務進行分析,分析結果如表5 所示。故障源故障碼的平均直接判別率約54.08%,典型故障的平均故障碼數據精簡率為65.06%。
表5 典型故障分析結果
通過對特定事務進行分析,可以在實現故障碼精簡的基礎上,對于部分支持度較高的故障,實現故障源故障碼的判定。能夠簡化或免去維修人員對于故障碼的分析工作,優(yōu)化了檢修流程。
本文中基于關聯規(guī)則挖掘對車輛故障時產生的歷史故障碼數據進行分析,提出了故障碼關聯定義與基于Fp-Tree 的關聯規(guī)則挖掘算法;將故障碼間的關聯規(guī)則以圖結構存儲,提出了兩種應用場景及方法。在本文的故障碼數據集中,取置信度為0.84,通過對歷史數據分析可以發(fā)現部分故障碼傳播的興趣規(guī)則;根據故障碼間關聯規(guī)則對整體歷史數據進行精簡,精簡率為39.35%;選取部分支持度較高的故障數據,分析所得到的平均故障源故障碼判別率可達54.08%,平均故障碼精簡率為65.06%。
本文中的故障碼分析方法僅依靠歷史故障碼數據為輸入,分析結果可以應用于車內故障傳播鏈路分析與可視化和主要故障碼分析,能夠提高對耦合故障的診斷準確性和檢修時效性。