摘 要: 針對機械設備的故障診斷" title="故障診斷">故障診斷,應用面向對象" title="面向對象">面向對象的方法和技術、簡化了復雜系統的設計,提高了知識的表達能力和診斷效率。
關鍵詞: 面向對象 建模 知識庫 消息傳遞 故障診斷
面向對象的方法作為一種新的程序設計" title="程序設計">程序設計思想和認知方法學引起了人們廣泛的重視。其基本特征有:信息隱蔽(或封裝)、數據抽象、動態鏈接和繼承。面向對象的程序具有模塊化、表達廣泛概念、默認值表達和代碼復用等特點。面向對象編程使系統軟件結構和空間中對問題的描述相一致,把對應于客觀存在實體的數據和作用于實體的過程包含在一個“對象”之內,從而使對象成為比數據和過程具有更高結構層次的計算實體[1]。
診斷是在對某一研究對象的目前所處狀態及其有關參數作出判決后,得到有益的信息,進而對所研究對象的運行情況作出正確與否的結論。對于復雜系統的診斷問題,診斷過程復雜,診斷知識多樣。而采用面向對象的技術、則可以使故障診斷系統" title="故障診斷系統">故障診斷系統具有良好的可擴充性和可重用性,便于從現實事物對象提取系統抽象模型,實現復雜系統的設計;并且有利于實現系統對故障知識進行層次表示和混合表達,提高系統故障診斷效率。可以說,面向對象的技術在故障診斷系統的設計及實現中得到了充分的體現。下面結合所研制的故障診斷系統對此作以描述。此系統由軟、硬件實現,主要是有目的地采集相關信息,用適當的分析方法提取有意義的特征;并應用診斷知識與合適的分析策略,分析出系統中故障的部位及原因,并加以定量描述;最后作出診斷決策和狀態預測,實現采用了面向對象的分析和編程方法。主要包括數據采集、信號分析、診斷對象建模、神經網絡建模、診斷等模塊。
1 面向對象的基本特征[1][3][5][6]
1.1 層次性
面向對象方法學認為對象都可由相對簡單的對象經層層組合而成,因此復雜對象可按其結構抽象分解關系組成層次結構,這樣可把復雜系統看成是一個由有限的結構元素按一定規律聚合而成的系統,系統的元素是子系統,子系統的元素可以是更深層次的子系統,如此類推,直至把元素表示為某一具體的物理零件。現以CE6140型車床的結構分解來說明這種層次結構,示意圖如圖1所示。同樣,復雜系統的故障也具有層次關系,這樣可深入到基本結構元素,找到引起故障的最終原因,如圖2所示。因此,基于機床這一復雜診斷對象的層次特性,可對其進行結構分解和故障分解,以逐步細化縮小故障范圍,降低診斷問題求解的復雜性,提高診斷的準確性和靈活性。
由于機械設備機構和故障的層次性與面向對象技術中的對象的繼承性和層次性相對應,因此設備診斷對象的構成適合采用面向對象的方法。在機械設備中,如果設備的元素或系統有故障,則所有包含這個元素的上級設備子系統直至設備本身也有故障。而當上一級設備元素有故障,則此故障必源于下一級相應的元素或聯系的故障[2]。
1.2 類和實例
在面向對象方法學中,所有對象都是類的實例。對象類是建立在對象概念基礎上,由類所描述的對象即稱為類的實例。類是實例的模板,也是數據的抽象;實例是類的一個個體。設備的基本元件有齒輪、軸、軸承等。可分別設計類,包含其屬性描述和功能描述。如齒輪類聲明如下:
TGearTool:public TBoxTool { //從TboxTool繼承
public:
TGearTool():TBoxTool(″″);
TGearTool(char* name):TBoxTool(name); //運用多態性技術
~TGearTool(); //析構函數
virtual void DrawObject(TDC&); //畫齒輪
bool operator ==(const TGearTool& other) const;
GearParam gearparam; //齒輪屬性
protected:
friend ostream& operator <<(ostream& os、 const TGearTool& tool); //運用流類的輸入來保存永久對象
friend istream& operator>>(istream&is、TGearTool& tool); //運用流類的輸出打開永久對象
......
};
類與類之間的繼承關系也即子類-父類的關系。上面三個類分別從零部件類Component繼承特性,因為齒輪、軸、軸承等可進一步抽取其共性如型號、材料、特征故障頻率等,形成零部件類。齒輪類、軸類等也可進一步派生其它類,如圖3所示。
在軟件系統中,這種面向對象程序設計提供的繼承機制,可以避免對象的數據和操作的大量重復,實現代碼重用,大大地減少了對象、對象類的創建工作量。這種繼承性使所建的軟件系統具有開放性,要建立的系統并非從空白開始,而是盡可能利用已建立的系統或已建立的類,以它們為基礎進行擴充,考慮向上或向下的接口方法[3]。
1.3 消息傳遞
對象間除了通過消息傳遞完成通信外,不再有任何其它的聯系。消息中可以包含運算參數,也可有對象名。向某對象發送消息就是要求它根據目前狀態和處理能力執行某個操作。在消息傳遞過程中,消息發送者只是知道消息接受者具有某種功能,而不知道它的內部結構以及如何實現這種功能,從而支撐了數據的抽象和封裝。診斷系統,主要由齒輪、軸、軸承等零部件對象通過一定的傳動關系有序組成,當此傳動鏈上的某根軸接受到賦予其轉速的消息時,則根據對象內所提供的操作計算出該軸的特征頻率,同時發送消息給此傳動鏈上相關對象。這些對象接受到消息后,分別在其內部根據一定的傳動信息計算出對象的特征頻率。診斷過程也是用消息來觸發,例如對于齒輪故障診斷,當齒輪對象接受到其它對象所發出的診斷消息時,它會根據其當時的狀態如故障特征頻率、故障特征頻率處的相對幅值比、歸一化值等信息,發送消息給相應的模糊神經網絡" title="模糊神經網絡">模糊神經網絡自動進行推理、診斷,而不需要外部的干涉,并且其它對象也不知道它的內部實現過程。對象間的發送消息實現了機械設備的診斷,如圖4所示,圖中FNN(Fuzzy Neural Network)表示模糊神經網絡模型。
2 知識的面向對象表示
復雜系統診斷問題求解中涉及到的診斷知識很多,不僅包括診斷對象的結構與功能方面的知識,還包括各種因果知識、啟發性知識經驗等,因此需把各種知識有機地結合起來。面向對象的方法可以將故障診斷知識組成一種混合知識表達形式,即以對象為中心,將對象的屬性動態行為特征、相關領域知識庫和處理方法等有關知識封裝在表達對象的結構中,使故障診斷知識庫或文檔具有良好的體系結構;通過對象類的知識表達,實現數據抽象與信息共享。
2.1 機械設備的面向對象表示
由前面敘述可知,診斷對象可分離出各個零部件對象,同時以對象的形式寫出其功能描述和行為描述。每個對象以知識的載體獨立于其它對象,每個子對象可寫出其功能和結構接口描述,以便零部件對象出現在某一特定子對象中,建立與其它零部件對象的功能和接口聯系。診斷對象的知識庫可由這些零部件知識對象有機地“堆”在一起組成,我們所開發的面向對象的“機械設備建模工具”把此特性提高到了新的高度。工程師可方便地根據機械設備的傳動關系,利用系統所提供的軸、軸承、齒輪、離合器等建模工具方便地作出設備的機械構造示意圖,并可通過友好的人機接口賦予零部件對象一定的信息,如軸承滾動體的個數、接觸角、節徑等。此診斷對象可方便地修改、查詢,當此傳動鏈上的任意一根軸被賦予一定的轉速后,診斷對象能根據對象間的消息傳遞自動搜索其傳動鏈關系并計算工作頻率等參數,搜索后的信息保存在各零部件對象中。診斷設備的面向對象的知識表示和建模方法增加了知識的可重用性和通用性,減輕了工作人員的計算任務。
2.2 診斷知識的面向對象表示
不同零部件對象的故障模式對應不同的故障文檔庫,為此可分別對軸、軸承、齒輪、離合器等建立故障文檔庫,文檔庫的知識應可方便地修改、增加、刪除等。每個文檔庫包含的知識可分為兩部分,一部分為故障知識的模糊規則表示;另一部分為儲存模糊診斷知識的神經網絡。之所以用神經網絡來儲存模糊規則,是因為神經網絡的學習機制可對原有規則進行修改、加入新規則、對修改的規則和新加入的規則進行檢查等,且可避免在模糊推理過程中增加模糊性的缺點。在具體實現中,可采用五層FNN保存診斷知識,用神經網絡實現模糊推理[7];而模糊規則則用網絡的節點對象、連接權對象、連接結構等來翻譯解釋。網絡對象可由開發的“神經網絡建模工具”來實現,根據不同的故障規則知識表示可建立不同的網絡對象。
對于具體網絡,可通過網絡對象所提供的初始化方法完成信息的搜尋,如:網絡的最大層數,網絡的輸入節點、輸出節點及隱層節點,每個節點對應的網絡層號,與每個節點相連的前層所有的節點、連線,與每個節點相連的下一層所有的節點、連線,以及每個節點對象的所選函數、閾值等。所以網絡的節點對象和連線對象通過初始化根據不同的診斷知識保存了不同的信息。這符合面向對象的知識表達,即以對象為中心,包含與其相關的完成特定任務的所有知識。
3 面向對象的診斷推理
面向對象的表達機制在診斷推理中起著重要的作用,因為面向對象表達的結構特征有助于有效地組織和控制推理行為,同時其本身具有自動推理機制[2]。診斷推理過程以五層模糊神經網絡為例。它能根據網絡中各個輸入節點對象的輸入值、閾值、輸入輸出函數,連線對象的權值,隱層節點對象的輸入值、閾值、輸入輸出函數等一層層地前向推理,最終得到輸出節點對象所存儲的診斷值,如圖5所示。之所以能自動地前向推理,是因為每層的節點對象及連線對象不僅存儲了一定的故障規則知識,還存儲了對象間的接口連接信息。這種診斷推理算法迅速、可靠。它不僅僅適用于某一特定網絡,而且適用于其它具體網絡,網絡的層數及節點函數等網絡信息均未定死。前面提到的網絡對象的建模使它可對故障知識的更新適應得非常快,而故障知識的及時更新又保證了診斷的可靠、準確。所以這種面向對象的診斷推理方法可用于動態變化的系統,系統變化時,只要非常簡單地操作即可更新故障信息。因此,當設備故障發生時,診斷網絡會用最新的信息去進行診斷工作。
4 多態性及動態鏈接
多態性指相同的操作(或函數、過程)為不同的對象所接受時,可導致不同的行為,即同一操作有不同的實現方法。主要表現在:運算符重載、虛函數與動態鏈接。在圖3所示的零部件類中,有一個畫圖函數 DrawObject()就應用了多態性技術,它能根據不同的對象執行不同的動作。其聲明如下:
class Parts{
......
virtual void DrawObject(){}
};
齒輪類的聲名為:
class Gear:public parts{
......
virtual void DrawObject(){ DrawGear();}
};
可以看出零部件類的DrawObject()函數什么也沒有做,但是當用齒輪來產生一個具體對象時,則調用零部件類的DrawObject()函數,它能根據具體對象作出齒輪圖形。也就是當這個基類Parts接受到圖形消息時,能根據不同的具體對象如齒輪、軸承等調用不同的方法作出合適的動作,畫出齒輪、軸承等不同的圖形。動態鏈接主要指調用操作的機制。由于面向對象的程序設計中所有操作都與某個對象有關,因此可以在程序執行時根據對象特性具體確定操作。采用動態鏈接使程序設計具有良好的靈活性,程序段的功能可進行單純的功能增減,而不必修改原有的程序。
參考文獻
1 朱海濱.面向對象技術-原理與設計.國防科技大學出版社,1992
2 楊叔子.基于知識的診斷推理.北京:清華大學出版社,1992
3 殷人昆.實用面向對象軟件工程教程.北京:電子工業出版社,1998.6
4 周志國.Borland C++Object Windows程序設計.北京:北京航空航天大學出版社,1995
5 Grapham I. Object-Oriented Methods.Addison-Wesley Publishing Co,U.k.,1992
6 Alex ByKat. Intelligent Monitoring and Diagnosis Systems.Applied Artifical Intelligence ,1991.5
7 方 敏.基于模糊神經網絡的機械故障診斷方法的研究.控制理論與應用、1998(3)