朱 全 ,黃愛蓉 ,鮑 娟
(1.湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北 十堰442002;2.鄖陽醫(yī)學(xué)院 計(jì)算機(jī)課部,湖北 十堰442002)
車輛內(nèi)部結(jié)構(gòu)復(fù)雜,故障呈現(xiàn)多樣性,難于發(fā)現(xiàn)。針對這種情況,用戶希望有一個(gè)能方便檢測汽車故障的工具,并能實(shí)時(shí)掌握汽車的狀態(tài)。汽車故障診斷專家系統(tǒng)能夠滿足用戶的需求,具有廣泛的應(yīng)用前景。
汽車故障診斷專家系統(tǒng)主要是利用車載傳感器獲取車輛各ECU故障信息,使用人工智能算法對獲取的故障信息進(jìn)行綜合處理,分析出故障產(chǎn)生的原因,并將分析結(jié)果反饋給用戶。國內(nèi)已有一些使用專家系統(tǒng)進(jìn)行汽車故障診斷的例子,它是人工智能在汽車領(lǐng)域的一個(gè)應(yīng)用,是領(lǐng)域?qū)<液椭R(shí)工程師合作的產(chǎn)物,通常可運(yùn)用故障樹、神經(jīng)網(wǎng)絡(luò)、遺傳算法、小波分析等方法進(jìn)行故障的分析和知識(shí)的提取,在推理方面,運(yùn)用較多的有正向推理、反向推理以及正反混合推理。參見文獻(xiàn)[1-5]。目前的專家也存在一些缺點(diǎn),難于表征問題域的深層知識(shí),缺乏魯棒性和靈活性;不能提供深入的解釋,難以驗(yàn)證根據(jù)經(jīng)驗(yàn)學(xué)習(xí)的能力差等[6]。
針對此現(xiàn)狀,本文提出了基于規(guī)則[6-7]的汽車故障診斷專家系統(tǒng),運(yùn)用不確定性的正向演繹推理,不完整的故障碼信息也能給出結(jié)論,增加了一個(gè)實(shí)例數(shù)據(jù)庫,用于存儲(chǔ)推理結(jié)果,避免了重復(fù)推理,提高了推理效率。
汽車故障診斷專家系統(tǒng)的整體功能模塊如圖1所示,主要由無線收發(fā)模塊、數(shù)據(jù)處理模塊和故障診斷模塊組成。專家系統(tǒng)的功能是當(dāng)用戶需要故障求助時(shí),按下求助按鈕后,接收由車載端發(fā)送來的故障碼信息,運(yùn)用知識(shí)庫中的知識(shí)推理診斷[8-9],并將診斷結(jié)果反饋給用戶。
圖1 功能模塊圖
其中無線收發(fā)模塊具有接收信息和發(fā)送信息的功能,它接收車載端發(fā)送的故障碼信息,并傳遞給數(shù)據(jù)處理模塊,并將數(shù)據(jù)處理模塊傳遞過來的診斷結(jié)果反饋給車載端。數(shù)據(jù)處理模塊處理和轉(zhuǎn)換無線收發(fā)模塊傳遞來的故障碼信息,并傳遞給故障診斷模塊;同時(shí)處理和轉(zhuǎn)換故障診斷模塊傳遞來的診斷結(jié)果并傳遞給無線收發(fā)模塊。故障診斷模塊接收從數(shù)據(jù)處理模塊傳來的車牌號和故障碼,運(yùn)用知識(shí)庫中的知識(shí)進(jìn)行推理,得出診斷結(jié)果并將車牌號和診斷結(jié)果返回給數(shù)據(jù)處理模塊。
為了使專家系統(tǒng)能實(shí)時(shí)準(zhǔn)確的接受到車載端發(fā)送來的故障求助,同時(shí)將診斷結(jié)果實(shí)時(shí)準(zhǔn)確的反饋給車載端,建立一個(gè)好的數(shù)據(jù)交互協(xié)議是很重要的,專家系統(tǒng)數(shù)據(jù)包格式如表1所示。
表1 汽車故障診斷專家系統(tǒng)數(shù)據(jù)包格式
其中:Device為設(shè)備編號,長一個(gè)字節(jié);Node表示通信節(jié)點(diǎn);Data/Cmd表示包的類型,若為0x00表示數(shù)據(jù),若為0x01表示命令;Buf表示包的實(shí)際內(nèi)容,其長度(字節(jié)數(shù))由Length域的數(shù)據(jù)決定。
本系統(tǒng)在運(yùn)行過程中,傳輸?shù)臄?shù)據(jù)包有顯示端發(fā)出的故障求助包、網(wǎng)關(guān)發(fā)給服務(wù)中心的故障求助包和來自服務(wù)中心的分析結(jié)果包。
當(dāng)車輛發(fā)生故障時(shí),或用戶覺得必要時(shí),由用戶發(fā)起故障求助,按下“故障求助”向服務(wù)中心請求幫助。具體過程如下:
1)顯示端“故障求助”按鈕通過網(wǎng)關(guān)向服務(wù)中心發(fā)起故障綜合診斷請求,請求包格式見表2。
表2 顯示端發(fā)出的故障求助包
2)網(wǎng)關(guān)先將該請求轉(zhuǎn)發(fā)給采集端。
3)采集端對關(guān)鍵點(diǎn)掃描,將掃描的故障碼發(fā)給網(wǎng)關(guān)。
4)網(wǎng)關(guān)根據(jù)來自采集端的數(shù)據(jù)包確定有無故障存在,若無,直接發(fā)送故障尾包給顯示端;若有,將故障碼轉(zhuǎn)發(fā)給顯示端,同時(shí)在故障碼包的Buf開始處插入“車牌號碼”信息如表3所示,將其發(fā)給服務(wù)中心,等待服務(wù)中心的診斷結(jié)果。
表3 網(wǎng)關(guān)發(fā)給服務(wù)中心的故障求助包
5)若服務(wù)中心未返回診斷結(jié)果 (如發(fā)生無法連接服務(wù)中心的情況),則直接將尾包發(fā)給顯示端;若服務(wù)中心返回分析結(jié)果,則將來自服務(wù)中心的結(jié)果包(表4)和故障尾包依次發(fā)送給顯示端。
表4 來自服務(wù)中心的分析結(jié)果包
故障診斷模塊是專家系統(tǒng)的核心部分,它根據(jù)發(fā)送來的故障碼,運(yùn)用知識(shí)庫中的知識(shí)進(jìn)行推理,得出故障部位、維修建議和置信度。本系統(tǒng)在正向演繹推理的過程中,使用深度優(yōu)先搜索策略以達(dá)到對汽車故障的診斷。
4.1.1 專家系統(tǒng)基本實(shí)現(xiàn)原理
故障診斷模塊主要由人機(jī)接口、推理機(jī)、知識(shí)庫、綜合數(shù)據(jù)庫、知識(shí)獲取機(jī)構(gòu)、解釋系統(tǒng)等組成。其中推理機(jī)和知識(shí)庫是故障診斷的核心部件。人機(jī)接口是專家系統(tǒng)與領(lǐng)域?qū)<一蛑R(shí)工程師及一般用戶間進(jìn)行信息交互的媒介;推理機(jī)模擬領(lǐng)域?qū)<业乃季S過程,根據(jù)當(dāng)前已知的事實(shí),利用知識(shí)庫中的知識(shí),按一定的推理方法和控制策略進(jìn)行推理,最后得出問題的解;知識(shí)庫是專家系統(tǒng)的知識(shí)存儲(chǔ)器,用來存放被求解問題相關(guān)領(lǐng)域內(nèi)的原理性知識(shí)或一些相關(guān)的事實(shí)以及專家的經(jīng)驗(yàn)性知識(shí);綜合數(shù)據(jù)庫用來存儲(chǔ)有關(guān)領(lǐng)域問題的初始事實(shí)、問題描述及其系統(tǒng)推理過程中得到的各種中間狀態(tài)或結(jié)果等,系統(tǒng)的目標(biāo)結(jié)果也存于其中;知識(shí)獲取機(jī)構(gòu)從知識(shí)工程師那里獲取知識(shí)或從訓(xùn)練數(shù)據(jù)中自動(dòng)獲取知識(shí),并把得到的知識(shí)送入知識(shí)庫中,并確保知識(shí)的一致性及完整性;解釋系統(tǒng)通過對自身行為的解釋回答用戶的提問。此功能模塊的流程圖見圖2。
圖2 故障診斷模塊
4.1.2 知識(shí)獲取
采用故障樹分析法將知識(shí)組織成樹狀結(jié)構(gòu),故障樹分析法是一種將系統(tǒng)故障形成的原因由總體至部分按樹枝狀逐漸細(xì)化的分析方法,可以用來判明故障部位及其原因、影響和發(fā)生概率。故障樹分析法就是把所研究系統(tǒng)的最不希望發(fā)生的故障狀態(tài)作為故障分析的目標(biāo),然后尋找直接導(dǎo)致這一故障發(fā)生的全部因數(shù),再找出造成下一級事件發(fā)生的全部直接因素,一直追查到那些原始的、無須再深究的因素為止[10]。故障樹分析法將最不希望發(fā)生的事件稱為頂端事件,最終原因稱為底端事件,介于二者之間用于推理的事件稱為中間事件,并用相應(yīng)符號表示這些事件,再用適當(dāng)?shù)倪壿嬮T把頂端事件、中間事件和底端事件連接成樹形圖,用以表示故障現(xiàn)象和故障原因之間的關(guān)系。
故障樹分析過程如下:1)對系統(tǒng)進(jìn)行分析,將最不希望發(fā)生的事件稱為頂端事件。2)將系統(tǒng)各部分故障現(xiàn)象和故障原因進(jìn)行定義并組織成故障樹形式的邏輯圖。3)運(yùn)用布爾代數(shù)對故障樹進(jìn)行簡化,求故障樹的最小割集。4)根據(jù)各元部件間關(guān)聯(lián)的故障概率,對系統(tǒng)故障做定量分析。
4.1.3 推理原理
本系統(tǒng)是基于規(guī)則的專家系統(tǒng),知識(shí)被表示為“如果……那么……”的產(chǎn)生式規(guī)則,即 “IF P THEN Q”的形式,其中P是產(chǎn)生式的前件,指出該產(chǎn)生式規(guī)則的條件;Q是一組結(jié)論或操作,指出當(dāng)前提條件滿足時(shí)應(yīng)得出的結(jié)論或進(jìn)行的操作[10]。
由于此系統(tǒng)一次獲取所有故障碼,無法在推理過程中詢問用戶相關(guān)信息,用反向演繹推理或正反向演繹推理比較困難,所以用正向演繹推理;正向演繹推理的基本思想是:用戶首先用已知的初始事實(shí)集初始化臨時(shí)數(shù)據(jù)庫,在知識(shí)庫中尋找與臨時(shí)數(shù)據(jù)庫中的模式匹配的知識(shí),構(gòu)成可用的知識(shí)集。然后運(yùn)用深度優(yōu)先搜索作為沖突消解策略選出一條規(guī)則進(jìn)行推理,并將推理出的新事實(shí)加入到臨時(shí)數(shù)據(jù)庫中作為下一步推理的已知事實(shí)。如此反復(fù)這一過程直到求出所要求的解或者知識(shí)庫中再無其他可用的知識(shí)為止。
本系統(tǒng)是正向推理的基礎(chǔ)上的不確定性推理。知識(shí)庫中的知識(shí)具有不確定性,在推理過程中,結(jié)論的不確定度為推理過程中規(guī)則不確定度的乘積,最后的推理結(jié)果按不確定度的大小進(jìn)行排序,給出用戶結(jié)論的優(yōu)先順序。
本系統(tǒng)設(shè)置了一個(gè)實(shí)例數(shù)據(jù)庫,推理的最后結(jié)果存放在實(shí)例數(shù)據(jù)庫中,當(dāng)下次發(fā)送來的故障碼存在于實(shí)例數(shù)據(jù)庫時(shí),可以用實(shí)例數(shù)據(jù)庫中已有的結(jié)論反饋給用戶。
圖3 專家系統(tǒng)整體流程圖
故障診斷專家系統(tǒng)整體流程圖見圖3。故障診斷需要故障診斷模塊各部分間的協(xié)調(diào)工作,基本步驟如下:1)程序?qū)?shù)據(jù)處理模塊傳來的數(shù)據(jù)進(jìn)行處理,分離出車牌號和故障碼。2)在實(shí)例數(shù)據(jù)庫中查詢有無與故障碼匹配的診斷結(jié)果,若有,將車牌號和診斷結(jié)果傳給數(shù)據(jù)處理模塊,程序結(jié)束;若無,進(jìn)行步驟3。3)建立用于推理的對象,初始化臨時(shí)數(shù)據(jù)庫。4)運(yùn)用知識(shí)庫中知識(shí)進(jìn)行推理,如果推理失敗,將車牌號和“推理失敗”傳給數(shù)據(jù)處理模塊,程序結(jié)束;如果推理成功,進(jìn)行步驟5。5)將推理實(shí)例加入實(shí)例數(shù)據(jù)庫,將車牌號和推理結(jié)果傳給數(shù)據(jù)處理模塊,程序結(jié)束。
4.2.1 故障推理及設(shè)計(jì)
故障推理是以推理機(jī)為中心的推理過程,流程圖如圖4所示。基本步驟如下:
1)建立臨時(shí)數(shù)據(jù)庫,用于存儲(chǔ)規(guī)則前件及其對應(yīng)規(guī)則的概率和最終結(jié)果及其對應(yīng)概率。
2)初始化臨時(shí)數(shù)據(jù)庫,將各故障碼與規(guī)則前件匹配,形成規(guī)則集,運(yùn)用寬度優(yōu)先搜索策略,依次選取規(guī)則進(jìn)行推理,將推理結(jié)果中的結(jié)論加到存儲(chǔ)最終結(jié)果的數(shù)組中,相應(yīng)概率加到存儲(chǔ)最終結(jié)果概率的數(shù)組中;將推理結(jié)果中的操作加到存儲(chǔ)規(guī)則前件的數(shù)組中,相應(yīng)概率加到存儲(chǔ)規(guī)則前件概率的數(shù)組中,形成新的事實(shí)集進(jìn)行下一步推理。
3)反復(fù)執(zhí)行步驟2直到存儲(chǔ)規(guī)則前件的數(shù)組中不與任何規(guī)則匹配時(shí)為止。
4)若診斷失敗,返回車牌號和“推理失敗”;若診斷成功,將推理結(jié)果中相同項(xiàng)合并,對應(yīng)概率相加,去除結(jié)果中概率小于0.1的項(xiàng),并將推理結(jié)果存入“實(shí)例數(shù)據(jù)庫”,返回車牌號和推理結(jié)果。
圖4 故障推理流程圖
本系統(tǒng)在Windows操作系統(tǒng)下,以C#作為開發(fā)平臺(tái),使用SQL2000作為專家系統(tǒng)中知識(shí)庫、實(shí)例數(shù)據(jù)庫的服務(wù)器。
知識(shí)庫存儲(chǔ)了推理機(jī)推理所需的知識(shí),是專家系統(tǒng)最重要的部分,表InferEvent提供了其功能,存儲(chǔ)了用于推理的知識(shí),即產(chǎn)生式規(guī)則的前件,對應(yīng)操作或結(jié)論和相應(yīng)置信度。實(shí)例數(shù)據(jù)庫具有提高診斷效率的作用,表rules提供了其功能,存儲(chǔ)了接收到的故障碼序列、對應(yīng)診斷結(jié)果和置信度。其它輔助表有表ProbPlace和表ErrorCode,表ProbPlace給出了故障部位編碼及其對應(yīng)故障部位和維修建議,表ErrorCode用于存儲(chǔ)推理前件和最終結(jié)果,將推理前件和最終結(jié)果組織到一個(gè)表中,避免了頻繁的表間操作,提高了程序的運(yùn)行效率。
系統(tǒng)測試時(shí),專家系統(tǒng)作為服務(wù)器,主動(dòng)打開,處于監(jiān)聽狀態(tài),當(dāng)有故障碼傳來時(shí),開始推理診斷并將診斷結(jié)果反饋給用戶,整個(gè)系統(tǒng)的部署見圖5。
圖5 系統(tǒng)應(yīng)用部署圖
在系統(tǒng)運(yùn)行過程中,診斷結(jié)果反饋給用戶的同時(shí),也顯示給系統(tǒng)管理員,通過系統(tǒng)管理員對系統(tǒng)的實(shí)時(shí)監(jiān)測,有利于系統(tǒng)性能的測試和評估,為系統(tǒng)的維護(hù)和改進(jìn)提供了依據(jù)。應(yīng)用截圖如圖6所示。
圖6 實(shí)際應(yīng)用截圖
通過對系統(tǒng)的測試,達(dá)到了預(yù)期的效果,當(dāng)提供測試數(shù)據(jù)時(shí),系統(tǒng)給出了正確的診斷結(jié)果,可以作為用戶排除故障的依據(jù),根據(jù)反饋的維修建議,通過相關(guān)處理,最終成功的排除了汽車的故障,完成了專家系統(tǒng)的功能。
在診斷時(shí),診斷具有實(shí)時(shí)高效性,可以快速的給出診斷結(jié)果;系統(tǒng)具有較高的穩(wěn)定性,對于各種異常情況,系統(tǒng)均給出相關(guān)的異常處理結(jié)果;當(dāng)故障碼信息不足時(shí),系統(tǒng)也可根據(jù)具體情況給出診斷結(jié)果和相應(yīng)的置信度。以往汽車故障診斷專家系統(tǒng)多為研究汽車某一部分故障的診斷,難于從整體對汽車故障進(jìn)行分析,在進(jìn)行推理時(shí),多為確定性推理,對于復(fù)雜的汽車系統(tǒng),無法給出全面的診斷結(jié)果,導(dǎo)致某些推理結(jié)果的不完整。本專家系統(tǒng)對汽車進(jìn)行整體分析,各診斷部位緊密聯(lián)系,通過不確定推理,將所有可能結(jié)果呈現(xiàn)給用戶,供用戶選擇。在構(gòu)建知識(shí)庫的同時(shí),還建了一個(gè)實(shí)例數(shù)據(jù)庫用于存儲(chǔ)推理結(jié)果,當(dāng)遇到較多用戶發(fā)送相同故障碼時(shí),可以直接查詢已有的推理結(jié)果并反饋給用戶,提高了推理效率和故障診斷的實(shí)時(shí)性。
本專家系統(tǒng)用故障樹的分析方法,基于規(guī)則的知識(shí)表示和正向演繹推理,以解決汽車中存在的復(fù)雜的故障問題,方便用戶對各自汽車的維護(hù),具有廣闊的應(yīng)用前景。采用故障樹的分析方法,將各故障現(xiàn)象以樹的形式組織起來,便于描述各故障現(xiàn)象之間的關(guān)系,簡化了故障現(xiàn)象間復(fù)雜的關(guān)系,有利于分析和編程。而用基于規(guī)則的知識(shí)表示方法,使知識(shí)和計(jì)算機(jī)程序中的控制分離,從而使知識(shí)和程序控制可以各自進(jìn)行維護(hù)而相互間沒有影響,提高了整個(gè)系統(tǒng)的穩(wěn)定性,各規(guī)則在語法上是相互獨(dú)立的,規(guī)則僅可以通過改變工作內(nèi)存中的模式來影響其他規(guī)則的引發(fā),這種語法上的獨(dú)立性有利于逐步開發(fā)系統(tǒng),可以不斷地加入、刪除或修改系統(tǒng)中的知識(shí)。但此專家系統(tǒng)無法對汽車模糊的故障征兆進(jìn)行處理,而且無法從診斷中自主學(xué)習(xí),必須由知識(shí)工程師對規(guī)則進(jìn)行添加和維護(hù)。未來可以采取神經(jīng)網(wǎng)絡(luò)[11]和遺傳算法[12]相結(jié)合的專家系統(tǒng),具有模糊診斷和自主學(xué)習(xí)的能力。
[1] 程曉章,吳昊.基于規(guī)則的柴油機(jī)故障診斷專家系統(tǒng)[J].合肥工業(yè)大學(xué)學(xué)報(bào),2003(4):619-622.
[2]辛惠娟,戴慶輝.汽車發(fā)動(dòng)機(jī)故障診斷專家系統(tǒng)的開發(fā)研究[J].煤礦機(jī)械,2005(2):131-133.
[3] 張麗莉,儲(chǔ)江偉,強(qiáng)添剛,等.汽車故障診斷專家系統(tǒng)關(guān)鍵技術(shù)的研究與發(fā)展 [J].計(jì)算機(jī)應(yīng)用研究,2008,25(6):1633-1638.
[4]許化東.基于故障樹分析法的汽車故障診斷專家系統(tǒng)的研究[D].合肥:合肥工業(yè)大學(xué)車輛工程,2002.
[5] 孔繁森,董因平,何仁.基于故障樹知識(shí)的汽車故障診斷推理[J].汽車工程,2001,23(3):209-213.
[6]George F.Luger.人工智能—復(fù)雜問題求解的結(jié)構(gòu)和策略[M].北京:機(jī)械工業(yè)出版社,2006.
[7] 王勛,凌云,費(fèi)玉蓮.人工智能導(dǎo)論[M].北京:科學(xué)出版社,2005.
[8] 鄂加強(qiáng),龔金科,王耀南,等.特種車輛柴油發(fā)動(dòng)機(jī)故障診斷專家系統(tǒng)推理機(jī)設(shè)計(jì)[J].湖南大學(xué)學(xué)報(bào),2005,32(5):46-51.
[9] CHEN SHYI-MING,HSIAO WEN-HOAR.Bidirectional approximate reasoning for rule-based systems using interval-valued fuzzy sets [J].Fuzzy Sets and Systems,2000,113(2):185-203.
[10]肖云魁.汽車故障診斷學(xué)[M].2版.北京:北京理工大學(xué)出版社,2006.
[11]馮 定.神經(jīng)網(wǎng)絡(luò)專家系統(tǒng) [M].北京: 科學(xué)出版社,2006.
[12]李敏強(qiáng).遺傳算法的基本理論與應(yīng)用[M].北京:科學(xué)出版社,2002.
[13]馬鳴遠(yuǎn).人工智能與專家系統(tǒng)導(dǎo)論[M].北京:清華大學(xué)出版社,2006.