楊國振,蘇 健
(1.裝甲兵工程學(xué)院 控制工程系,北京 100072;2.裝甲兵工程學(xué)院 信息工程系,北京 100072)
一種復(fù)雜系統(tǒng)的快速故障診斷方法
楊國振1,蘇健2
(1.裝甲兵工程學(xué)院控制工程系,北京100072;2.裝甲兵工程學(xué)院信息工程系,北京100072)
針對復(fù)雜系統(tǒng)故障診斷效率低,通用性、擴(kuò)展性差等問題,提出并實現(xiàn)了一種基于靈巧故障樹的快速故障診斷方法,首先通過診斷節(jié)點生成算法建立故障診斷樹的關(guān)系,然后運用數(shù)據(jù)庫技術(shù)對知識庫進(jìn)行處理,最后采用圖形界面實現(xiàn)人機(jī)交互;該方法將故障樹、數(shù)據(jù)庫和虛擬界面進(jìn)行融合設(shè)計,實現(xiàn)了故障的快速診斷和推理的動態(tài)更新,并在多型火炮控制系統(tǒng)的故障診斷中得到應(yīng)用,取得了重大效益。
靈巧故障診斷樹;快速診斷;診斷節(jié)點;ACCESS數(shù)據(jù)庫
現(xiàn)有的故障診斷方法可劃分為基于解析模型的方法、基于信號處理的方法和基于知識的方法[1]?;谥R的方法是目前研究和應(yīng)用的熱點,當(dāng)對象的數(shù)學(xué)模型難以獲得,且無法得到輸入輸出信號時,多采用該方法[2]?;谥R的方法又包括神經(jīng)網(wǎng)絡(luò)法、模式識別法、模糊推理法、故障樹分析法、專家系統(tǒng)法、粗糙集法和事例推理法等,它們都有各自適用的情形,前人也已作出了大量研究]。
針對實際系統(tǒng),在分析和掌握該系統(tǒng)的故障現(xiàn)象及其對應(yīng)的故障機(jī)理后,為提高故障診斷效率,可采用故障診斷樹分析法,但目前基于該方法所開發(fā)設(shè)計的故障診斷軟件較少。
本文運用故障診斷樹分析法原理,基于Labwindows CVI樹控件,開發(fā)設(shè)計了相應(yīng)的故障診斷軟件。該軟件可應(yīng)用于裝甲車輛炮控系統(tǒng)、汽車發(fā)動系統(tǒng)、自動控制系統(tǒng)等諸多復(fù)雜控制系統(tǒng)的快速故障診斷,以確定故障部位,進(jìn)行故障定位。
故障診斷樹分析法是一種圖形演繹法,包括矩形事件、菱形事件和圓角矩形事件三類事件符號,矩形事件為頂事件,代表故障現(xiàn)象節(jié)點,菱形事件為中間事件,代表測試判斷節(jié)點,圓角矩形事件為底事件,代表故障源節(jié)點。每個菱形事件有測試結(jié)果為真和測試結(jié)果為假兩個分支,事件之間通過有向連接線表示邏輯層次關(guān)系。故障診斷樹是由故障現(xiàn)象與故障原因之間的測試結(jié)果驅(qū)動的,上一步的測試結(jié)果直接驅(qū)動下一步的測試內(nèi)容。本方法中,將故障診斷樹由圖形表示法轉(zhuǎn)化為文字表示法,通過設(shè)計相應(yīng)的文本字段來對應(yīng)矩形事件、菱形事件和圓角矩形事件。
實現(xiàn)快速故障診斷的總體思路為:首先建立知識庫,將復(fù)雜系統(tǒng)的故障現(xiàn)象及故障原因以故障診斷樹的形式進(jìn)行存儲;然后借助Labwindows CVI樹控件,將故障診斷樹直觀地顯示給用戶,指導(dǎo)故障診斷。用戶既可查看完整的故障診斷流程,實現(xiàn)基于故障診斷樹的單步故障診斷;又可對故障診斷樹進(jìn)行增加、刪除和修改節(jié)點等操作,根據(jù)實際情形修改和完善故障診斷樹,這相當(dāng)于一個專家系統(tǒng)。涉及到的關(guān)鍵技術(shù)有ACCESS數(shù)據(jù)庫通信技術(shù),Labwindows CVI樹控件操作技術(shù),以及實現(xiàn)故障診斷樹各類操作的算法。
快速故障診斷的具體實現(xiàn)步驟如圖1所示。
圖1 復(fù)雜系統(tǒng)快速故障診斷軟件實現(xiàn)步驟
2.1梳理系統(tǒng)故障診斷樹
故障診斷樹分析法是實現(xiàn)快速故障診斷的基礎(chǔ),我們首先需要依據(jù)專家知識和實踐經(jīng)驗,列舉系統(tǒng)可能存在的故障現(xiàn)象,并逐步分析產(chǎn)生各故障現(xiàn)象的原因,以及其中的邏輯關(guān)系,梳理出系統(tǒng)的故障診斷樹,建立知識庫。
2.2生成診斷節(jié)點,建立知識庫
梳理出系統(tǒng)的故障診斷樹后,根據(jù)其中的邏輯關(guān)系,編寫診斷節(jié)點代碼,并錄入ACCESS數(shù)據(jù)庫,故障診斷樹是以文本的形式存儲在ACCESS數(shù)據(jù)庫中的。
為實現(xiàn)功能,我們設(shè)計數(shù)據(jù)庫GZZDS.mdb,包含兩類數(shù)據(jù)表,一類是故障現(xiàn)象總表,命名為“gzxxzb”,另一類是各故障現(xiàn)象對應(yīng)的故障診斷樹存儲表,命名規(guī)則為“table”+“故障現(xiàn)象序號”。
故障現(xiàn)象總表存儲了被診斷系統(tǒng)或設(shè)備內(nèi)的全部故障現(xiàn)象,包括數(shù)字字段“ID”和文本字段“gzxx”,前者是故障現(xiàn)象依次排列的序號,后者是對各故障現(xiàn)象的具體文字性描述。
故障診斷樹存儲表的個數(shù)由故障現(xiàn)象總表中的故障現(xiàn)象總數(shù)決定,每個表包括數(shù)字字段“ID”、數(shù)字字段“層次”、文本字段“內(nèi)容”和數(shù)字字段“類型”?!癐D”字段代表當(dāng)前記錄的序號;故障診斷樹的層次結(jié)構(gòu)關(guān)系通過“層次”字段識別,它的命名規(guī)則為:表的首行記錄代表故障現(xiàn)象,“層次”是 “0”,自第2行開始是展開的故障診斷樹,第1個判斷節(jié)點的 “層次”是“1”,結(jié)論為真的節(jié)點“層次”是“10”,為假的節(jié)點“層次”是“11”,依次類推,后一層節(jié)點“層次”是前一判斷節(jié)點“層次”值尾部添加“1”或者加“0”,當(dāng)結(jié)論為真時,添加“1”,反之加“0”;“內(nèi)容”字段是對應(yīng)故障診斷樹每一步的具體操作提示,或為判斷節(jié)點,或為結(jié)論節(jié)點;“類型”字段包含“0”、“1”和“2”3種,該表的首行記錄是故障現(xiàn)象,“類型”為“0”,其余記錄若是判斷節(jié)點,“類型”為“1”,若是結(jié)論節(jié)點,“類型”為“2”。舉例說明某故障診斷樹的存儲,如圖2所示。2
圖2 某故障診斷樹的存儲
.3建立Labwindows CVI軟件平臺與數(shù)據(jù)庫的通信連接
將節(jié)點代碼錄入ACCESS數(shù)據(jù)庫后,通過SQL Toolkit工具實現(xiàn)Labwindows CVI軟件平臺與數(shù)據(jù)庫的通信交互[9],繼而實現(xiàn)后續(xù)功能,包含以下幾個步驟。
1)建立數(shù)據(jù)庫連接:
sprintf(strDataSource,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s","GZZDS.mdb");
db Handle=DBConnect(str DataSource);
2)激活SQL語句:
db Table=DBActivateSQL(db Handle,"SELECT*FROM gzxxzb");
3)處理SQL語句:
DBBindColChar(db Table,3,256,neirong,&dbstatus[0],"")將字符型字段綁定到變量中;
DBBindColInt(db Table,4,&leixing,&leixingstatus)將整型字段綁定到變量中;
resCode=DBCreateRecord(db Table)創(chuàng)建一條記錄;
resCode=DBPutRecord(db Table)將當(dāng)前記錄存儲到數(shù)據(jù)庫中;
resCode=DBDeleteRecord(db Table)刪除當(dāng)前記錄;
DBFetchRandom(db Handle,numberlist)隨機(jī)讀取數(shù)據(jù);
number=DBNumber Of Records(db Table)返回表中記錄的總數(shù);
4)與數(shù)據(jù)庫斷開連接:
resCode=DBDisconnect(db Handle)。
2.4故障診斷樹顯示及故障診斷推理
基于Labwindows CVI中的樹狀控件和已經(jīng)建立好的數(shù)據(jù)表,針對某一故障現(xiàn)象,既可完整地展示出故障診斷樹,給予操作人員清晰直觀的認(rèn)識;也可以根據(jù)每一步的測試結(jié)果逐一顯示故障診斷樹,實現(xiàn)故障診斷推理。
Labwindows CVI的樹控件提供了一組分級項目列表,可清晰地分層顯示故障診斷樹,常用的函數(shù)有:向控件中插入項目(Insert ListItem,可以選擇插入故障診斷樹的同級分支或者子分支)、刪除項目(DeleteListItem)等[9]。
故障診斷推理的難點在于如何將故障診斷樹存儲表中的內(nèi)容以符合Labwindows CVI樹控件操作規(guī)則的形式分層展現(xiàn)出來,分析如下:
1)故障診斷樹中“層次”為“0”的記錄代表故障現(xiàn)象,“層次”為“1”的記錄表示第1個判斷節(jié)點,除這兩條記錄外,其余記錄都是前一判斷節(jié)點的“是”與“否”兩個分支,兩兩配對存在。
2)構(gòu)造一維層次代碼數(shù)組cengciarray[],由“1”開始,將表中所有“層次”值存入該數(shù)組中,并通過冒泡法對該數(shù)組排序,這樣任一判斷節(jié)點的兩個結(jié)論分支是前后相連的。
3)構(gòu)造二維數(shù)組indexarray[m][n],第一維用于標(biāo)記當(dāng)前元素的序號m,indexarray[m][0]用于保存元素的層次代碼,indexarray[m][1]用于保存當(dāng)前元素所處故障診斷樹中的位置,我們稱之為索引代碼。規(guī)定indexarray[0][0]=1,indexarray[0][1]=0,表明indexarray[m][n]的首元素是層次代碼為1的記錄,且該元素的索引代碼為0。
4)確定每一條記錄的索引代碼,該值是不斷動態(tài)變化的,具體方法如下。
1)初步計算每條記錄的索引代碼?!笆恰苯Y(jié)論節(jié)點的索引代碼由它的判斷節(jié)點的索引代碼“+1”,“否”結(jié)論節(jié)點的索引代碼由它的判斷節(jié)點的索引代碼“+2”,層次代碼除以10后取整得到與其相關(guān)的判斷節(jié)點。
例如:由數(shù)組cengciarray[]中層次代碼為1的元素開始,該元素表示故障診斷樹的首個判斷節(jié)點,它的索引代碼為0,它的兩個結(jié)論分支的索引代碼分別是1和2,將它們的層次代碼和索引代碼存入數(shù)組indexarray[m][n]中。
2)對索引代碼進(jìn)行修正。從indexarray[m][n]的首元素開始循環(huán)遍歷該數(shù)組,如果某個元素的索引代碼等于它后面元素的索引代碼,則該元素的索引代碼加2,其余元素的索引代碼保持不變。
3)不斷重復(fù)第一步、第二步,直至獲得cengciarray[]數(shù)組中所有元素的索引代碼,并依次存入indexarray[m][n]數(shù)組中。
通過以上算法,可將任一故障診斷樹存儲表中的記錄按照故障診斷樹的層次關(guān)系存儲在數(shù)組indexarray[m][n]中。以圖1的存儲表為例,確定indexarray[m][n]中數(shù)值的具體步驟如表1~5所示。
表1 indexarray[m][n]中數(shù)值確定步驟一
表2 indexarray[m][n]中數(shù)值確定步驟二
表3 indexarray[m][n]中數(shù)值確定步驟三
表4 indexarray[m][n]中數(shù)值確定步驟四
表5 indexarray[m][n]中數(shù)值確定步驟五
5)完整展示故障診斷樹。依據(jù)indexarray[m][1]中數(shù)值由小到大的順序,借助Labwindows CVI樹控件操作函數(shù),依次顯示數(shù)據(jù)表中的各條記錄。
6)故障診斷推理。故障診斷推理是由判斷節(jié)點的測試結(jié)果驅(qū)動的,通過故障診斷樹存儲表中各條記錄的層次代碼實現(xiàn)該功能。假設(shè)當(dāng)前判斷節(jié)點的層次代碼為cengci,單步診斷選擇“是”結(jié)論時,樹控件顯示層次代碼為cengci*10的那條記錄,選擇“否”結(jié)論時,顯示層次代碼為cengci*10+1的記錄。最終,通過當(dāng)前節(jié)點的類型代碼判斷單步診斷是否完畢,當(dāng)該值為“2”時,表明得到故障結(jié)論,診斷過程結(jié)束。
2.5故障診斷節(jié)點的編輯
由于知識經(jīng)驗的不準(zhǔn)確或不完備,我們先前梳理的故障診斷樹可能存在錯誤,這時允許操作人員對故障診斷節(jié)點進(jìn)行編輯,即對數(shù)據(jù)表中存儲的記錄進(jìn)行修改。
操作人員可修改、增加或刪除故障診斷樹的節(jié)點,在Labwindows CVI平臺中,首先通過Get CtrlIndex函數(shù)獲得樹控件的焦點,即需要進(jìn)行操作的節(jié)點,再基于indexarray[m][n]數(shù)組的索引代碼實現(xiàn)對故障診斷樹存儲表的識別,繼而對存儲表進(jìn)行修改、增加或刪除操作。應(yīng)注意,增加節(jié)點時,首先將所選擇的結(jié)論節(jié)點類型改為判斷節(jié)點,然后為判斷節(jié)點成對添加“是”與“否”兩個結(jié)論節(jié)點;刪除節(jié)點時,是刪除所選節(jié)點的所有后續(xù)節(jié)點。
2.6故障結(jié)論存儲與顯示
故障診斷推理結(jié)束后,可存儲故障結(jié)論,并能與數(shù)據(jù)庫實現(xiàn)交互通信,讀取歷史數(shù)據(jù)。當(dāng)選擇某故障現(xiàn)象后,可顯示出該故障現(xiàn)象發(fā)生的總次數(shù)及其對應(yīng)各故障原因的次數(shù)。這一功能是通過設(shè)計數(shù)據(jù)表“gzxxcc”實現(xiàn)的,具體方法類似于2.2中對數(shù)據(jù)表進(jìn)行的相關(guān)操作,此處不再贅述。
3.1軟件界面設(shè)計
故障診斷軟件包括主界面、故障診斷界面以及與診斷節(jié)點操作相關(guān)的界面,可實現(xiàn)以下具體功能:
1)故障現(xiàn)象選擇。進(jìn)入程序主界面后,顯示出系統(tǒng)所有可能存在的故障現(xiàn)象。選擇某個故障現(xiàn)象,點擊“開始”,進(jìn)入故障診斷界面,該界面將故障現(xiàn)象和首個判斷節(jié)點自動顯示出來。
2)查看流程。點擊“查看流程”,可將該故障診斷樹直觀全面地顯示。
3)單步診斷。點擊“單步診斷”,根據(jù)故障診斷樹的提示,選擇判斷節(jié)點的結(jié)論“是”或“否”,并可通過“返回”按鈕回到上一步,最終彈出“注意”對話框,提示故障診斷完畢,得到結(jié)論。
4)修改節(jié)點。選擇某節(jié)點,點擊“修改節(jié)點”,可對節(jié)點的類型或內(nèi)容進(jìn)行修改。
5)增加節(jié)點。選擇某結(jié)論節(jié)點,點擊“增加節(jié)點”,自動將該節(jié)點變?yōu)榕袛喙?jié)點,并可以成對添加它的“是”與“否”結(jié)論節(jié)點。
6)刪除節(jié)點。選擇某節(jié)點后,點擊“刪除節(jié)點”,即可刪除后續(xù)所有節(jié)點。
7)故障結(jié)論存儲與顯示。某單步診斷結(jié)束后,點擊所彈出對話框中的“OK”,可將當(dāng)前故障診斷結(jié)果存入數(shù)據(jù)庫中。退到程序主界面后,在頁面左側(cè)選擇某故障現(xiàn)象,點擊“結(jié)論顯示”,會彈出新的界面,以顯示該故障現(xiàn)象發(fā)生的總次數(shù)及其對應(yīng)各故障原因的次數(shù)。
3.2實例驗證
以某型裝甲車輛炮控系統(tǒng)出現(xiàn)“系統(tǒng)通電,電源指示燈不亮”的故障為例進(jìn)行說明。針對該故障現(xiàn)象,可以查看完整的故障診斷樹如圖3所示,進(jìn)行單步診斷時,依照提示,逐步進(jìn)行,最終得到故障診斷結(jié)論為“電源電纜故障”,如圖4所示,達(dá)到了預(yù)期的效果。
圖3 完整的故障診斷樹
圖4 單步診斷流程
本文提出了一種可應(yīng)用于復(fù)雜系統(tǒng)的快速故障診斷方法,并開發(fā)設(shè)計了相應(yīng)的故障診斷軟件,經(jīng)實驗驗證,達(dá)到了預(yù)期的故障診斷效果。該方法具有以下優(yōu)點:1)直觀形象,故障診斷樹通過簡單的二叉樹將系統(tǒng)間的邏輯關(guān)系清晰地表達(dá)出來,判斷節(jié)點與結(jié)論節(jié)點直觀形象地展現(xiàn)了故障及其發(fā)生的原因,便于維修人員理解接受;2)針對性強(qiáng),故障診斷樹分層體現(xiàn)了與故障現(xiàn)象相關(guān)的測試點,不需要盲目地采集所有信號,針對性強(qiáng);3)應(yīng)用范圍廣,故障診斷樹分析法可適用于各個層級的故障診斷,針對不同層次的診斷對象,進(jìn)行不同的分析研究;4)用途多樣,故障診斷樹建立后,不僅利于維修人員的診斷工作,還有助于設(shè)備的管理、維修和技術(shù)培訓(xùn)。
[1]陸雪梅,尚群立.動態(tài)控制系統(tǒng)的故障診斷方法綜述[J].機(jī)電工程,2008,25(6):103-107.
[2]朱大奇,于盛林.基于知識的故障診斷方法綜述[J].安徽工業(yè)大學(xué)學(xué)報,2002,19(3):197-204.
[3]李光升,康洪銘,謝永成,等.基于BP神經(jīng)網(wǎng)絡(luò)的裝甲車輛電源系統(tǒng)故障診斷方法研究[J].計算機(jī)測量與控制,2012,20(10):2719-2721.
[4]陳德道,安虎平,等.基于模糊故障樹的數(shù)控機(jī)床故障診斷方法[J].機(jī)床與液壓,2015,43(5):177-180.
[5]張雷,常天慶,朱斌,等.基于模糊推理的炮控系統(tǒng)性能評估與故障診斷[J].計算機(jī)測量與控制,2010,18(8):1815-1817.
[6]蘇健,陳玉強(qiáng),陳軍偉,等.基于故障樹分析的火控系統(tǒng)故障診斷專家系統(tǒng)設(shè)計[J].計算機(jī)測量與控制,2013,21(11):3008-3010.
[7]許斌,周鳴岐.測試點優(yōu)化及故障診斷樹生成技術(shù)[J].國外電子測量技術(shù),2006,25(3):1519.
[8]鄭偉,馮富強(qiáng),皮文靜,等.故障診斷樹生成技術(shù)研究與實裝驗證[J].裝備指揮技術(shù)學(xué)院學(xué)報,2012,23(1):119-122.
[9]王建新.Lab Windows/CVI虛擬儀器測試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2011.
A Fast Fault Diagnosis Method for Complex System
Yang Guozhen1,Su Jian2
(1.Department of Control Engineering,Academy of Armored Force Engineering,Beijing100072,China;2.Department of Information Engineering,Academy of Armored Force Engineering,Beijing100072,China)
For the efficiency of fault diagnosis in complex systems is low,and poor universality and expansibility,a fast fault diagnosis method is proposed and realized based on the smart fault diagnosis tree.The framework and relationship is built through the generation algotithm of diagnostic nodes,then the knowledge base is processed on data base,Human-Computer Interaction is realized by the graphical interface.To achieve the fast fault diagnosis and the dynamic data update,they are fused with the fault diagnosis tree、the data base and the Virtual Interface,the method is used for the fault diagnosis of several gun control systems,and it has great benefits.
smart fault diagnosis tree;fast fault diagnosis;diagnostic node;ACCESS database
1671-4598(2016)05-0008-04
10.16526/j.cnki.11-4762/tp.2016.05.003
TP306
A
2015-05-28;
2015-12-04。
楊國振(1977-),碩士研究生,主要從事武器系統(tǒng)工程方向的研究。