(陸軍工程大學石家莊校區(qū) 導彈工程系,河北 石家莊 050003)
新一代ATS(Auto Test System,自動測試系統(tǒng))發(fā)展方向是建立標準、開放、通用的ATS結構體系,采用規(guī)范的測試診斷知識描述,建立標準、開放的診斷推理機接口[1]。而診斷服務作為自動測試系統(tǒng)體系中的重要組成部分,實現(xiàn)其開放式的結構以及信息共享和交互能力則是非常必要的。IEEE頒布了AI-ESTATE(Artificial Intelligence Exchange and Service Tie to All Test Environments,全測試環(huán)境人工智能交換與服務)標準,又稱IEEE Std 1232標準。它是下一代ATS診斷服務系統(tǒng)構建依據(jù)的主要規(guī)范,旨在使診斷推理系統(tǒng)相互兼容,測試診斷知識可移植、可重用,為故障診斷技術發(fā)展、開放式診斷系統(tǒng)的建立奠定了良好的基礎[2-4]。AI-ESTATE從制定至今,經(jīng)歷了多次的修正,包括IEEE Std 1232-1990、IEEE Std 1232-1995、IEEE Std 1232.1-1997、IEEE Std 1232.2-1998、IEEE Std 1232-2002以及目前最新版本IEEE Std 1232-2010。
AI-ESTATE是關于測試診斷環(huán)境數(shù)據(jù)交換和服務的規(guī)范集,整個標準包括體系結構、數(shù)據(jù)知識以及服務的定義,以此來實現(xiàn)符合該標準的系統(tǒng)之間的數(shù)據(jù)和知識的共享以及系統(tǒng)內(nèi)功能模塊間信息的交互。
AI-ESTATE標準提供如下內(nèi)容[5]:
① AI-ESTATE體系結構;
② 診斷信息模型的定義;
③ 診斷模型之間交互格式的標準定義;
④ 診斷推理機的軟件服務定義。
在最新頒布的AI-ESTATE標準中,提供了6種信息模型,其中處于對頂層的是CEM(Common Element Model,公共元素模型),公共元素模型對測試診斷領域中用到的常見信息進行了規(guī)范化的標準描述。比如Diagnosis(診斷)、Failure(失效)、Repair(維修)和Resource(資源)等實體以及Costs(成本)、Failure Rates(失效率)等屬性[6]。公共元素模型是基礎的數(shù)據(jù)格式,適用于各種滿足AI-ESTATE標準的環(huán)境。在CEM下面是一系列的數(shù)據(jù)和知識模型,F(xiàn)TM(Fault Tree Model,故障樹模型)、BNM(Bayes Network Model,貝葉斯網(wǎng)絡模型)、DIM(D-Matrix Inference Model,D-矩陣推理模型)、DLM(Diagnostic Logic Model,診斷邏輯模型),并且還可以根據(jù)應用診斷方法的不同進一步擴充。這些模型是針對專門的應用環(huán)境,以公共元素模型中元素為基礎,進行一定的擴展或刪減,并遵循一定的診斷規(guī)則將各種資源實體組織起來,增強某方面的信息支持,以滿足應用環(huán)境的需要。
AI-ESTATE標準為規(guī)范故障樹分析方法,把故障樹定義為“決策樹或決策表”[9]。故障樹模型包括4個實體: FaultTreeModel實體、StartingPoint實體、FaultTreeStep實體、TestResult實體。
圖1為其EXPRESS-G圖。
圖1 FTM的EXPRESS-G圖
其中FaultTreeModel實體是CEM中DiagnosticModel實體的子類;它的屬性為entryPoints,定義了入口指針,作為一棵故障樹的一個或多個入口節(jié)點;StartingPoint實體是Action 實體的子類,它的屬性first Step,指向故障樹或子樹的根節(jié)點;FaultTreeStep實體代表了其中的一個決策結點;它的屬性Result,是一組至少由兩個TestResult實體組成的集合,用來標識測試結果;屬性testStep,屬于Test實體類型,用于標識當前步驟下正在進行的測試行為;TestResult實體包含了每個測試結點對應的測試結果以及下一步?jīng)Q策節(jié)點的信息,它的testOut屬性,用來標識當前的測試結果;屬性nextStep,屬用來標識TestOutcome的結果相對應的下一個決策節(jié)點[7]。
在AI-ESTATE標準中,采用 EXPRESS 語言表述故障診斷模型,但 EXPRESS 語言僅僅用來建模而并非程序設計語言,其描述的診斷知識不能利用程序設計的方式來加以實現(xiàn)。為此,選擇XML(eXtensible Markup Language,可擴展標記語言)來對診斷知識進行標準化描述無疑是一種更好的選擇。
XML是由萬維網(wǎng)聯(lián)盟(World Wide Web Consortium,W3C)推出一種專門用來進行基于字符數(shù)據(jù)的描述、交換和存檔的結構化的標準規(guī)范[10-11]。XML Schema是繼DTD(Document Type Definition,文檔類型定義)之后,用來規(guī)范和描述XML文檔的第二代標準。XML Schema被稱為XML架構,是以XML語言為基礎,描述了XML文檔的結構[8-9]。
ISO 10303 Part28 定義了用 XML 描述 EXPRESS 模式和數(shù)據(jù)的標準,為EXPRESS Schema到XML 語言的轉(zhuǎn)換提供了方法[10]。AI-ESTATE的CEM規(guī)范了測試、診斷領域的公共元素,其他診斷信息模型是在CEM基礎上擴展的,因此只要定義了一致的CEM的XML Schema和數(shù)據(jù)符合診斷信息模型描述的類型和語義,就為其他模型的建立奠定了基礎。
在對AI-ESTATE標準中給出的故障樹模型進行深入分析研究的基礎上,建立故障樹模型,其XML Schema如圖2所示。
圖2 FTM XML Schema文件邏輯視圖
它以FaultTreeModel為根元素,由CEM中 DiagnosticModel實體上進行擴展的,主要包含的元素有 RepairItems、Tests、Diagnoses、Functions、 StartingPoint元素以及entryPointID屬性。
Tests元素描述了診斷過程中所需要的所有測試信息,它包含一個或多個Test元素,是在CEM中的Test實體基礎上擴展的。Test元素由Name和ID兩個屬性和子元素Outcome構成,Outcome是在CEM中TestOutcome實體基礎上擴展的。對于每一個測試項最少對應著兩個診斷結果,Outcome元素下主要包含ID、Name和StandardTestValue三個屬性來標識具體的診斷結果值。為了避免在測試中出現(xiàn)系統(tǒng)名稱相同的測試項目引起測試的沖突,要求Test元素、Outcome元素具有名稱唯一性約束。Test元素的信息描述的XML Schema如圖3所示。
圖3 Test的XML Schema文件邏輯視圖
Diagnosis元素包含Name和ID兩個屬性,Outcome和FailedItem兩個子元素。Outcome元素用來描述診斷結果,它又由三個屬性來描述,依次為ID、Name和StandardDiagnosisValue用來對診斷的ID、名稱和標準診斷值進行描述;可選的FailedItem、元素描述了失效事件,它下面有RepairItemID屬性,描述了對應相應失效事件的維修事件的ID號描述。Diagnosis元素的XML Schema 如圖4所示。
圖4 Diagnosis的XML Schema文件邏輯視圖
Startingpoint元素表示故障樹模型中根節(jié)點,其屬性FirstStepID用來標記第一個步驟ID號,其XML Schema 設計如圖5所示。
圖5 Startingpoint的 XML Schema 文件邏輯視圖
元素Step是故障樹模型中的核心元素,它描述了在某一步運行的測試以及可能得到的診斷結論和測試動作。其 testID 屬性用來說明此步診斷需用到的測試的ID號;Result元素由兩個或多個TestResult實體來描述,提供測試的結果,并指明下一個步驟。如果下一步還是指向一個測試,則重復由故障樹步驟到測試結果的過程;其中屬性testOutcomeID說明此步測試結果的ID號;而可選元素NextStepID和CurrentDiagnosisOutcomeID分別說明下一個診斷步驟的ID號或當前故障結果的ID號。Step元素的XML Schema如圖6所示。
在實際故障診斷過程中,采用上述基于XML Schema的診斷模型的描述,可以實現(xiàn)診斷模型信息的標準化。但是,如果手動編輯XML文檔很容易出錯,而且開發(fā)效率會很低。因此,針對這一問題,開發(fā)了診斷模型配置組件,并在此組件基礎上,開發(fā)了配置工具實現(xiàn)故障樹診斷信息的自動配置,自動生成符合AI-ESTATE標準的XML文件。
圖6 Step的XML Schema文件邏輯視圖
故障樹配置組件采用COM(Component Object Model,組建對象模型)技術開發(fā),對外開放IFaultTreeDiagnosis接口,用戶通過調(diào)用該接口中的方法實現(xiàn)故障樹診斷模型信息的配置。因為LabWindows/CVI開發(fā)工具支持對組件的使用,并提供了對ActiveX控件的支持能力,可以在LabWindows/CVI開發(fā)環(huán)境中使用標準的ActiveX控件,另外,對XML文件解析也提供了cvixml.fp輔助工具包,所以選用LabWindows/CVI作為開發(fā)故障樹模型配置組件的工具。利用“ActiveX Controller Wizard”向?qū)傻墓收蠘淠P团渲媒M件IFaultTreeDiagnosis接口的部分IDL描述如下所示:
interface IFaultTreeDiagnosis:IDispatch {
[id(0x1),helpstring("Add Test")] HRESULT AddTest ([in] short TestID,[in] BSTR TestName,[in] short PassOutcomeID,[in] short FailOutcomeID);
[id(0x2),helpstring("Delete Test")] HRESULT DeleteTest ([in] short ShortID);
[id(0x4),helpstring("Add Diagnosis")] HRESULT AddDiagnosis ([in] short DiagnosisID,[in] BSTR DiagnosisName,[in] short OutcomeID,[in] BSTR OutcomeName,[in] BSTR OutcomeStandardDiagnosisValue);
……
[id(0xd),helpstring("Read XML")] HRESULT ReadXML ([in] BSTR filepath);
[id(0xf),helpstring("Query Step ")] HRESULT QueryStep ([in] short StepID,[in,out] short*TestID,[in,out]short* PassNextStepID,[in,out] short *PassDiagnosisOutcomeID,[in,out] short *FailNextStepID,[in,out] short *FailDiagnosisOutcomeID);}
該接口通過AddTest、 DeleteTest和DeleteALLTest方法實現(xiàn)診斷所需測試的添加與刪除;通過 AddDiagnosis、DeleteDiagnosis和 DeleteALLDiagnosis方法實現(xiàn)診斷結論的添加與刪除;通過AddRepairItem、DeleteRepairItem和DeleteAllRepairItem方法實現(xiàn)維修事件的添加與刪除;通過AddStep、DeleteStep 和DeleteAllStep方法實現(xiàn)診斷步驟的添加與刪除;通過ReadXML、SaveXML方法實現(xiàn)XML文件的讀寫;通過QueryStep、QueryTest、QueryDiagnosis和QueryRepairItem方法實現(xiàn)對診斷步驟、測試項目、診斷結論和維修事件的查詢。
診斷模型配置工具主要設計思想是將所選診斷方法及診斷對象所包含的所有測試、診斷結論、維修事件、診斷步驟等元素映射到相應的軟件面板(Panel)上,由用戶根據(jù)診斷模型的設計情況對各元素進行命名、設置或關聯(lián)等操作。故障樹模型的具體配置界面如圖7所示。
圖7 故障樹模型配置界面
在具體實現(xiàn)時,首先定義樹節(jié)點的數(shù)據(jù)結構如下所示:
typedef struct tagTestPoint
{
short TestID;
char *TestName;
short PassOutcomID;
short FailOutcomID;
struct tagTestPoint *next;
}TestPoint,*pTestPoint;
從中可以看出利用單鏈表將所有測試節(jié)點數(shù)據(jù)管理起來。定義完數(shù)據(jù)結構之后,就可以對節(jié)點數(shù)據(jù)進行操作,其中關鍵方法AddTests實現(xiàn)如下:
HRESULT CVIFUNC Fault Tree ObjectI Fault Tree Diagnosis Add Test (CAServerObjHandle objHandle,short TestID,char * TestName,short PassOutcomID,short FailOutcomID)
{
TestPoint** tp=&g_pTestPointGroup;
TestPoint* nextTestPoint=NULL;
int i=0;
int findFlag=0;
for(i=0;i { if( TestID==(*tp)->TestID) { findFlag=1; break; } tp=&((*tp)->next); } if(findFlag) //該節(jié)點已經(jīng)存在 nextTestPoint=(*tp)->next; (*tp)=(TestPoint*)malloc(sizeof(TestPoint)+1); //分配內(nèi)存 (*tp)->TestID=TestID; //設置測試節(jié)點的ID DupStr (TestName,&((*tp)->TestName)); //設置測試節(jié)點名稱 (*tp)->PassOutcomeID=PassOutcomeID; //設置測試節(jié)點的通過結果ID (*tp)->FailOutcomeID=FailOutcomeID; //設置測試節(jié)點的失敗結果ID if(!findFlag) //該節(jié)點不存在 { g_iTestPointNumber++; } (*tp)->next=nextTestPoint; return S_OK; } AI-ESTATE作為應用于測試以及診斷領域的國際通用標準,定義了診斷接口、規(guī)范服務和診斷知識。在對標準中公共元素模型(CEM)深入分析與研究的基礎上,利用具有靈活性以及可擴展性的XML語言,完成了符合AI-ESTATE的故障樹診斷模型的建模過程并建立了相應的模型配置工具,為實現(xiàn)診斷知識的共享性、流通性以及測試系統(tǒng)診斷效率的提升奠定了基礎。5 結束語