喬福超
(海軍航空工程學(xué)院,山東煙臺(tái) 264001)
交互式電子技術(shù)手冊(cè)(interactive electronic technical manual,IETM)是以數(shù)字形式存儲(chǔ),采用文字、圖形、表格、音頻和視頻等形式,以人機(jī)交互方式提供裝備基本原理、操作使用和維修內(nèi)容的技術(shù)出版物[1]。與傳統(tǒng)的電子技術(shù)手冊(cè)相比,IETM 最顯著的特征是具有交互性,這使得用戶與計(jì)算機(jī)之間能夠以人機(jī)對(duì)話的方式獲取信息與知識(shí),極大地提高了裝備維修效率。
IETM 普遍采用過(guò)程數(shù)據(jù)模塊(Data Module)和邏輯引擎(Logic Engine)相互配合的方式來(lái)實(shí)現(xiàn)人機(jī)交互功能。目前,針對(duì)歐洲S1000D 標(biāo)準(zhǔn)的IETM 開發(fā)平臺(tái)已經(jīng)具有了成熟的邏輯引擎。我國(guó)自2009年頒布GJB6600 標(biāo)準(zhǔn)以來(lái),也出現(xiàn)了各型支持該標(biāo)準(zhǔn)的IETM 開發(fā)平臺(tái),但由于平臺(tái)的側(cè)重點(diǎn)不同,目前所接觸的幾款支持GJB6600 標(biāo)準(zhǔn)的開發(fā)平臺(tái)都暫不提供對(duì)過(guò)程數(shù)據(jù)模塊和邏輯引擎的支持。因此,設(shè)計(jì)一種基于GJB6600 標(biāo)準(zhǔn)的邏輯引擎,為相關(guān)的研究與開發(fā)提供參考。
IETM 中的技術(shù)信息是以數(shù)據(jù)模塊的形式進(jìn)行存儲(chǔ)的。數(shù)據(jù)模塊是描述裝備結(jié)構(gòu)、性能和操作步驟等技術(shù)信息的獨(dú)立的、完整的數(shù)據(jù)單元。根據(jù)技術(shù)信息的用途不同,GJB6600將數(shù)據(jù)模塊分為8 類,包括描述類、程序類、故障類、維修計(jì)劃類、操作類、圖解零件類、連線類、過(guò)程類。其中,過(guò)程數(shù)據(jù)模塊是一類特殊的數(shù)據(jù)模塊,它是具有內(nèi)在邏輯判斷的腳本流,能夠根據(jù)裝備的狀態(tài)信息組織其他數(shù)據(jù)模塊和步驟的顯示順序。
GJB6600 所定義的過(guò)程數(shù)據(jù)模塊包括〈變量聲明〉、〈操作準(zhǔn)備〉、〈模塊執(zhí)行順序〉和〈收尾工作〉子元素,其數(shù)據(jù)模型如圖1 所示。其中,〈變量聲明〉和〈模塊執(zhí)行順序〉是實(shí)現(xiàn)IETM 交互性的2 個(gè)重要元素。下面對(duì)過(guò)程數(shù)據(jù)模塊中的主要元素作簡(jiǎn)要分析。
圖1 過(guò)程數(shù)據(jù)模塊的數(shù)據(jù)模型
在裝備維修過(guò)程中,IETM 經(jīng)常需要獲取一些與裝備相關(guān)的狀態(tài)信息(如溫度、輸出電壓等),以便判斷故障類型,指引用戶維修?!醋兞柯暶鳌翟丶词怯糜趯?duì)維修過(guò)程中所需的所有狀態(tài)信息(變量)進(jìn)行定義和初始化的。在IETM 運(yùn)行過(guò)程中,使用邏輯引擎驅(qū)動(dòng)對(duì)話框或調(diào)用外部測(cè)試程序,以便用戶能夠手動(dòng)輸入信息或由自動(dòng)測(cè)試設(shè)備自行輸入信息。邏輯引擎將所獲取的狀態(tài)信息以變量的形式存儲(chǔ)于狀態(tài)表中,以供后續(xù)的邏輯判斷、數(shù)值計(jì)算或其他程序使用。
〈模塊執(zhí)行順序〉元素用于描述多個(gè)數(shù)據(jù)模塊和步驟之間執(zhí)行的先后順序,形成具有內(nèi)在判斷邏輯的腳本流。它包括〈順序執(zhí)行方式〉、〈分支選擇方式〉、〈條件判斷方式〉、〈循環(huán)判斷方式〉4 種子元素。其中,〈順序執(zhí)行方式〉是核心元素,其作用是描述向用戶呈現(xiàn)的信息內(nèi)容,包括獨(dú)立的操作步驟、對(duì)話框、消息框、引用的數(shù)據(jù)模塊、外部請(qǐng)求等內(nèi)容;〈分支選擇方式〉描述多分支情況下的業(yè)務(wù)邏輯,邏輯引擎通過(guò)判斷其子元素的〈適用性信息〉元素值或〈適用性引用〉屬性值,決定在特定的邏輯條件下所應(yīng)選擇的分支;〈條件判斷方式〉用于描述一個(gè)if-then-else 的業(yè)務(wù)邏輯,邏輯引擎通過(guò)判斷其〈表達(dá)式〉元素值決定應(yīng)選擇的分支;〈循環(huán)判斷方式〉描述一個(gè)循環(huán)邏輯,邏輯引擎通過(guò)判斷其〈表達(dá)式〉元素值決定是否跳出循環(huán)。需要指出的是,上述4 種元素均可在其子元素中繼續(xù)套用這4 種結(jié)構(gòu),以描述任意復(fù)雜程度的腳本流。
〈表達(dá)式〉是過(guò)程數(shù)據(jù)模塊中極為重要的元素,在腳本流中,所有的邏輯表達(dá)式、算術(shù)表達(dá)式、直接量等都需要使用〈表達(dá)式〉進(jìn)行描述。該元素具體包含4 種結(jié)構(gòu)的子元素,如圖2 所示。
人機(jī)對(duì)話是IETM 交互功能的基礎(chǔ)。在裝備維修過(guò)程中,當(dāng)邏輯引擎需要獲取或更新某一狀態(tài)信息(變量)時(shí),會(huì)彈出對(duì)話框并要求用戶輸入相應(yīng)的信息?!磳?duì)話框〉元素即用于描述所彈出對(duì)話框的內(nèi)容以及與之相關(guān)聯(lián)的變量。該元素主要包含5 種類型的子元素,即〈填空〉、〈菜單〉、〈按鈕〉、〈消息框〉、〈對(duì)話組合〉子元素,通過(guò)搭配使用這5 種子元素可實(shí)現(xiàn)簡(jiǎn)潔高效的對(duì)話框?!磳?duì)話框〉元素的數(shù)據(jù)模型如圖3 所示。
圖2 〈表達(dá)式〉元素的數(shù)據(jù)模型
圖3 〈對(duì)話框〉元素的數(shù)據(jù)模型
過(guò)程數(shù)據(jù)模塊是靜態(tài)的腳本,其本身無(wú)法實(shí)現(xiàn)人機(jī)交互。邏輯引擎是解析執(zhí)行靜態(tài)腳本的一個(gè)軟件,是腳本流的解釋器[2]。在IETM 中,過(guò)程數(shù)據(jù)模塊必須借助邏輯引擎的支持才能完成人機(jī)交互功能。
本節(jié)以一段維修流程為例,對(duì)過(guò)程數(shù)據(jù)模塊和邏輯引擎的作用進(jìn)行說(shuō)明,如圖4 所示。首先,數(shù)據(jù)模塊編制人員將由廠商提供的設(shè)備維修流程按照一定的IETM 標(biāo)準(zhǔn)編制成過(guò)程數(shù)據(jù)模塊(該項(xiàng)工作通常是借助IETM 開發(fā)平臺(tái)完成的,優(yōu)秀的開發(fā)平臺(tái)能夠使用圖形界面來(lái)構(gòu)建維修流程,并自動(dòng)生成基于IETM 標(biāo)準(zhǔn)的過(guò)程數(shù)據(jù)模塊)。在數(shù)據(jù)模塊編制完成后,邏輯引擎對(duì)過(guò)程數(shù)據(jù)模塊中的靜態(tài)腳本進(jìn)行解析并處理。邏輯引擎的運(yùn)行涉及2 方面內(nèi)容:解析器和處理器。其中,解析器負(fù)責(zé)對(duì)XML 文檔中的節(jié)點(diǎn)進(jìn)行遍歷,并根據(jù)節(jié)點(diǎn)的類型調(diào)用相應(yīng)的處理器;處理器則根據(jù)當(dāng)前所遍歷的節(jié)點(diǎn)類型及內(nèi)容執(zhí)行相應(yīng)的處理,如顯示數(shù)據(jù)模塊內(nèi)容、彈出對(duì)話框等。
圖4 過(guò)程數(shù)據(jù)模塊和邏輯引擎的作用示意圖
解析器與處理器有多種實(shí)現(xiàn)方式,本研究提出2 種可行的方案。
1)解釋型邏輯引擎
該型邏輯引擎的運(yùn)行機(jī)理類似于程序設(shè)計(jì)語(yǔ)言中解釋型語(yǔ)言的翻譯過(guò)程。它首先加載過(guò)程數(shù)據(jù)模塊,然后由解析器逐個(gè)節(jié)點(diǎn)地進(jìn)行遍歷,每當(dāng)遍歷到一個(gè)節(jié)點(diǎn),便調(diào)用處理器執(zhí)行相應(yīng)的操作。解析器會(huì)根據(jù)用戶的操作和文檔內(nèi)在的邏輯有選擇性地遍歷XML 文檔,是一種動(dòng)態(tài)的翻譯方式。
2)編譯型邏輯引擎
該型邏輯引擎的運(yùn)行機(jī)理類似于程序設(shè)計(jì)語(yǔ)言中編譯型語(yǔ)言的翻譯過(guò)程。它是將整個(gè)過(guò)程數(shù)據(jù)模塊直接翻譯成完整的可執(zhí)行的程序代碼。它首先加載過(guò)程數(shù)據(jù)模塊,并對(duì)文檔中的節(jié)點(diǎn)進(jìn)行遍歷。每當(dāng)遍歷到一個(gè)節(jié)點(diǎn),即調(diào)用相應(yīng)的翻譯函數(shù),將該節(jié)點(diǎn)的內(nèi)容翻譯成可執(zhí)行代碼,并以字符串的形式存儲(chǔ)該代碼。在遍歷完成后,將所得到的所有節(jié)點(diǎn)的代碼拼接形成完整的程序代碼,并調(diào)用執(zhí)行。
本研究使用JavaScript 語(yǔ)言設(shè)計(jì)了一款基于GJB6600 的編譯型邏輯引擎。下面對(duì)引擎實(shí)現(xiàn)的關(guān)鍵環(huán)節(jié)和程序流程設(shè)計(jì)進(jìn)行詳細(xì)說(shuō)明。
3.1.1 XML 解析
XML 文檔的解析通常需要借助XML 解析器來(lái)完成,本文即采用了基于DOM 規(guī)范的解析器。DOM 規(guī)范為解析XML 文檔定義了一組標(biāo)準(zhǔn)接口。DOM 解析器首先讀入整個(gè)文檔,然后將該文檔轉(zhuǎn)換成常駐內(nèi)存的樹狀結(jié)構(gòu),即DOM樹。程序代碼可以通過(guò)節(jié)點(diǎn)之間的關(guān)系、標(biāo)簽名、屬性等訪問(wèn)DOM 樹中的節(jié)點(diǎn),并獲取每個(gè)節(jié)點(diǎn)所包含的數(shù)據(jù)。
3.1.2 翻譯函數(shù)
編譯型邏輯引擎的處理器的主要工作是將節(jié)點(diǎn)內(nèi)容翻譯成程序代碼。因此,應(yīng)依據(jù)GJB6600 過(guò)程數(shù)據(jù)模塊的數(shù)據(jù)模型,為每一種類型的元素設(shè)計(jì)相應(yīng)的翻譯函數(shù)。翻譯函數(shù)將所要翻譯的節(jié)點(diǎn)作為參數(shù)傳入,將節(jié)點(diǎn)內(nèi)容翻譯成程序代碼,并存入一個(gè)字符串變量作為函數(shù)返回值。以〈表達(dá)式〉節(jié)點(diǎn)為例,其對(duì)應(yīng)的翻譯函數(shù)代碼如下所示:
圖5 所示的是一個(gè)表達(dá)式節(jié)點(diǎn)的XML 樹形圖,該節(jié)點(diǎn)描述了一個(gè)邏輯表達(dá)式,值為:(V_Min >11)&& (V_Max <13)&&(V_Ripple <0.5)。使用上述翻譯函數(shù)對(duì)其進(jìn)行翻譯,將其最頂層表達(dá)式節(jié)點(diǎn)作為參數(shù)輸入該函數(shù),所返回的字符串值為:(((V_Min)>(11))&&((V_Max)<(13)))&&((V_Ripple)<(0.5)),即完成了對(duì)該節(jié)點(diǎn)內(nèi)容的翻譯。
圖5 表達(dá)式節(jié)點(diǎn)樹形結(jié)構(gòu)
3.1.3 遍歷順序
編譯型邏輯引擎最終將所有節(jié)點(diǎn)的翻譯代碼拼接形成完整的程序代碼。代碼的拼接順序受節(jié)點(diǎn)的遍歷順序影響,因此必須選擇合適的遍歷方式。采用類似二叉樹中先序遍歷的方式,按自頂向下、自左向右的順序,先遍歷節(jié)點(diǎn)本身及其子節(jié)點(diǎn),再遍歷兄弟節(jié)點(diǎn)。
3.1.4 無(wú)限嵌套
在過(guò)程數(shù)據(jù)模塊中,經(jīng)常出現(xiàn)元素之間相互嵌套或元素嵌套其本身的情況,如圖5 中的<表達(dá)式>元素。在XML文檔中,這種類型的節(jié)點(diǎn)可以具有任意多層次的子節(jié)點(diǎn),其結(jié)構(gòu)無(wú)法預(yù)測(cè)。因此,對(duì)這種可無(wú)限嵌套的元素設(shè)計(jì)翻譯函數(shù)時(shí),可使用遞歸調(diào)用的方法,如上述<表達(dá)式>元素的翻譯函數(shù)所示。
基于GJB6600 的編譯型邏輯引擎的程序流程圖如圖6所示。該程序首先加載XML 文檔,并將其轉(zhuǎn)化為DOM 樹,聲明全局字符串變量Str 以存儲(chǔ)整個(gè)模塊翻譯完成的代碼。然后對(duì)文檔節(jié)點(diǎn)進(jìn)行遍歷,每當(dāng)遍歷到一個(gè)節(jié)點(diǎn),即調(diào)用相應(yīng)的翻譯函數(shù),將該節(jié)點(diǎn)的內(nèi)容翻譯成可執(zhí)行代碼,并以字符串的形式存儲(chǔ)。當(dāng)文檔全部遍歷完成后,Str 變量值即為完整的程序代碼,調(diào)用eval()函數(shù)即可執(zhí)行字符串中的代碼。
論述了GJB6600 標(biāo)準(zhǔn)中過(guò)程數(shù)據(jù)模塊的結(jié)構(gòu)和作用,分析了IETM 邏輯引擎的運(yùn)行機(jī)理,提出了邏輯引擎的2 種實(shí)現(xiàn)方案,即解釋型邏輯引擎和編譯型邏輯引擎。使用JavaScript 語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)了基于GJB6600 標(biāo)準(zhǔn)的編譯型邏輯引擎。研究成果對(duì)IETM 邏輯引擎的設(shè)計(jì)與開發(fā)具有一定的參考價(jià)值。
圖6 邏輯引擎程序流程
[1]GJB6600,裝備交互式電子技術(shù)手冊(cè)[S].
[2]寇建華,左洪福,蘇艷.交互式電子技術(shù)手冊(cè)解析關(guān)鍵技術(shù)研究[J].電腦知識(shí)與技術(shù),2009,5(28):7941-7942.
[3]劉雙雙,葉曉慧,王紅霞.嵌入故障診斷策略的IETM 的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2010,18(9):1964-1966.
[4]朱興動(dòng).武器裝備交互式電子技術(shù)手冊(cè)—IETM[M].北京:國(guó)防工業(yè)出版社,2009.
[5]張麗麗,暢峰.基于S1000D 的空空導(dǎo)彈系統(tǒng)IETM 的制作[J].四川兵工學(xué)報(bào),2014,35(5):58- 61.
[6]徐宗昌,雷育生.裝備IETM 研制工程總論[M].北京:國(guó)防工業(yè)出版社.2012.1-44.
[7]徐宗昌,孫寒冰,朱偉成,等.基于IETM 的交互式故障診斷模式研究[J].計(jì)算機(jī)測(cè)量與控制,2013,21(10):2651- 2654.
[8]于大海,劉浩.基于故障模式的交互式電子手冊(cè)的設(shè)計(jì)與實(shí)現(xiàn)[J].四川兵工學(xué)報(bào),2010,31(6):28- 30.
[9]崔建鋒.交互式電子技術(shù)手冊(cè)—IETM 綜述[J].航空制造技術(shù),2011(12):105-107.
[10]劉松風(fēng),林志文,楊士元.基于IETM 驅(qū)動(dòng)的智能化便攜診斷設(shè)備[J]. 計(jì)算機(jī)測(cè)量與控制,2009,17(6):1030- 1032.
[11]ASD S1000D,International Specification for Technical Publications Utilizing A Common Source DataBase,Issue 4. 0[S].