宛偉健,黃志球,沈國華,尹小花
(南京航空航天大學計算機科學與技術學院,南京211106)
(南京航空航天大學高安全系統的軟件開發與驗證技術工業和信息化部重點實驗室,南京211106)
E-mail:wanweijianxs@163.com
隨著現代科學技術的不斷發展,出現了大量多功能的復雜系統.復雜系統有軟硬件結合和能執行多種功能任務的特性.大規模的復雜系統給人們帶來巨大的經濟利益,但是一旦出現故障則需要及時將故障排除,否則就會造成重大損失.FTA作為經典的安全性分析方法,被廣泛應用于不同的領域[1-5],在系統實現過程中加強設備的可靠性設計以及在后期系統運用中實現故障的全面診斷、快速排查和維護具有重要意義.然而,傳統故障樹通常基于分析師的經驗建立,需要徹底了解系統功能原理并正確轉化為布爾邏輯,對于簡單系統,可以通過手動構建故障樹,但是隨著系統復雜度的提升,人工方式已基本無法構造和修改故障樹[6].
GO法[7-9](GO Method)最早于60年代中期由凱曼科學公司(Kaman Sciences Corporation)開發出來,應用于國防和航天工業領域,它應用GO圖模型來計算系統的可靠性和可用性,適用于有時序和實際物流的系統可靠性分析,由于其與系統功能原理圖的相似性,通常易于構建[10],且原理圖中的構件與GO圖的操作符之間常常有非常明顯的一一對應關系,不會變得像故障樹模型那樣十分膨脹[11].基于GO圖的故障樹生成技術為解決大型復雜系統故障樹生成問題提供了一種新思路.本文基于GO圖,提出一種故障樹的自動生成方法,首先,定義操作符到故障樹節點的語義映射規則;然后,根據定義的語義映射規則,提出一個GO圖到故障樹的自動轉換算法,并對生成的故障樹進行簡化,刪除冗余的邏輯門.最后通過一個數控機床液壓系統案例說明轉換的詳細過程,并分別與手工構建的故障樹進行定性分析,通過定性分析的結果對比,發現該故障樹與手工建立故障樹邏輯相同,驗證了該方法的正確性與可行性,為大型復雜系統的故障樹自動構建方法提供了一種新思路.
本文章節安排如下:第二部分介紹由GO圖自動生成故障樹的步驟以及GO圖理論;第三部分詳細介紹了GO圖到故障樹的自動生成方法,主要包括操作符到故障樹節點的語義映射規則、GO圖到原始故障樹的轉換和對原始故障樹的化簡;第四部分通過對數控機床液壓系統的故障樹自動構建案例分析驗證了所提方法的合理性;第五部分為相關工作對比,最后為總結與展望.
基于GO圖生成故障樹的研究較少,本文通過定義被工業界廣泛應用的操作符到故障樹的映射規則,并提出自動轉換算法,實現自動化轉換.由GO圖導出故障樹的方法主要包括三步驟,如圖1所示,分別為建立操作符到故障樹節點的語義映射規則、根據自動轉換算法生成原始故障樹和原始故障樹的化簡,刪除冗余的邏輯門.

圖1 由GO圖自動生成故障樹的步驟Fig.1 Steps to automatically generate a fault tree from a GO map
GO方法作為一種以輸出成功為導向的系統概率分析技術,適用于對具有多態和時序特征的復雜系統進行建模,特別是對具有流動或過程的系統(例如液體流動、電流和氣流等)[12].用GO方法對復雜系統進行建模,即生成GO圖,GO圖由操作符和信號組成:操作符描述系統中的功能部件;信號描述功能部件間的實際物流或信號.GO圖是通過將系統原理框圖或電路圖等模型中的功能部件和物流、信號按照規則轉換為操作符和信號獲得,人為因素的影響較小.
GO圖共有17種操作符,可分為功能操作符和邏輯操作符.邏輯操作符表示不包括任何自身狀態的邏輯運算,功能操作符不僅表示邏輯關系,還包括自身狀態.在GO圖的17種邏輯操作符中,類型1,2,3,5,6,10、11 和 15 被廣泛應用于實際工程中[13].其中類型 1、3、5、6 為功能操作符,類型 2、10、11、15為邏輯操作符.本文對上述被廣泛應用于實際工程中的操作符進行分析,定義操作符到故障樹節點的映射規則,操作符類型7、8、16、17表達的邏輯含義可以通過上述操作符組合表達,生成相應的故障樹節點,其他5類操作符無法直接的定義其到故障樹節點的語義映射規則,且由于其在工業實踐中并不常見,本文將不再贅述.
操作符類型1是一個兩狀態單元,具有一個輸入和兩個操作狀態(成功或失效);類型2是包含N個輸入信號的邏輯OR門;類型3是一個觸發生成器,有三個輸入:過早、成功、失效;類型5是信號發生器;類型6代表有信號而導通的元件,表示當次級致動信號到來且主輸入信號同時存在時產生輸出[7`];類型10是包含N個輸入信號的AND門;類型11用來對N個單元中有K個發生的情況進行建模;類型15是數值/概率門,根據輸入的值來控制輸出.本文考慮的GO圖到故障樹的轉換中,生成的故障樹基本事件只有成功和失效兩種情況,且不考慮修復和時間延遲屬性.
本節主要介紹如何從GO圖自動生成故障樹,根據圖1可知,基于GO圖的故障樹生成方法可分為三個步驟進行描述,本節將分三小節展開,每小節對應一個步驟進行詳細描述.
本文對工業界中被廣泛應用的操作符類型1、2、3、5、6、10、11和15定義語義映射規則.如前文所述,將上述操作符進行分類,并分別定義語義映射規則.其中類型1、3、5、6為功能操作符,其余均為邏輯操作符.本文僅考慮故障樹事件具有工作(成功)和失效兩種狀態,且事件不可修復.
3.1.1 功能操作符的映射規則
功能操作符的映射規則包括圖形轉換和數據轉換.在故障樹分析中只考慮事件的故障狀態,因此,對于生成的故障樹基本事件,我們只選擇功能運算符的故障狀態(SF,StateFail)進行分析.
1)對于操作符類型1,輸入信號的狀態表示為:S∈(0,1,…,N),操作符自身的狀態表示為:C∈(1,2),輸出信號的狀態表示為:R∈(0,1,…,N).在GO方法中,每個狀態的最大值表示故障狀態,因此,當S為狀態N時,表示輸入信號為故障狀態,我們用SF表示,同理,我們用CF和RF分別表示操作符自身和輸出信號的故障狀態.所以對應于故障樹邏輯,操作符類型1到故障樹節點的映射規則如圖2(a)所示,當輸入信號處于狀態SF或者操作符本身處于狀態CF時,輸出信號將會處于故障狀態RF,即RF=SF∨CF.
2)操作符類型3與操作符類型1類似,不同之處在于操作符自身狀態數量,操作符類型3自身狀態包含預定義狀態,其故障機理與操作符類型1相同,輸入信號的狀態為:S∈(0,1,…,N),操作符自身的狀態為:C∈(0,1,2),輸出信號的狀態為:R∈(0,1,…,N).與故障樹對應的故障機理為:當輸入信號處于狀態SF或者操作符本身處于狀態CF時,輸出信號處于故障狀態RF,即RF=SF∨CF,映射規則如圖2(b)所示.
3)操作符5是GO圖的起始運算符,操作符自身狀態包含N 個狀態,可表示為:C∈(0,1,…,N),輸出信號表示為:R∈(0,1,…,N).用CF代表操作符本身的故障狀態,RF表示輸出信號的故障狀態,其映射規則如圖2(c)所示,即RF=CF.
4)操作符6通常用于模擬輸出只能由兩個輸入信號觸發的特定組件.兩個輸入信號分別記為{S1,S2},它們的狀態值相同,記為 Si∈(0,1,…,N)(i=1,2),操作符自身狀態為:C∈(0,1,2),輸出信號狀態為:R∈(0,1,…,N).由于輸入信號的數量不為1,所以將輸入信號的故障狀態記為:SiF(i=1,2),CF代表操作符本身的故障狀態,RF表示輸出信號的故障狀態.操作符6的映射規則如圖2(d)所示,其故障機理為:當輸入信號中的任意一個處于故障狀態,或者操作符自身處于故障狀態,將會導致輸出信號處于故障狀態,可表示為:RF=S1F∨S2F∨CF.

圖2 操作符的映射規則Fig.2 Mapping rule of operator
3.1.2 邏輯操作符的映射規則
GO圖是面向成功的模型,而故障樹是面向故障的模型,因此,邏輯OR和邏輯AND在轉換過程中要做相應的轉換.以下分別介紹邏輯操作符2、10、11和15的語義映射規則.
1)操作符類型2是OR門,將其轉換成對應的故障樹AND門,輸入信號代表相應的AND門的輸入事件.其映射規則如圖2(e)所示.
2)操作符類型10是AND門,相應的將其轉換成故障樹的OR門,輸入信號對應OR門的輸入事件.映射規則如圖2(f)所示.
3)操作符類型11是選舉門,當K=M時,可以將其裝換成對應的故障樹選舉門,且故障樹選舉門的K=N-M+1,相似地,輸入信號對應故障樹選舉門地輸入事件.映射規則如圖2(g)所示.
4)操作符類型15是限制概率門,根據其構造原理,當輸入信號不處于故障狀態時,輸出信號為故障狀態,可以對應的將其映射到故障樹非門,同樣地,用SF表示輸入信號的故障狀態,用RF表示輸出信號的故障狀態,映射規則如圖2(h)所示.
根據定義好的語義映射規則,提出一個GO圖到故障樹的自動轉換算法,完成GO圖到故障樹的自動轉換.
GO圖由操作符和邊組成,可以將其形式化表示為如下二元組:G=(V,E),其中操作符用節點來表示,所以GO圖中所有操作符可表示為節點集合如下:V={v1,v2,…,vn},表示該GO圖中共有n個操作符.操作符之間通過邊表示,GO圖中邊集定義如下:E={e1,e2,…,em},表示圖中共有m條邊.
由于GO圖通常基于流的方式對系統建模,因此,GO圖是個有向無環連通圖.可以根據GO圖是有向無環圖的性質,利用反向推理的方式,從終節點開始,逆著邊的傳播方向,提出自動轉換算法,逐步將整個GO圖轉換成故障樹.轉換算法思想可分為以下3個步驟實現:
步驟1.從終節點vj處開始,調用負責根據映射規則將終結點操作符節點轉換成相應的故障樹節點的子函數,實現終節點vj到對應故障樹節點的轉換;
步驟2.然后根據邊的傳遞關系,找到指向節點vj的相鄰節點vi(0≤i<n),調用轉換子函數,實現該節點到對應故障樹節點的轉換,并將節點vi存入輔助棧Stack中;重復執行步驟2,直到vi為空,即找到所有的相鄰節點.實現所有鄰接節點的轉換并將所有鄰接結點存入輔助棧Stack中,跳轉到步驟3;
步驟3.對輔助棧Stack做出棧操作,出棧節點記為vk,并令vj=vk,執行步驟2;若Statck為空,則結束程序.
至此完成對GO圖所有的節點的轉換,生成相應的原始故障樹.
具體的算法設計如下,首先對GO圖進行預處理操作,GO圖中每個操作符節點作為一個類,包含結點編號v.number和節點類型v.type,若節點為功能操作符,則還應包含節點自身狀態v.item;然后將所有邊通過 Map集合存儲,即Map<vstart,vend>.然而,Map集合中鍵值不能重復存儲,但是在GO圖中存在一個節點指向多個節點的情況,所以通過重寫hasCode()方法和equals()方法實現一個節點指向多個節點情況的邊存儲.并將單個節點轉換成對應故障樹節點單獨封裝成一個函數,可以根據輸入操作符節點的類型完成相應轉換.具體算法如下:


算法1中,根據輸入GO圖、邊存儲Map集合和GO圖終結節點,調用CreatTree創建整棵故障樹的根節點,然后調用CreatSubTree創建該根節點的子節點,依次從根節點向下生成子節點.
算法2中,根據傳入的邊集合Map和根節點生成子故障樹.利用輔助棧S幫助完成遍歷,每遍歷到一個父節點相連的相鄰子節點,根據映射規則將其轉換成相應的故障節點,并壓入棧S中存儲,待該父節點所有的相鄰子節點轉換完成后,出棧并重新調用該函數,繼續遍歷GO圖,當輔助棧S為空時表示已經遍歷完連通有向圖GO圖的所有節點,完成GO圖到故障樹的轉換.該算法為遞歸算法,依據頂事件到初始結點的個數N,最大分叉數為K,該遞歸函數的最大時間復雜度為O(n).
使用上述自動轉換算法生成的故障樹中會存在大量的冗余邏輯門,將其稱為原始故障樹,如圖6(a)所示.因此,需要在不改變邏輯關系的基礎上簡化原始故障樹,刪除冗余的邏輯門.主要采取壓縮規則,把緊隨其后相同類別的邏輯門壓縮成一個單獨的邏輯門,獲得AND門和OR門交替序列的結構.如圖3所示.

圖3 壓縮原則示例Fig.3 Example of compression principle
本章針對文獻[14]中機床液壓系統案例進行分析,詳細說明GO圖到故障樹的轉換,并對生成的故障樹進行化簡,最后與文獻[14]中的故障樹模型進行對比,通過定性分析,由所求割集相同,可見GO圖自動生成的故障樹與手動建立得到的故障樹等效,驗證了該文所提方法的正確性與可靠性行.
文獻[14]首先根據故障樹原理和方法,通過逐層深入分析頂事件、中間事件、底事件,通過手工建樹的方式建立某加工中心機床液壓系統的故障樹模型,如圖4所示.其中各個符號表示的事件含義為:T為機床液壓系統故障;H1為機床液壓系統壓力不足;H2為機床液壓系統流量不穩定;H3為溢流閥調壓錯誤或磨損;H4為油箱缺油;H5為液壓缸、閥、管接頭、壓力連接頭等密封元件損壞導致的泄露;H6為泵故障;H7為閥節流口磨損;H8為過濾網、閥和管道堵塞;H9為流量調整閥或方向閥故障;H10為過濾網堵塞;H11為閥或管道杜塞;X1為液壓油有固體顆粒或不干凈;X2為人為錯誤;X3為郵箱漏油;X4為人為錯誤;X5為液壓油有固體顆粒導致的磨損;X6為油冷裝置故障;X7為液壓油生化腐蝕金屬壁;X8為壓力過大損壞密封件;X9為泵疲勞損壞,X10為電氣接線錯誤;X11為液壓油有固體顆粒磨損;X12為液壓油不干凈;X13為過濾網時間過長未更換;X14為液壓油流速過慢;X15為液壓油有雜質;X16為銹蝕或固體顆粒卡死;X17為電氣系統故障;X18為人為錯誤.

圖4 某加工中心機床液壓系統故障樹Fig.4 Hydraulic system fault tree of a machining center
根據文獻[14],機床液壓系統的GO圖如圖5所示,可以看出機床液壓系統GO圖包含三種基本類型的操作符,分別為操作符類型2或門操作符,操作符類型5信號發生器操作符和操作符類型10與門操作符.利用算法1和算法2可以將該GO圖自動化生成對應的機床液壓系統故障樹,先對GO圖進行預處理,將GO圖中所有的邊存儲到Map<vstart,vend>(0<start<28,1<end<29)中,并初始化輔助棧 Stack,其具體生成過程如下:
步驟1.首先從終點操作符10-10開始,將操作符10-10記為vj=v10-10,調用算法1,初始化故障樹生成的頂事件T和其相連的邏輯門,根據映射規則,操作符10-10對應于故障樹的OR門,OR門名稱記為10-10;
步驟2.然后調用算法2,利用反向推理的方式,遍歷Map中所有的邊,找到vend=v10-10的邊,并將對應的vstart節點轉換成相應的故障樹節點,然后將其壓入輔助棧Statck中,本例中遍歷Map發現v10-8、v10-9指向v10-10節點,所以根據轉換規則將v10-8、v10-9轉換成相應的故障樹節點,分別將v10-8、v10-9轉換成OR門,且分別將兩個OR門記為10-8、10-9,然后將操作符節點v10-8、v10-9壓入輔助棧,然后判斷是否已經將所有與vend=v10-10相連的vstart節點壓棧,如果已經全部壓入棧,則轉向步驟3;否則,繼續遍歷,直到將所有與vend=v10-10相連的vstart節點壓入輔助棧Stack中;

圖5 機床液壓系統GO圖Fig.5 Machine tool hydraulic system GO map
步驟3.將輔助棧棧頂元素vk出棧,并令vj=vk,該例中,首先將v10-8出棧,令vj=v10-8,然后重復執行步驟2,遍歷Map中所有的邊,找出所有與vend=v10-8節點對應的vstart節點,根據轉換規則將其轉換成對應的故障樹節點,本例中,可以找到所有與 vend=v10-8節點相連的節點為 v10-1、v10-2、v10-3、v10-4,根據轉換規則,都是類型10的操作符,分別將其轉換成OR門,記為 10-1、10-2、10-3、10-4,然后都壓入輔助棧 Stack 中;若此時輔助棧Stack為空,則生成過程結束,完成GO圖到故障樹的轉換,否則,重復步驟3;
通過執行上述三個步驟,可以生成機床液壓系統的原始故障樹如圖6(a)所示,再通過壓縮規則約減冗余的邏輯門可以得到化簡后的故障樹如圖6(b)所示.
對圖6(b)所示故障樹進行定性分析,采用下行法,即Fuseell-vesely 算法[15]進行分析,易得最小割集為:{C1}、{C2}、{C3}、{C4}、{C5}、{C6}、{C7}、{C8}、{C9}、{C10}、{C11}、{C12,C13}、{C14,C15}、{C16}、{C7}、{C8},對圖4所示故障樹進行定性分析,得到其最小割集為{X1}、{X2}、{X3}、{X4}、{X5}、{X6}、{X7}、{X8}、{X9}、{X10}、{X11}、{X12,X13}、{X14,X15}、{X16}、{X7}、{X8},其中Xi與Ci代表的事件含義相同,故兩個故障樹最小割集相同,即由GO圖自動生成化簡后的故障樹與普通FTA法得到的故障樹等效.驗證了該方法的正確性和可行性.

圖6 基于GO圖自動生成的故障樹((a)未化簡的原始故障樹;(b)化簡后的故障樹)Fig.6 Fault tree automatically generated based on GO map
故障樹的自動生成技術一直是基于故障樹的系統安全性與可靠性分析領域的研究熱點之一,文獻[16]基于已經建立的矩陣模型開發了一種生成故障樹的方法,該方法提高了初步故障樹分析的效率,但是矩陣模型的建立較為復雜;文獻[17]利用Altarica模型生成故障樹,Altarica模型在設計中自帶故障信息,但是該方法沒有轉換規則,需要手工配置實現故障樹的生成.文獻[18]提出利用UML順序圖、用例圖和結構圖生成故障樹,輸入UML結構行為信息,利用混合的轉換語言ATL實現故障樹的生成,但是轉換語言的實現比較復雜.因此,上述故障樹構建方法,要么構建過程復雜、不能實現完全的自動化構建,要么生成故障樹時基于的模型建立過程復雜.眾所周知,GO圖直接從系統原理圖、流程圖或工程圖中建立,與系統原理具有很高的相似性,可以很容易的構建GO模型,而且GO圖是以輸出成功為導向的系統可靠性分析技術,其操作符可以和故障樹節點相互映射,可以實現基于GO圖的完全自動化的故障樹生成.但是,基于GO模型的故障樹自動生成方法研究很少,文獻[10]提出了部分GO圖操作符到故障樹節點的映射規則,但對有些被廣泛應用于工程中的操作符并未描述,例如操作符類型11和類型15,且未提出GO圖到故障樹的自動轉換算法,對生成原始故障樹的化簡規則也沒有進行描述.文獻[13]定義了工業界常用的操作符到故障樹節點的轉換,但是并未提出明確的自動轉換算法且對生成的案例并未進行正確性驗證.本文重新定義被廣泛應用于實際工程中的操作符到故障樹的語義映射規則,并提出自動轉換算法,實現GO圖到故障樹的自動化轉換,且明確了故障樹的約減規則,最后通過機床液壓系統案例分析并驗證了該方法的合理性和有效性.
本文所提的基于GO圖的故障樹自動生成方法規范并簡化了故障樹的建立過程.該方法以GO圖模型為出發點,減弱了建樹過程中人為因素的影響,定義了GO圖操作符到故障樹節點的映射規則,并提出了一套自動轉換算法,將FTA和GO法結合在一起,增強了對系統可靠性的分析能力;同時解決了針對大型復雜系統的故障樹建模,傳統基于手工構建的方式存在的建模周期長且對建模者要求較高、容易發生遺漏和錯誤等問題.機床液壓系統的例子表明由GO圖自動生成的故障樹與傳統方法構建的故障樹在邏輯上等效,驗證了該方法的正確性與可行性.本文通過清晰的步驟來說明該方法,這有助于在計算機上實現該文所提方法,本文未來的工作主要集中在設計完善相應的工具,將所提方法融入工具中.
但是本文只針對工業界中常用的8種GO圖操作符定義其到故障樹的語義映射規則,其余9種操作符,操作符類型7、8、16、17可以通過已經論述的8種操作符進行組合表達,但是另外5種操作符無法直接定義其到故障樹節點的語義映射規則,本文的未來工作將對此繼續進行研究,完成所有GO圖操作符到故障樹節點的轉換.