Win CE平臺下嵌入式故障診斷專(zhuān)家的設計
當各種設備應用與管理系統發(fā)生故障時(shí),準確而快速地進(jìn)行故障診斷定位,對于系統的恢復,具有十分重要意義。然而,由于系統結構復雜,導致設備故障的原因很多,在現場(chǎng)分析、判斷和處理故障時(shí),往往依賴(lài)于維修人員對設備機理的把握程度和經(jīng)驗,導致故障定位不準,維修時(shí)間較長(cháng)。故采用故障樹(shù)分析法建立檢測引導系統,以此來(lái)引導維修人員以專(zhuān)家的思維模式對設備進(jìn)行檢測修理,提高經(jīng)濟性和可靠性。這種檢測引導系統即為專(zhuān)家系統。本文以串口通信故障檢測為例,設計了一種嵌入式專(zhuān)家系統,結合嵌入式WinCE以及SQLite,達到引導檢測的目的。
1 系統架構
1.1 專(zhuān)家系統簡(jiǎn)介
專(zhuān)家系統(ES)是人工智能領(lǐng)域最活躍和最廣泛的領(lǐng)域之一[1]。自從1965 年第一個(gè)專(zhuān)家系統Dendral 在美國斯坦福大學(xué)問(wèn)世以來(lái),經(jīng)過(guò)40年的開(kāi)發(fā),各種專(zhuān)家系統已遍布各個(gè)專(zhuān)業(yè)領(lǐng)域。目前,專(zhuān)家系統得到了更廣泛的應用,并在應用開(kāi)發(fā)中得到進(jìn)一步發(fā)展。所謂專(zhuān)家系統就是使用人類(lèi)專(zhuān)家推理的計算機模型來(lái)處理現實(shí)世界中需要專(zhuān)家作出解釋的復雜問(wèn)題,在沒(méi)有專(zhuān)家參與的情況下得出與專(zhuān)家相同的結論。簡(jiǎn)言之,專(zhuān)家系統可視作“知識庫”和“推理機”的結合,知識庫是專(zhuān)家的知識在計算機中的映射,推理機是利用知識進(jìn)行推理的能力在計算機中的映射,構造專(zhuān)家系統的難點(diǎn)也在于這兩個(gè)方面。
1.2 系統組成
本文設計的智能專(zhuān)家系統包括用戶(hù)界面、數據庫以及模塊化的程序。應用嵌入式數據庫SQLite來(lái)實(shí)現知識的存儲以及人機交互實(shí)現推理解釋。故障樹(shù)節點(diǎn)的所有信息均存儲在SQLite中,并在數據庫中實(shí)現故障節點(diǎn)的邏輯關(guān)系以此取代推理機,達到引導檢測的目的[2]。
1.3 系統工作機制
專(zhuān)家系統的組織控制機構(即推理機)根據當前輸入數據來(lái)運行知識庫中的相應知識,按一定策略進(jìn)行推理,以達到要求的目標。本文專(zhuān)家系統中,推理機根據用戶(hù)參與選擇后的故障信息,在知識庫內尋找能與之匹配的故障樹(shù)結點(diǎn)事件,每步推理都以用戶(hù)反饋信息為依據,沿故障樹(shù)脈絡(luò )進(jìn)行正向推理,逐步縮小故障范圍,直至完成故障源定位。專(zhuān)家系統工作流程如圖1所示。
2 專(zhuān)家庫設計
故障樹(shù)分析FTA(Fault Tree Analysis)是一種演繹推理方法, 將系統可能發(fā)生的故障和故障原因由總體到部分按樹(shù)狀逐漸細化的圖形演繹方法, 通過(guò)對故障樹(shù)的定性和定量分析, 判明故障原因并可得出引發(fā)故障的相關(guān)因素的相關(guān)重要度[3]。故障樹(shù)是用于系統可靠性分析和故障診斷的一種圖形化故障模型,而基于規則的診斷專(zhuān)家系統的目標是當系統發(fā)生故障時(shí)綜合利用各種診斷信息,根據知識庫中的規則,通過(guò)推理確定系統的故障模式,推斷出故障部位和故障原因,最后提出排除故障的方法和維修建議。故障樹(shù)建立時(shí),將最不希望發(fā)生的故障作為頂事件; 位于故障樹(shù)底部, 導致其他事件的、不可再分的原因事件為底事件,其他事件都是中間事件。各事件間相互關(guān)系通過(guò)“與”門(mén)、“或”門(mén)、“非”門(mén)等邏輯門(mén)表示。
2.1 SQLite移植
從SQLite官方網(wǎng)站下載最新版本的SQLite,解壓獲得sqlite3.c、sqlite3.h、sqlite3ext.h三個(gè)源文件,還要下載一個(gè)基于Windows平臺的edll壓縮文檔,解壓獲取sqlite3.def,最后下載一個(gè)支持命令行的版本文件,解壓獲得sqlite3.exe。然后生成工程:用VS2005新建DLL工程,選擇智能設備在定制WinCE生成的SDK(如mini2440-CE6-SDK),把解壓出來(lái)的源文件加入工程中。最后設置工程屬性后編譯:編譯后便可生成適合設備平臺的數據庫使用文件sqlite3.lib、sqlite3.dll。以后只要把sqlite3.dll放到與工程相同的目錄下,在工程鏈接的額外依賴(lài)中加入sqlite3.lib,然后在需要使用數據庫的源文件中加入include“sqlite3.h”,SQLite數據庫就可以使用了。
2.2 故障樹(shù)的構建
基于故障樹(shù)的推理是指利用故障現象信息和故障樹(shù)節點(diǎn)間的邏輯關(guān)系進(jìn)行推理,利用異常節點(diǎn)作為推理的起始點(diǎn),利用輔助信息進(jìn)行假設排除,最終確定故障原因。在進(jìn)行故障診斷之前,系統要構造故障樹(shù),故障樹(shù)的作用主要用于診斷過(guò)程的剪枝,即縮小狀態(tài)空間的搜索范圍,以提高系統工作效率。將數據庫中的所有規則組織成若干棵樹(shù),每棵樹(shù)的葉子節點(diǎn)對應一個(gè)故障現象或輔助信息,非葉子節點(diǎn)對應一個(gè)故障結論,父節點(diǎn)與子節點(diǎn)的關(guān)系構成規則,在數據庫中記錄故障樹(shù)的根節點(diǎn)、節點(diǎn)層次、節點(diǎn)關(guān)系、葉子節點(diǎn)等信息。設置系統變量,用于判斷系統是否進(jìn)行過(guò)規則更新操作,在啟動(dòng)系統、退出規則維護界面和調用故障診斷功能時(shí)都進(jìn)行判斷,及時(shí)提示用戶(hù)進(jìn)行故障樹(shù)的更新處理[4]。
串口無(wú)法通信或者通信過(guò)程中出現異常,就要對整體或者串口通信過(guò)程中的某個(gè)細節進(jìn)行故障診斷。串口通信的實(shí)現需要如下幾個(gè)模塊:數據發(fā)送模塊、數據接收模塊、物理鏈路、中央處理單元、串口擴展板以及電源。故障主要有數據發(fā)送模塊故障、接收模塊故障以及串口擴展板故障三部分。在工作中,無(wú)論哪部分模塊發(fā)生故障都將影響到整個(gè)通信過(guò)程。根據故障關(guān)系以及檢測經(jīng)驗設計圖2所示的串口通信故障樹(shù)。
2.3 故障二叉樹(shù)的建立
關(guān)系數據庫管理系統的優(yōu)勢在于存儲以二維數據表為模型的數據結構。本文將故障樹(shù)壓縮存儲來(lái)降低檢索算法的時(shí)空復雜度。
一般的樹(shù)形dp都有這樣的模型:f[x,y]=min{f[x1][y1],f[x2][y2],……f[xm][ym]}給每個(gè)兒子分配多少就需要枚舉了,這種做法比較慢。但是如果轉化為為二叉樹(shù)之后,dp模型一般都是這樣:f[x,y]=min{f[left[x],y1],f[right[x],y]},則變?yōu)榻o一個(gè)兒子進(jìn)行分配就可以了,而且轉化之后還有一個(gè)很有用的性質(zhì),即原樹(shù)和二叉樹(shù)的前序遍歷相同,可以利用這個(gè)性質(zhì)進(jìn)行一些優(yōu)化。而且在某些情況下,通過(guò)前序可以把樹(shù)形dp轉化為在線(xiàn)性表(如數組中的dp),這樣許多轉移方程就可以繼續優(yōu)化,所以在樹(shù)的算法中把樹(shù)轉化為某種線(xiàn)性序可以大大優(yōu)化模型,使其算法變得更簡(jiǎn)單高效。本著(zhù)這種原則,本專(zhuān)家系統設計的SQLite表如表1所示。建立表之前,根據樹(shù)轉二叉樹(shù)的算法對每個(gè)故障現象進(jìn)行編號,表1中,NODE代表節點(diǎn)號;TEXT表示節點(diǎn)的故障現象;YESTO、NOTO表示判斷后將要跳轉的節點(diǎn);NRANK表示節點(diǎn)等級,根節點(diǎn)等級為0,過(guò)度節點(diǎn)等級為1,當節點(diǎn)等級為2(即葉子節點(diǎn))時(shí),表示測試結束并給出是否保存結果的提示。
WinCE下讀取數據庫信息對系統進(jìn)行專(zhuān)家診斷的核心代碼如下:
if(atoi(sqlite->GetTableData(1,5))!=2) //保證在非葉子節
//點(diǎn)之間進(jìn)行跳轉
{
node = atoi(sqlite->GetTableData(node,3));//選擇YESTO
//跳轉到的節點(diǎn)
node = atoi(sqlite->GetTableData(node,4));//選擇NOTO
//跳轉到的節點(diǎn)
wsprintf(buff1, LSELECT * from '%s' where NODE = %d ;,
table_name,node);//查詢(xún)數據庫
m_cap = sqlite->GetTableData(node,2);//讀取node節點(diǎn)的
//故障現象
GetDlgItem(IDC_TITLE)->SetWindowText(m_cap);
//把故障現象顯示出來(lái)
}
檢測過(guò)程中,通過(guò)人機交互遍歷故障二叉樹(shù)如圖3所示。圖中二叉樹(shù)的每一個(gè)葉子節點(diǎn)都是一次檢測的結果,也就是故障的最終原因,它們的等級即NRANK都是2。通過(guò)等級的判斷來(lái)確定是否是最終結果并提示保存。
3 系統的實(shí)現
本文以嵌入式操作系統Windows CE 和S3C2440A為開(kāi)發(fā)環(huán)境,應用EVC++ 語(yǔ)言編寫(xiě)、應用程序和嵌入式數據庫SQLite,開(kāi)發(fā)了故障診斷專(zhuān)家系統,以串口通信故障檢測為例,介紹了基于故障樹(shù)分析法和專(zhuān)家規則的故障診斷專(zhuān)家系統的建立以及診斷過(guò)程。當串口通信故障檢測開(kāi)始時(shí),測試人員只需要根據故障現象的提示進(jìn)行是非判斷,然后專(zhuān)家引導系統就會(huì )給出下一步的工作。系統工作流程圖如圖4所示。
專(zhuān)家系統運行的過(guò)程中,系統首次查詢(xún)數據庫,把故障樹(shù)的根節點(diǎn)內容顯示到提示信息。檢測人員將提示故障現象正確與否的判斷反饋給專(zhuān)家系統進(jìn)行下一次數據庫查詢(xún)得到下一步的提示信息。檢測人員參與之后的所有數據庫查詢(xún)工作都按照節點(diǎn)設計的邏輯進(jìn)行跳轉,然后重復人機交互操作,最后由專(zhuān)家系統給出確切答案,并提示檢測人員對測試結果進(jìn)行保存。
本文提出了一種基于二叉樹(shù)遍歷的檢測專(zhuān)家系統并給出了多叉樹(shù)轉化為二叉樹(shù)的方法,在嵌入式WinCE平臺下將這種系統實(shí)現并在初步的實(shí)踐檢驗中取得良好效果。以串口通信故障檢測為例,詳細地介紹了專(zhuān)家系統的建立過(guò)程以及工作原理,采用體積較小的嵌入式數據庫SQLite以及WinCE友好的嵌入式人機交互界面和模塊化程序設計方式,復用性好,可移植性高[5]。此系統模型廣泛適用于交通、通信以及電力等設備的故障檢測,在故障樹(shù)的引導下進(jìn)行專(zhuān)家級檢測。
評論