賈 π
(海軍士官學(xué)校信息技術(shù)系 蚌埠 233012)
虛擬維修訓(xùn)練作為一種全新的訓(xùn)練模式,是實(shí)裝維修訓(xùn)練的有效補(bǔ)充,可以提高裝備維修訓(xùn)練的水平,具有很高的軍事和經(jīng)濟(jì)效益。
本文以艦員級(jí)雷達(dá)虛擬維修訓(xùn)練系統(tǒng)為研究對(duì)象,以實(shí)現(xiàn)用戶自主增加維修任務(wù)為目標(biāo),在對(duì)維修任務(wù)設(shè)計(jì)方法研究現(xiàn)狀分析的基礎(chǔ)上,針對(duì)艦員級(jí)雷達(dá)虛擬維修訓(xùn)練的需求,探討了在進(jìn)行維修任務(wù)設(shè)計(jì)時(shí),運(yùn)用基于故障樹(shù)的設(shè)計(jì)方法,建立維修任務(wù)編輯后臺(tái),以實(shí)現(xiàn)方便的維修任務(wù)編輯。
艦員級(jí)雷達(dá)虛擬維修訓(xùn)練系統(tǒng)面向艦員,在維修過(guò)程中故障只需定位在板卡即可。
目前任務(wù)設(shè)計(jì)多采用基于維修作業(yè)分解[1]的維修序列規(guī)劃技術(shù)。其思想是將維修過(guò)程分解成一個(gè)個(gè)離散的基本維修動(dòng)作,這些基本維修動(dòng)作共同構(gòu)成整個(gè)維修任務(wù)。但此種任務(wù)設(shè)計(jì)方法只能按事先規(guī)劃好的維修序列執(zhí)行維修操作,缺乏靈活性,主要用于維修訓(xùn)練演示。
周棟提出了基于狀態(tài)、活動(dòng)和條件的維修任務(wù)管理思想[2],建立了維修任務(wù)管理模型MTN?;跔顟B(tài)描述各種維修資源,基于活動(dòng)定義維修動(dòng)作行為,基于條件建立資源與活動(dòng)間約束關(guān)系。進(jìn)一步闡述MTN驅(qū)動(dòng)虛擬場(chǎng)景進(jìn)行維修仿真,同時(shí)控制管理整個(gè)維修仿真過(guò)程。該任務(wù)管理模型主要用于維修任務(wù)分析評(píng)價(jià)。
劉穎提出了基于故障樹(shù)和圖論的雷達(dá)裝備維修任務(wù)設(shè)計(jì)方法[3],其任務(wù)設(shè)計(jì)屬雷達(dá)電路元器件級(jí)維修,能滿足對(duì)元器件維修訓(xùn)練需要。而本系統(tǒng)是面向艦員,屬于板卡級(jí)維修,其運(yùn)用電路圖測(cè)量點(diǎn)進(jìn)行故障任務(wù)設(shè)計(jì)的方法不適用于本系統(tǒng)。
目前虛擬維修樣機(jī)建模時(shí)為了控制模型的復(fù)雜度,多采用面向維修任務(wù)的建模,一個(gè)樣機(jī)模型只能生成幾個(gè)特定的維修任務(wù)。而在現(xiàn)實(shí)中,由于裝備資料的限制,在系統(tǒng)開(kāi)發(fā)中難免對(duì)一些故障出現(xiàn)遺漏,或者一些新近出現(xiàn)的故障,都需要錄入到系統(tǒng)中,但大多數(shù)系統(tǒng)沒(méi)有一個(gè)簡(jiǎn)便的維修任務(wù)編輯后臺(tái),任務(wù)編輯相對(duì)困難。
針對(duì)目前維修任務(wù)設(shè)計(jì)方法不能滿足本系統(tǒng)設(shè)計(jì)需求,以及現(xiàn)有虛擬維修訓(xùn)練系統(tǒng)在任務(wù)編輯方面存在的不足,提出任務(wù)編輯的設(shè)計(jì)目標(biāo):建立維修任務(wù)編輯后臺(tái)。此后臺(tái)能彌補(bǔ)目前系統(tǒng)功能的不足,可根據(jù)用戶自主增加故障類型和故障表達(dá)的需求,簡(jiǎn)便地實(shí)現(xiàn)對(duì)維修任務(wù)的編輯,如任務(wù)增加、修改和刪除等,生成的任務(wù)可通過(guò)系統(tǒng)程序?qū)⒐收犀F(xiàn)象加載到場(chǎng)景中。
所謂故障樹(shù),是一個(gè)故障現(xiàn)象(一個(gè)案例)診斷過(guò)程的邏輯結(jié)構(gòu),它的“根”對(duì)應(yīng)著維修案例中的故障現(xiàn)象,故障樹(shù)中有多個(gè)分支,每個(gè)分支對(duì)應(yīng)著導(dǎo)致該故障現(xiàn)象的一個(gè)可能原因,最終的故障原因表現(xiàn)為故障樹(shù)中的一個(gè)“葉子”,一個(gè)故障樹(shù)存在多個(gè)“葉子”,即一個(gè)故障現(xiàn)象對(duì)應(yīng)多個(gè)故障原因[4]。故障樹(shù)模型體現(xiàn)了故障傳播的層次和父子節(jié)點(diǎn)間關(guān)系的因果性,故障樹(shù)上某一子節(jié)點(diǎn)是父節(jié)點(diǎn)的故障源。利用故障樹(shù)的這個(gè)特性,可以通過(guò)建造故障診斷樹(shù)由故障特征來(lái)確定故障[5]。
任務(wù)設(shè)計(jì)的作用是由用戶選擇一個(gè)任務(wù),使用戶在故障樹(shù)的指導(dǎo)下,按照故障樹(shù)的提示,根據(jù)故障現(xiàn)象和測(cè)試結(jié)果,從“根”找到“葉子”,即從故障現(xiàn)象找到故障原因,從而完成一次維修訓(xùn)練。
其設(shè)計(jì)思想是設(shè)計(jì)一定的數(shù)據(jù)結(jié)構(gòu)對(duì)零部件狀態(tài)及故障信息進(jìn)行存儲(chǔ),再以故障樹(shù)的形式在任務(wù)編輯環(huán)境中顯示出來(lái)。用戶只要對(duì)故障樹(shù)進(jìn)行編輯操作(即對(duì)維修任務(wù)進(jìn)行編輯),設(shè)定零部件狀態(tài)和故障信息,就可以實(shí)現(xiàn)故障的表達(dá)。
維修過(guò)程中存在大量數(shù)據(jù)信息,在系統(tǒng)開(kāi)發(fā)中采用數(shù)據(jù)庫(kù)存儲(chǔ)包括故障樹(shù)在內(nèi)的所有裝備和維修過(guò)程信息,其優(yōu)點(diǎn)在于實(shí)現(xiàn)程序中數(shù)據(jù)與邏輯的分離,實(shí)現(xiàn)在同一個(gè)維修訓(xùn)練程序框架,通過(guò)改變數(shù)據(jù)庫(kù)內(nèi)容實(shí)現(xiàn)不同裝備虛擬維修訓(xùn)練系統(tǒng)的開(kāi)發(fā)。此設(shè)計(jì)是采用程序化的手段,使用戶可以根據(jù)需要自行創(chuàng)建訓(xùn)練任務(wù),節(jié)省了開(kāi)發(fā)人員的重復(fù)性勞動(dòng),縮短了開(kāi)發(fā)時(shí)間。在系統(tǒng)中,用戶、維修任務(wù)編輯后臺(tái)、數(shù)據(jù)庫(kù)和系統(tǒng)程序之間的關(guān)系如圖1所示。
圖1 維修任務(wù)編輯后臺(tái)關(guān)系示意圖
任務(wù)編輯后臺(tái)開(kāi)發(fā)流程:
1)設(shè)計(jì)數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)
根據(jù)維修任務(wù)編輯后臺(tái)設(shè)計(jì)需求,建立了以下四個(gè)數(shù)據(jù)表:任務(wù)信息表、任務(wù)零件組成表、故障樹(shù)表和故障現(xiàn)象顯示表。各庫(kù)表之間的關(guān)聯(lián)關(guān)系如圖2所示。利用維修任務(wù)編輯后臺(tái)進(jìn)行任務(wù)編輯即是對(duì)四個(gè)數(shù)據(jù)表內(nèi)容的編輯,修改并保存后可通過(guò)系統(tǒng)程序?qū)⑦@些數(shù)據(jù)連同維修規(guī)則信息等一并加載到場(chǎng)景中,實(shí)現(xiàn)對(duì)維修過(guò)程的控制。
圖2 各庫(kù)表之間的關(guān)聯(lián)關(guān)系
2)建立故障樹(shù)
根據(jù)裝備技術(shù)說(shuō)明書(shū)上提供的維修步驟,結(jié)合零部件狀態(tài),建立故障樹(shù),存儲(chǔ)在數(shù)據(jù)庫(kù)中。故障樹(shù)從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)有很多條路徑,每條路徑相當(dāng)于一個(gè)維修任務(wù),這些任務(wù)都是由相應(yīng)的零部件狀態(tài)組成的,這些狀態(tài)即為進(jìn)入維修場(chǎng)景中的初始狀態(tài),維修過(guò)程中零部件狀態(tài)由維修規(guī)則進(jìn)行控制,最后的葉子節(jié)點(diǎn)為修復(fù)后的狀態(tài)。
3)建立任務(wù)編輯后臺(tái)
任務(wù)編輯后臺(tái)可以使用戶在眾多葉子節(jié)點(diǎn)中選擇一個(gè)節(jié)點(diǎn)作為故障原因,從根節(jié)點(diǎn)到某一葉子節(jié)點(diǎn)的路徑是唯一的,故此路徑生成的任務(wù)具有唯一性,最后將此路徑上零件狀態(tài)保存在任務(wù)文件中,加載任務(wù)時(shí)將這些狀態(tài)全部讀入場(chǎng)景。
對(duì)于生成的任務(wù)可通過(guò)選擇任務(wù)列表中的任務(wù)名將其刪除,同時(shí)刪除該任務(wù)在數(shù)據(jù)庫(kù)中的所有相關(guān)數(shù)據(jù)。
對(duì)于需要增加的任務(wù),若故障樹(shù)中無(wú)此故障,首先按故障查找的規(guī)律增加其故障樹(shù)節(jié)點(diǎn),并設(shè)置零件狀態(tài),最后再選擇葉子節(jié)點(diǎn)生成任務(wù)。
根據(jù)維修任務(wù)編輯后臺(tái)設(shè)計(jì)需求,采用AMP的開(kāi)發(fā)模式(Apache+MySQL+PHP)。
MySQL作為數(shù)據(jù)庫(kù)管理系統(tǒng),負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)、訪問(wèn)以及數(shù)據(jù)修改;利用PHP開(kāi)發(fā)維修任務(wù)編輯后臺(tái)交互界面,維修任務(wù)編輯后臺(tái)以網(wǎng)頁(yè)形式存在;使用A pache構(gòu)建網(wǎng)絡(luò)服務(wù)器,作為網(wǎng)頁(yè)訪問(wèn)數(shù)據(jù)庫(kù)的橋梁。此開(kāi)發(fā)模式具有開(kāi)發(fā)成本低、速度快、功能強(qiáng)大等優(yōu)點(diǎn)。
3.3.1 故障樹(shù)的建立
首先在數(shù)據(jù)庫(kù)中創(chuàng)建故障樹(shù)表(表1),用于存儲(chǔ)整個(gè)故障樹(shù)信息。故障樹(shù)表包括故障樹(shù)節(jié)點(diǎn)對(duì)應(yīng)的零件編號(hào)、節(jié)點(diǎn)的子節(jié)點(diǎn)組成、零件狀態(tài)、當(dāng)前狀態(tài)文字性描述、節(jié)點(diǎn)層級(jí)以及零件類型。零件狀態(tài)指零件處于裝上還是卸下的狀態(tài);節(jié)點(diǎn)層級(jí)標(biāo)識(shí)節(jié)點(diǎn)是否為根節(jié)點(diǎn);零件類型可分為“好”、“壞”和“備用”三種狀態(tài)。
表1 故障樹(shù)表
3.3.2 故障樹(shù)的顯示
故障樹(shù)顯示的關(guān)鍵在于遍歷所有的節(jié)點(diǎn),將其顯示出來(lái),通過(guò)先序遍歷遞歸算法可實(shí)現(xiàn)故障樹(shù)的遍歷。先序遍歷遞歸算法步驟:先訪問(wèn)根節(jié)點(diǎn);然后從左到右先序遍歷每棵子樹(shù);若子樹(shù)下面還有子節(jié)點(diǎn),同步驟二從左到右先序遍歷每棵子樹(shù)。
故障樹(shù)遍歷時(shí),首先訪問(wèn)根節(jié)點(diǎn),查詢根節(jié)點(diǎn)下Child ID值,若ChildID不為空,則其下還有子節(jié)點(diǎn),顯示此節(jié)點(diǎn);先序遍歷,從左到右遍歷子節(jié)點(diǎn),先查詢左子節(jié)點(diǎn),判斷有無(wú)此節(jié)點(diǎn),若沒(méi)有則結(jié)束;若有此節(jié)點(diǎn)再查詢此節(jié)點(diǎn)下ChildID值;若為空則此節(jié)點(diǎn)是葉子節(jié)點(diǎn);若不為空則為非葉子節(jié)點(diǎn),顯示此節(jié)點(diǎn);先序遍歷,從左到右遍歷子節(jié)點(diǎn),再查詢ID=ChildID的節(jié)點(diǎn);繼續(xù)循環(huán),直到全部遍歷結(jié)束,完成故障樹(shù)的顯示。遞歸遍歷流程如圖3所示。圖4中樹(shù)形結(jié)構(gòu)為某型雷達(dá)顯示系統(tǒng)部分故障樹(shù)。
3.3.3 故障樹(shù)的編輯
故障樹(shù)生成后,對(duì)于一些在故障統(tǒng)計(jì)中遺漏的故障或最新出現(xiàn)的故障,需對(duì)故障樹(shù)進(jìn)行修改,再生成任務(wù),該修改主要是對(duì)故障樹(shù)節(jié)點(diǎn)的編輯工作。
1)增加故障樹(shù)節(jié)點(diǎn)
圖3 故障樹(shù)遞歸遍歷流程
增加故障節(jié)點(diǎn)的作用是設(shè)置零件狀態(tài)及其故障現(xiàn)象,分別將設(shè)定好的數(shù)據(jù)存儲(chǔ)在故障樹(shù)表和故障現(xiàn)象顯示表中。
在圖4中選中要增加節(jié)點(diǎn)的上一級(jí)節(jié)點(diǎn),在其下增加子節(jié)點(diǎn)。首先在“新增節(jié)點(diǎn)名稱”后添加要增加的零件當(dāng)前狀態(tài)文字描述(表 1中 Desc數(shù)據(jù)),點(diǎn)擊“增加子節(jié)點(diǎn)”彈出節(jié)點(diǎn)編輯窗口,如圖5所示?!傲慵Q”后為下拉列表,從中可以選擇所需零件名,若下拉列表中無(wú)某零件備件,可事先點(diǎn)擊“創(chuàng)建備用項(xiàng)”增加備件?!傲慵顟B(tài)”中前下拉列表中是確定零件是在裝備上還是處于卸下的狀態(tài)(表1中Status數(shù)據(jù)),后下拉列表中為零件類型,有“良好”、“故障”和“備用”三種零件狀態(tài)可供選擇(表1中A ccessoryType數(shù)據(jù))。
圖4 任務(wù)編輯后臺(tái)操作界面
圖5 增加節(jié)點(diǎn)窗口
故障現(xiàn)象顯示表需要增加表2中內(nèi)容。故障類型有四種:動(dòng)畫(huà)、改變紋理、粒子系統(tǒng)和音效,可根據(jù)需要進(jìn)行選擇;故障文件名中添加故障現(xiàn)象模型文件,在任務(wù)加載時(shí)系統(tǒng)根據(jù)故障類型查找不同的文件存放目錄,直到找到文件;故障現(xiàn)象顯示與隱藏受其它零件狀態(tài)的約束,分別設(shè)置顯示和隱藏狀態(tài)下的約束零件及其狀態(tài)。最后將設(shè)置信息保存在故障樹(shù)表中,增加節(jié)點(diǎn)設(shè)置完畢。
表2 故障現(xiàn)象顯示表
2)刪除故障樹(shù)節(jié)點(diǎn)
刪除節(jié)點(diǎn)與增加節(jié)點(diǎn)編輯相似,都是對(duì)數(shù)據(jù)庫(kù)中故障樹(shù)表和故障現(xiàn)象顯示表的數(shù)據(jù)庫(kù)操作。
3.3.4 任務(wù)生成
從根節(jié)點(diǎn)到某一葉子節(jié)點(diǎn)的路徑組成的故障樹(shù)分支即為一個(gè)任務(wù)。選擇圖4任務(wù)編輯后臺(tái)操作界面故障樹(shù)中任意一葉子節(jié)點(diǎn),再點(diǎn)擊“生成新任務(wù)”,系統(tǒng)紀(jì)錄整條路徑下所有節(jié)點(diǎn)ID,保存在任務(wù)信息表中,作為最后訓(xùn)練成績(jī)?cè)u(píng)估用;路徑下所有零件狀態(tài)保存在任務(wù)零件組成表中。
若需要?jiǎng)h除任務(wù),則選擇需要?jiǎng)h除的任務(wù)名,點(diǎn)擊“刪除任務(wù)”,系統(tǒng)將任務(wù)信息表和任務(wù)零件表中的相關(guān)信息刪除,即可實(shí)現(xiàn)任務(wù)的刪除。
3.3.5 任務(wù)加載
1)建立程序與數(shù)據(jù)庫(kù)之間的連接
在任務(wù)加載之前先建立程序與數(shù)據(jù)庫(kù)之間的連接。程序發(fā)出建立連接請(qǐng)求,打開(kāi)MySQL數(shù)據(jù)庫(kù),初始化MySQL對(duì)象,將數(shù)據(jù)庫(kù)地址、用戶名、密碼以及數(shù)據(jù)庫(kù)名稱等賦給該對(duì)象;若連接成功則可進(jìn)行數(shù)據(jù)查詢。
2)對(duì)數(shù)據(jù)表數(shù)據(jù)的讀取
系統(tǒng)根據(jù)需要調(diào)用不同的查詢語(yǔ)句對(duì)相關(guān)信息進(jìn)行查詢,并將查詢結(jié)果存儲(chǔ)在內(nèi)存中。查詢語(yǔ)句如下代碼:
該查詢語(yǔ)句是對(duì)任務(wù)信息表進(jìn)行查詢,找到對(duì)應(yīng)的任務(wù)后逐次將此任務(wù)中的所有信息取出。最后將維修任務(wù)顯示在場(chǎng)景中。圖6、7分別為艦員級(jí)雷達(dá)維修訓(xùn)練系統(tǒng)任務(wù)加載后的操作界面。
文章在對(duì)維修任務(wù)設(shè)計(jì)方法研究現(xiàn)狀進(jìn)行分析的基礎(chǔ)上,針對(duì)目前維修任務(wù)編輯方面的不足,提出了基于故障樹(shù)的任務(wù)編輯后臺(tái)的設(shè)計(jì)方法,并利用相關(guān)平臺(tái)實(shí)現(xiàn)了對(duì)維修任務(wù)編輯后臺(tái)功能的開(kāi)發(fā)。該維修任務(wù)編輯后臺(tái)現(xiàn)已成功應(yīng)用在某艦員級(jí)雷達(dá)虛擬維修訓(xùn)練系統(tǒng)上,試驗(yàn)證明其能較好的解決目前虛擬維修訓(xùn)練系統(tǒng)任務(wù)編輯方面存在的不足,滿足系統(tǒng)設(shè)計(jì)需求。
[1]Fuhua L,Chuan-Jun Su,Mitchell MT.An agent-based approach to developing intelligent virtual reality-based training systems[C]∥Proceedings11th IEEE International Conference on,1999:253~260
[2]周棟,呂川.虛擬維修仿真建模與控制實(shí)現(xiàn)[J].北京航空航天大學(xué)學(xué)報(bào),2006,7(7):843~846
[3]劉穎,朱元昌,邸彥強(qiáng).面向維修訓(xùn)練的故障建模、仿真與評(píng)估[J].計(jì)算機(jī)工程,2007,13(7):245~247
[4]劉穎.通用雷達(dá)裝備虛擬維修訓(xùn)練系統(tǒng)[D].石家莊:軍械工程學(xué)院,2005,3
[5]吳丹.基于VR的飛機(jī)電源系統(tǒng)故障仿真技術(shù)研究[D].南京:南京航空航天大學(xué),2004,2