王 凱 李貴陽 應(yīng)文健
(1.海軍裝備部 西安 710043)(2.92721部隊 定海 316000)(3.海軍工程大學(xué)兵器工程系 武漢 430033)
基于Visio故障樹的艦炮故障診斷專家系統(tǒng)設(shè)計與實現(xiàn)
王 凱1李貴陽2應(yīng)文健3
(1.海軍裝備部 西安 710043)(2.92721部隊 定海 316000)(3.海軍工程大學(xué)兵器工程系 武漢 430033)
論文給出了一種基于Visio故障樹的故障診斷專家系統(tǒng)。首先介紹了Visio故障樹的信息結(jié)構(gòu);其次給出了使用C#軟件讀取Visio故障樹的方法,以及將故障樹轉(zhuǎn)化為規(guī)則庫的具體方法;然后研究了故障診斷規(guī)則庫的自學(xué)習(xí)方案。最后以某型艦炮為例進(jìn)行了應(yīng)用驗證,顯示效果良好。
故障診斷; 專家系統(tǒng); 故障樹; Visio
Class Number E92
當(dāng)前艦炮系統(tǒng)的故障診斷一般通過自動測試和專家系統(tǒng)來實現(xiàn)[1],而專家系統(tǒng)的診斷效果受限于知識庫的完備性、推理機(jī)制的高效性和專家系統(tǒng)的學(xué)習(xí)進(jìn)化能力等,國內(nèi)外在故障診斷專家系統(tǒng)領(lǐng)域已經(jīng)研究了很多年,并已有類似應(yīng)用,但同樣會受制于上述三個方面[1~5]。知識庫是專家系統(tǒng)的核心,知識庫的設(shè)計與建立是一個復(fù)雜的過程,涉及到知識的表示、使用和維護(hù),一個設(shè)計良好的知識庫對專家系統(tǒng)至關(guān)重要,不僅在開發(fā)和使用階段事半功倍,而且在專家系統(tǒng)的學(xué)習(xí)進(jìn)化方面可以取得良好效果[6~7]。知識庫的表述有Access、Orcal等形式,將故障現(xiàn)象、推理規(guī)則和故障點之間的因果關(guān)系直接以數(shù)據(jù)列表的形式展示出來,但可讀性差,后期維護(hù)是個問題[1,6]。而故障樹采用的是圖形的樹狀結(jié)構(gòu),直觀易懂,隨著故障樹建模自動化的實現(xiàn),效率顯著提高[7~8]。
本文為此給出了一種基于Visio故障樹的故障診斷專家系統(tǒng),該艦炮故障診斷專家系統(tǒng)使用C#編程軟件讀取Visio軟件編輯的故障樹,并將其轉(zhuǎn)化為故障診斷規(guī)則表,并研究了故障診斷專家系統(tǒng)的自學(xué)習(xí)方案,在實際應(yīng)用中收到良好效果。
2.1 Visio故障樹讀取分析
故障樹方法是進(jìn)行裝備故障診斷的一種常見有效方法。在進(jìn)行系統(tǒng)級故障分析時,由于系統(tǒng)組成部件較多,故障傳播機(jī)理復(fù)雜,往往要繪制并存儲大量故障樹。圖形化的故障樹能夠直觀清晰的反映故障的傳播方式以及故障事件之間的因果關(guān)系,它以圖形的方式描述了客觀世界中不同對象以及對象之間的關(guān)系,是客觀世界的一種抽象化的模型,具有直觀、簡便的優(yōu)點,在后期維護(hù)時也很方便[8]。本文采用了Visio軟件來繪制故障樹,Visio的繪圖控件可以編程方式驅(qū)動,利用 Visio生成的圖標(biāo)都保留了原有的信息,有利于故障診斷系統(tǒng)利用編程語言編寫程序遍歷故障樹流程圖。如圖1所示。

圖1 Visio故障樹示例
故障樹包含了知識庫和推理邏輯,分析讀取Visio故障樹,從而形成故障診斷規(guī)則庫。主要方法有樹—表轉(zhuǎn)換法和圖形屬性法等。由于樹—表轉(zhuǎn)換法需將故障樹先轉(zhuǎn)化為初始屬性表,進(jìn)而轉(zhuǎn)為規(guī)則表,過程較為繁瑣,且涉及相關(guān)坐標(biāo)計算,不太符合對象化操作,因此,本文采用了圖形屬性法。
圖形屬性法是一種直接獲取故障樹中的圖形對象并訪問圖形的各種屬性,并據(jù)此進(jìn)行邏輯判斷,按照既定順序遍歷整個故障樹的規(guī)則庫設(shè)計方法[9]。
1) 獲取Visio中的對象
安裝Visio SDK,利用封裝類包括應(yīng)用程序?qū)ο?CVisioApplication)、文檔對象(CVisioDocument)、頁面對象(CVisioPage)、形狀對象(CVisioShape)等獲取對象。 獲取了頁面或文檔對象后,便可調(diào)用其方法Shapes()訪問頁面(或文檔)中的形狀集合(CVisioShapes)。形狀集合表示頁面(或文檔)中的全部形狀。通過調(diào)用形狀集合類的方法Items(),用戶可遍歷集合中的所有形狀(CVisioShape)。
2) 分析形狀屬性
邏輯圖主要由兩類要素組成:一類代表客觀事物或節(jié)點;一類表示事件之間的關(guān)系。前者在圖形文件中以各種圖形來表示,如矩形、圓形或用戶自定義的各種復(fù)雜圖形;后者則以連接線的方式來表示。
前面所獲取的形狀中,既包括了表示各種對象的形狀,也包括了表示對象關(guān)系的連接線。獲得形狀的主控形狀后,利用其方法getName()可得到主控形狀的名稱。判斷其主控形狀的名稱是否為“動態(tài)連接線”則可判斷當(dāng)前形狀是對象或者對象間的關(guān)系。
3) 分析連接關(guān)系
要獲取邏輯圖中各對象之間的邏輯關(guān)系,需要對繪圖文件中形狀之間的連接進(jìn)行分析,找出其連接的是哪些形狀,并判斷連接的方向。用戶程序需要獲取Visio繪圖中的連接對象(CVisioConnect),利用其方法得到與之連接的形狀對象(CVisioShape)及連接的部位。所謂連接對象,可將其理解為Visio繪圖中的附著在形狀之上的連接點。
取得連接對象之后,利用其成員函數(shù)便可訪問該連接的相關(guān)信息, FromSheet()返回該連接點的連接線;ToSheet()返回連接點所依附的形狀。圖2中連接1的ToSheet()返回形狀 A,FromSheet()返回的是連接線 D;連接2的ToSheet()返回形狀 C,FromSheet()返回的是連接線D,其余依此類推。通過這些方法,可找出每一條連接線的名稱、方向以及連接的形狀。

圖2 形狀之間的連接
利用上述方法,可迅速地從Visio繪圖中找出所有連接線,并列出與每一條連接線相連接的形狀,讀取連接線的屬性(如名稱、方向等),這些正是邏輯圖中所描述的邏輯關(guān)系[3]。將其與前面所獲得的邏輯對象結(jié)合起來,以數(shù)據(jù)庫或表格的形式進(jìn)行保存,從而完成規(guī)則庫的設(shè)計。
2.2 規(guī)則庫的產(chǎn)生
規(guī)則庫的開發(fā)是故障診斷專家系統(tǒng)的核心,傳統(tǒng)的規(guī)則庫多數(shù)采用人工方式構(gòu)建,但隨著規(guī)則的日積月累,出現(xiàn)了諸如規(guī)則重疊、混淆和難以維護(hù)等問題,致使專家系統(tǒng)的推理中斷,出現(xiàn)死循環(huán),以至于釀成推理事故。因此,找到一種高效簡便的方法實現(xiàn)故障樹圖形與編程語言之間的相互轉(zhuǎn)換至關(guān)重要。
本文所采取的是一種基于圖形的建庫方案,其基本原理是通過軟件將表述規(guī)則庫的故障樹幾何圖形進(jìn)行拆分,然后再對幾何圖形屬性(參數(shù))進(jìn)行計算和文本抽取,進(jìn)而得到故障樹圖形之間的相互聯(lián)系,利用此聯(lián)系便可完成故障樹由圖形到數(shù)據(jù)的快速轉(zhuǎn)化,方便故障診斷軟件使用故障樹所存儲的信息。 顯然這種方式充分借助了幾何圖形能夠直觀地關(guān)聯(lián)規(guī)則的優(yōu)點,有利于通過軟件對故障樹直接進(jìn)行轉(zhuǎn)換操作。
1) Visio主要對象模型與引用
Visio主要的對象模型如圖3所示[10~11]。其中Documents表示在一個Application中打開的所有文檔的集合,Document表示一個打開的文檔;同理,Pages和Page分別表示頁面的集合和一個頁面。在圖3所示的對象中,Shape和Connect是較常用的兩個對象。Shape對象表示基本圖形、組合、輔助線或輔助點、鏈接或嵌入的對象;Connect對象表示繪圖中圖形的連接點。

圖3 Visio主要對象模型
若要獲得Shape、Connect等底層對象的引用,必須先獲得對象模型中較高級別對象的引用。例如,要想獲得某個 Shape對象的引用,首先要引用包含圖形的Page頁面,然后引用包含當(dāng)前頁面中所有圖形的Shapes集合,最后通過該圖形在集合中的索引、名稱或者唯一ID來從Shapes集合中引用該Shape對象。
2) 圖形連接關(guān)系原理分析
在Visio中,圖形的連接關(guān)系是通過Connect對象表示的。引用Connects集合對象有兩種方式,一種直接獲取當(dāng)前頁面的所有連接點集合;另一種則是通過形狀對象的FromConnects屬性來獲得該形狀上的連接點集合。
Connect對象的屬性可以返回圖形的連接關(guān)系。如ToSheet屬性與FromSheet屬性分別返回連接到的圖形與創(chuàng)建連接的圖形。FromPart屬性和ToPart屬性返回的是標(biāo)識連接在圖形中位置的整數(shù)常量。當(dāng)獲得Connect對象引用時,就可以利用上述屬性得到該連接點所連接的圖形,進(jìn)而得到圖形與圖形之間的邏輯聯(lián)系。
圖4共有兩個連接點l和2。當(dāng)獲得連接點1的Connect 對象引用后,通過Connect對象的ToSheet屬性與FromSheet 屬性可以返回矩形A與連接線C,通過Connect對象的 FromPart屬性和ToPart屬性可以得到連接點1位于連接線C 的上方,矩形A的下方,這樣就得到關(guān)系A(chǔ)—C;同理,通過連接點2可以得到關(guān)系C—B。從而可知關(guān)系A(chǔ)—B,即矩形A 與矩形B相連,且矩形A位于矩形B的下方[10]。

圖4 圖形連接關(guān)系分析
3) 讀取故障樹
本文圖1所示 Visio故障樹對應(yīng)的的Shape數(shù)據(jù)分析如表1所示。

表1 Shape數(shù)據(jù)分析
由上表可知,各形狀的name和style是有區(qū)別的,具體如下:
矩形: name進(jìn)程 style流程標(biāo)準(zhǔn)
圓角矩形:name圓角矩形 style基本
棱形: name判定 style流程標(biāo)準(zhǔn)
連接線: name動態(tài)連接線 style連接線
因此,可通過name來識別形狀類型,找到圓角矩形(事先定義為故障現(xiàn)象入口),并開始下一步。遇到判定時,給出用戶判斷選擇,然后進(jìn)入下一步。
有關(guān)Connect連接線問題,可通過在Visio中先對連接線標(biāo)識,如Y3、N3(見圖5),再利用shape.text來識別連接線。需要用到Fromsheet和Tosheet兩個屬性。 Fromsheet表示起始于連接線自身形狀,Tosheet表示終止于連接線目的形狀。
示例:

圖5 故障樹部分結(jié)構(gòu)示例
如圖5所示,可得出:
點A: Fromsheet = Y3 Tosheet = 判定條件3 對應(yīng)的形狀
點B: Fromsheet = Y3 Tosheet = 故障點3對應(yīng)的形狀
點C: Fromsheet = N3 Tosheet = 判定條件3 對應(yīng)的形狀
點D: Fromsheet = N3 Tosheet = 故障點4對應(yīng)的形狀
注意:shape.name無法對應(yīng),不能用于區(qū)分,所以改用shape.text匹配來確認(rèn)是哪一個形狀。
具體實現(xiàn)流程描述如下:
1) 先遍歷所有shape,以name是圓角矩形(故障現(xiàn)象)的圖形為流程入口;
2) 遍歷所有連接點,根據(jù)點的Fromsheet.Text和Tosheet.Name找到第一個判定條件;
3) 根據(jù)第一個判定條件,輸入“Y”或“N”,遍歷所有的連接點,根據(jù)點的Fromsheet.Text和Tosheet.Name找到下一個判定條件;
4) 如此往復(fù)循環(huán),逐步往下走,直至走到最后一個形狀,輸出最終故障點,結(jié)束程序運行,完成故障診斷。
2.3 自學(xué)習(xí)模塊
自學(xué)習(xí)模塊是指在裝備的使用與維護(hù)過程中,不可避免地將出現(xiàn)新的故障現(xiàn)象、原有的故障現(xiàn)象出現(xiàn)新的故障點等,如果診斷系統(tǒng)不具備學(xué)習(xí)能力,它就很難實現(xiàn)自我完善,一旦有了錯誤就會永遠(yuǎn)重復(fù)相同的錯誤,這樣的系統(tǒng)也不會有生命力。此時就需要故障診斷專家系統(tǒng)能夠支持知識的動態(tài)插入、刪除、編輯等操作,完善整個故障樹,從而完善整個故障診斷系統(tǒng)知識庫,使之愈加趨于完整與成熟,便于日后裝備故障的診斷更加地準(zhǔn)確與方便。通常可分兩種維護(hù)方式來實現(xiàn):人工維護(hù)和自動維護(hù)。其中,人工維護(hù)需要用戶直接對故障樹在Visio軟件中進(jìn)行刪除或添加等編輯,完善邏輯推理的操作,在后期集中維護(hù)中出現(xiàn)較多。而在日常使用中,更多地需要自動維護(hù)方式,比如增加新的故障點或刪減原有故障點等,就需要依賴程序?qū)收蠘溥M(jìn)行自動編輯,提高故障樹完善的自動化能力,也減少了人工維護(hù)工作量。
本文主要采取以下方式:程序會自動學(xué)習(xí)那些推理成功的歷史記錄,在后續(xù)遇到相似度較高的故障現(xiàn)象時(自動匹配),會將這些歷史推理結(jié)果同步呈現(xiàn)給艦員。程序會自動按照成功率從高到低來選取推理規(guī)則。如果是新的故障點,那么允許用戶輸入這個新的信息,并將其成功計數(shù)加一;如果是不需要的原本存在的故障點,那么允許用戶對其進(jìn)行刪除,同時刪除成功計數(shù);如果出現(xiàn)新的故障現(xiàn)象,那么由用戶創(chuàng)建新的故障樹并加入系統(tǒng)知識庫。
該方法的技術(shù)實現(xiàn)上主要是需要加入外界輸入信息和成功計數(shù),并反應(yīng)到故障樹中,涉及到故障樹的編輯。該方法既充分利用先驗知識,又提供了外界擴(kuò)充功能,并對高概率事件給予高度重視,長時間使用,可有效記憶歷史事件,提高了故障覆蓋率,提高了診斷準(zhǔn)確率。
本文以某型艦炮電氣系統(tǒng)的一些典型故障樹進(jìn)行應(yīng)用分析,測試了離線故障診斷和自學(xué)習(xí)模塊功能。
在對該算法的試驗中,本文總共進(jìn)行了21次、11個不同故障樹的運行試驗,沒有出現(xiàn)失敗案例。根據(jù)故障診斷結(jié)果可以得出,利用Visio軟件繪制的故障樹,利用本文所述方法可以遍歷整個故障樹,能根據(jù)實際情況作出相應(yīng)的推理,完成故障診斷。而當(dāng)有些故障現(xiàn)象對應(yīng)的某一故障點有多種可能時,每種可能在每次故障診斷中以不同的大小概率出現(xiàn)。以歷次故障診斷結(jié)果積累所獲得的某個故障點的概率大小,即診斷成功率,作為下次故障診斷時優(yōu)先選擇哪一個故障點進(jìn)行輸出的依據(jù),依次提高了診斷效率。在自學(xué)習(xí)模塊中,自動維護(hù)可以實現(xiàn)簡單的刪減和增加故障點操作,從而使故障樹逐漸得到完善;而通過人工維護(hù)方式則可直接在故障樹上進(jìn)行知識的動態(tài)插入、刪除與編輯等較為復(fù)雜的操作,但又是一種十分簡便易行的方法,可以在集中維護(hù)時進(jìn)行。
本文給出了一種基于Visio故障樹的故障診斷專家系統(tǒng),該艦炮故障診斷專家系統(tǒng)使用C#編程軟件讀取Visio軟件編輯的故障樹,并將其轉(zhuǎn)化為故障診斷規(guī)則表,并研究了故障診斷專家系統(tǒng)的自學(xué)習(xí)方案,對知識庫的構(gòu)建和專家系統(tǒng)學(xué)習(xí)完善等方面提出了可行方法,在實際應(yīng)用中收到良好效果。
[1] 王忠勇,張振興,段琳琳,等.基于故障樹的某型艦炮故障診斷系統(tǒng)的設(shè)計與實現(xiàn)[J].鄭州大學(xué)學(xué)報(工學(xué)版),2010,31(3):46-49.
[2] 訾超.基于故障樹的飛機(jī)故障診斷專家系統(tǒng)技術(shù)研究[D].鄭州:鄭州大學(xué)碩士學(xué)位論文,2015.
[3] 嚴(yán)軍.基于故障樹分析法的航空活塞發(fā)動機(jī)故障診斷專家系統(tǒng)研究[D].成都:電子科技大學(xué)碩士學(xué)位論文,2010.
[4] 郭偉偉.基于故障樹技術(shù)的遠(yuǎn)程故障診斷專家系統(tǒng)的研究[D].西安:西北工業(yè)大學(xué)碩士學(xué)位論文,2007.
[5] 段壯志,張宗強(qiáng),張成海.基于故障樹分析法的挖掘機(jī)故障診斷知識庫設(shè)計[J].長春工程學(xué)院學(xué)報(自然科學(xué)版),2012,13(1):119-122.
[6] 孫濤,李曉芳,石晨光等.基于本體的艦炮故障樹建模方法研究[J].艦船電子工程,2014(8):103-106.
[7] 陳珊琦.故障樹和事件樹建模與分析的關(guān)鍵算法研究[D].合肥:中國科技大學(xué)博士學(xué)位論文,2015.
[8] 張朋,冷杉,常青.基于Visio平臺的故障樹自動建模軟件開發(fā)[J].工業(yè)控制計算機(jī),2015,28(1):89-91.
[9] 趙怡,郭會兵.基于Visio的規(guī)則庫的設(shè)計與實現(xiàn)[J].電腦與信息技術(shù),2009,17(4):42-51.
[10] 劉強(qiáng),劉向君,馬旭勃.利用Visio二次開發(fā)實現(xiàn)邏輯圖自動分析[J].軟件導(dǎo)刊,2009,8(1):13-15.
[11] 王飛漩,魏清新,王坤明.基于Visio二次開發(fā)的故障樹存儲方法研究[J].計算機(jī)測量與控制,2013,21(9):2372-2374.
Design and Implementation of Naval Gun Fault Diagnosis Expert System Based on the Visio Fault Tree
WANG Kai1LI Guiyang2YING Wenjian3
(1. Department of Naval Equipment, Xi’an 710043)(2. No. 92721 Troops of PLA, Dinghai 316000) (3. Department of Weapon Engineering, Naval University of Engineering, Wuhan 430033)
This paper presents a fault diagnosis expert system based on Visio fault tree. First the Visio fault tree information structure is introduced. Second, a method using C# to read Visio fault tree is given, including the concrete method of fault tree into rule base. Then the fault diagnosis rule base of self-learning plan is analyzed. Finally, an example application verification is given, and the result is good.
fault diagnosis, expert system, fault tree, Visio
2016年7月3日,
2016年8月23日
王凱,男,工程師,研究方向:艦炮保障。李貴陽,男,助理工程師,研究方向:艦炮保障。應(yīng)文健,男,碩士研究生,講師,研究方向:艦炮測試。
E92
10.3969/j.issn.1672-9730.2017.01.026