張德慧
(沈陽理工大學信息科學與工程學院,遼寧 沈陽 110168)
目前,網(wǎng)絡(luò)故障診斷系統(tǒng)過分依賴于監(jiān)控中心和被監(jiān)控實體,尤其是占用了監(jiān)控中心和被監(jiān)控實體大量的CPU時間、內(nèi)存和帶寬等資源,且系統(tǒng)可靠性、抗毀性、靈活性低。當被監(jiān)控實體尤其是計算機等發(fā)生操作系統(tǒng)或硬件故障時,故障征兆采集和診斷變得非常困難。此時,無法滿足智能故障監(jiān)控和診斷的需求。針對以上弊端,本文采用嵌入式[1]PCI板卡取代實現(xiàn)相關(guān)功能的服務(wù)器主機,配置在網(wǎng)絡(luò)節(jié)點計算機上,并接入網(wǎng)絡(luò)實現(xiàn)對遠程設(shè)備進行及時故障診斷和控制。
網(wǎng)絡(luò)中的硬件設(shè)備、網(wǎng)絡(luò)軟件、應用軟件、節(jié)點計算機及其在不同節(jié)點之間的組合是千變?nèi)f化的,尤其是一個節(jié)點的故障可能會影響到其他多個節(jié)點的正常工作,或在其他多個節(jié)點表現(xiàn)出來,從而使得網(wǎng)絡(luò)故障診斷變得非常復雜?;谥R的故障診斷方法不需要對象的精確數(shù)學模型,是一種很有生命力的方法[2]。專家系統(tǒng)是人工智能領(lǐng)域最活躍、最重要的一個分支,它利用專家知識和推理,模擬專家的決策活動來解決只有專家才能解決的問題。它具有高效性、靈活性、交互性和學習性等優(yōu)點[3]。
本文結(jié)合嵌入式系統(tǒng)和專家系統(tǒng)的優(yōu)點,開發(fā)了一個基于CLIPS的分布式網(wǎng)絡(luò)故障診斷專家系統(tǒng),移植到嵌入式故障診斷卡上,配置到網(wǎng)絡(luò)計算機節(jié)點中,對網(wǎng)絡(luò)故障進行實時診斷和控制。
由給定網(wǎng)絡(luò)的特點,故障診斷系統(tǒng)采用分層分布式多域的體系結(jié)構(gòu),如圖1所示。其中診斷卡是一個基于ARM-Linux開發(fā)的帶有PCI插槽的嵌入式故障診斷系統(tǒng)。對每一個計算機節(jié)點通過PCI插槽接入一個嵌入式故障診斷系統(tǒng),對計算機及其相關(guān)的鏈路和網(wǎng)絡(luò)設(shè)備進行數(shù)據(jù)采集、故障診斷和控制。按空間位置優(yōu)先將網(wǎng)絡(luò)節(jié)點劃分為域,每個域中選舉一個診斷卡上的系統(tǒng)作為域首,負責域內(nèi)的故障診斷和域間故障協(xié)同診斷。每一個域相對于其上級域來是等同于一個節(jié)點,故上級域?qū)ο录売蛴性\斷和控制功能。其他診斷卡上非域首系統(tǒng)只負責數(shù)據(jù)采集域和協(xié)同。
知識表示的設(shè)計直接關(guān)系到專家系統(tǒng)的效能,如何表示和管理知識以便能被專家系統(tǒng)最好地利用是知識工程中的關(guān)鍵問題。
結(jié)合網(wǎng)絡(luò)故障診斷的特點,本文采用基于產(chǎn)生式與面向?qū)ο笙嘟Y(jié)合的知識表示形式,非常適合于網(wǎng)絡(luò)數(shù)據(jù)的動態(tài)變化。當某個特定的實體數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)轉(zhuǎn)換模塊只需產(chǎn)生一個通知事件,利用特定對象的set方法和get方法就能及時反映給故障診斷專家系統(tǒng)工作內(nèi)存;此外,采用基于產(chǎn)生式與面向?qū)ο笙嘟Y(jié)合的知識表示形式與基于規(guī)則推理的方式進行診斷還可以彌補基于單一規(guī)則推理專家系統(tǒng)不能滿足對網(wǎng)絡(luò)故障具有很強的動態(tài)性和并發(fā)性特點診斷的需要。
系統(tǒng)定義了一個故障類的頂層Fault類,它是一個抽象類,是其他所有診斷類的基類或間接基類。它包含了所有故障類的共同屬性如發(fā)生時間等,任何故障類都是從它派生出來的。總體上將故障定義為三類:計算機類、交換機類和鏈路類,即從Fault類派生出三個類,并進行劃分和繼承,分別進行類定義和消息相應函數(shù)的定義。
故障樹分析法是一種將系統(tǒng)故障形成原因按樹枝狀逐級細化的圖形演繹方法,是60年代發(fā)展起來的用于大型復雜系統(tǒng)的可靠性、安全性分析和風險評價的一種方法。本文引入故障樹分析法,對各類故障從整體到局部、從頂層到底層進行全面分析,建立規(guī)則庫。圖2所示為從某節(jié)點出發(fā)A節(jié)點無法訪問的故障樹分析圖。
對于資源相對受限的嵌入式環(huán)境,對系統(tǒng)毫無意義的程序帶來的資源浪費是不可容忍的,因此本文對CLIPS源碼進行了裁剪。本文通過修改編譯選項、功能開關(guān)、和刪除函數(shù)注冊等方法,裁剪了源碼中與ARM-Linux環(huán)境無關(guān)代碼、exmathfun、bmathfun、ext_io 等模塊。通過progen+tmake生成so文件。
CLIPS提供兩種進行擴展編程的機制,一種是集成式編程,一種嵌入式編程[4]。集成式編程允許將C、FORTRAN和ADA等語言編寫的函數(shù)在CLIPS中注冊為外部函數(shù)。嵌入式編程是將CLIPS的源碼嵌入C、C++和ADA等語言中進行編程,將CLIPS作為系統(tǒng)的系統(tǒng)的一個模塊進行調(diào)用的方式。本文利用CLIPS集成式編程和嵌入式編程機制實現(xiàn)診斷家系統(tǒng)服務(wù)端的設(shè)計。一方面通過C語言開發(fā)了控制模塊調(diào)用接口、數(shù)據(jù)采集子系統(tǒng)調(diào)用接口、通信模塊調(diào)用接口、I/O功能接口等,注冊成為CLIPS的外部函數(shù)和命令,定義成為CLIPS I/O路由,在規(guī)則中進行調(diào)用,完成推理機與其他模塊之間的交互。其中與診斷客戶端的交互幾乎全部是通過自定義I/O路由調(diào)用通信模塊實現(xiàn)。另一方面,將集成編程后的源碼編譯成為so文件,嵌入到故障診斷系統(tǒng)中。故障診斷系統(tǒng)通過調(diào)用API函數(shù)實現(xiàn)推理機,并將推理機作為進程的單獨線程,隨時監(jiān)聽事件的到來進行實時診斷和控制。
診斷系統(tǒng)服務(wù)端以推理機為中心,控制模塊在專家系統(tǒng)外部函數(shù)的調(diào)用下,觸發(fā)數(shù)據(jù)采集子系統(tǒng)對網(wǎng)絡(luò)或特定節(jié)點數(shù)據(jù)進行采集,并通過調(diào)用通信模塊、知識庫管理模塊和故障管理模塊等,實現(xiàn)與客戶端的交互,從而實現(xiàn)與用戶的交互接口和知識獲取接口。
診斷客戶端主要包括用戶接口和知識獲取接口。用戶接口完成用戶對診斷功能的調(diào)用、診斷過程中輸入觀察事實、以及查看診斷結(jié)果和恢復意見等。故障診斷知識獲取接口主要包括規(guī)則的添加、修改和刪除。如圖3所示是診斷系統(tǒng)的客戶端一次診斷結(jié)果顯示。
本文充分利用了嵌入式系統(tǒng)集成度高、可靠性好、免維護的特點,使故障診斷系統(tǒng)具有更高的可靠性和移植性。結(jié)合專家系統(tǒng)高效能,CLIPS開源和易于移植的特點,降低了故障診斷系統(tǒng)的成本,同時提高了故障診斷系統(tǒng)的適用性和診斷率。
[1]李善平等 Linux與嵌入式系統(tǒng)(第2版)[M].清華大學出版社2006.3
[2]馬少平等.人工智能[M].北京:清華大學出版社,2004.8
[3]Joesph Giarratano.專家系統(tǒng)原理與編程(原書第四版)[M].北京:機械工業(yè)出版社,2006.8
[4]STB of NASA.Advance Programming Guide,CLIPS6.24 Reference Manual II[M].From Intel net,2006