朱國濤,付戰(zhàn)平,田 濤
(海軍航空工程學(xué)院青島分院,山東 青島 266041)
虛擬維修訓(xùn)練以其安全、經(jīng)濟、高效、可控、不受氣候條件和場地空間限制的特點,以及既能進行常規(guī)操作訓(xùn)練、又能訓(xùn)練人員處理各種事故(包括災(zāi)難性事故)的應(yīng)變能力以及高效率、高效益等獨特優(yōu)勢,得到了廣發(fā)應(yīng)用和發(fā)展[1,2]。
機電產(chǎn)品的維修是按照產(chǎn)品維護規(guī)程的要求進行的,產(chǎn)品維護規(guī)程和拆卸安裝序列的描述是開發(fā)虛擬維修訓(xùn)練系統(tǒng)的重要工作之一。所謂拆卸安裝序列就是產(chǎn)品在拆卸或安裝時產(chǎn)生的不同拆卸順序[3],對于一個產(chǎn)品,按照零件的排列組合,可能的拆卸安裝序列有幾個、幾十個乃至上百個。目前,國內(nèi)外研究的虛擬拆裝信息的表達技術(shù)目前有如下幾種:基于圖形的表示方法,如有向圖、無向圖及網(wǎng)絡(luò)圖等;基于與或圖的表示方法;基于關(guān)系數(shù)據(jù)庫的方法;面向?qū)ο蟮姆椒ǖ龋?-5]。
大型復(fù)雜機電產(chǎn)品的配套維修手冊詳細規(guī)定了維修人員在進行產(chǎn)品維修保障時的工作內(nèi)容、步驟和要求,機電產(chǎn)品的維修手冊通常將產(chǎn)品維修步驟按照章節(jié)目錄的形式組織到一起,這是一種典型的樹形結(jié)構(gòu)。在進行產(chǎn)品的維修保障時,維修人員通常都按照維修手冊規(guī)定的內(nèi)容、步驟和要求進行操作。
如果在產(chǎn)品維修過程中嚴(yán)格按照維修手冊的章節(jié)順序進行操作,那么形成拆卸安裝序列就是一種固定的順序結(jié)構(gòu)。但實際上,維修手冊中的許多操作步驟是可以并行進行的。尤其在大型復(fù)雜機電產(chǎn)品的維修保障過程中,通常由多個維修人員按分工并行操作以完成整個維修過程。因此在虛擬維修訓(xùn)練系統(tǒng)的開發(fā)中,產(chǎn)品的拆卸和安裝的約束關(guān)系不能僅僅用維修手冊的樹型順序結(jié)構(gòu)來描述,而必須采用能夠體現(xiàn)產(chǎn)品維修并行操作特征的方法來描述。
虛擬維修過程中另一個不可避免的問題是如何對裝備及其附屬設(shè)備進行操作,這部分工作屬于虛擬裝配的研究內(nèi)容。在虛擬維修訓(xùn)練中則不需要考慮這些問題,虛擬維修訓(xùn)練的目的是實現(xiàn)對維修人員的培訓(xùn),拆卸和安裝都是它的一個中間階段,因此,在虛擬維修訓(xùn)練系統(tǒng)中,可以采用較為簡單的方法來描述拆卸安裝序列。
本文是以某型減速器進行拆卸的維護規(guī)程為例,為說明問題,對實際維護手冊中的規(guī)程進行了簡化處理。分析此維護規(guī)程的內(nèi)容,可以發(fā)現(xiàn)維護規(guī)程以樹型結(jié)構(gòu)表示的規(guī)程條目內(nèi)容具有如下特點。
1)維修工作是由一系列維修動作組合而成的,維修手冊將描述這些維修動作的條目按照樹型結(jié)構(gòu)組織到一起。在該結(jié)構(gòu)中,每個葉子節(jié)點都對應(yīng)維修過程中的一個維修動作,而枝干節(jié)點不對應(yīng)任何實際的維修動作,只是用于合理地劃分和組織維修動作。
2)在維修手冊中,各節(jié)點所表述的維修動作的約束關(guān)系是發(fā)生在兄弟節(jié)點之間的,在不同等級的節(jié)點之間沒有直接的約束關(guān)系。
3)完成具有子節(jié)點的條目所描述的動作的充要條件是其所包含的所有子節(jié)點對應(yīng)的動作均已完成。
4)維護規(guī)程中某些條目之間沒有拆卸安裝和先后順序要求,可以并行進行。
面向虛擬維修訓(xùn)練的產(chǎn)品維修規(guī)程和拆卸安裝序列描述首先要解決產(chǎn)品維護規(guī)程的可視化問題。由于產(chǎn)品維護規(guī)程整體上是一個樹形結(jié)構(gòu)。因此可以采用圖1所示的描述方法:維護規(guī)程的每個節(jié)點都具有一個唯一的ID,字節(jié)點的parent字段存儲著其枝干節(jié)點的ID,同時維護規(guī)程的每個節(jié)點都具有以下幾個指針:指向父節(jié)點的指針pFather、指向下一個兄弟節(jié)點的指針pBrother和指向第一個子節(jié)點的指針pChild。那么依照節(jié)點之間的指針關(guān)系,就可以構(gòu)造出整個維護規(guī)程的樹形結(jié)構(gòu)。
該樹形結(jié)構(gòu)并沒有對節(jié)點之間的拆卸約束關(guān)系做任何描述,維護規(guī)程控件對拆卸安裝序列的描述采用有向圖方法。有向圖方法以圖的節(jié)點表示拆卸安裝操作的一個工步,以節(jié)點之間帶箭頭的連線表示各工步之間的約束關(guān)系,這種方法直觀地顯示了拆卸或安裝的先后順序,因此非常適合虛擬維修訓(xùn)練系統(tǒng)的開發(fā)。
圖1 操作維護規(guī)程的樹型結(jié)構(gòu)示例
為了實現(xiàn)有向圖的結(jié)構(gòu),編程時,除描述節(jié)點的樹型結(jié)構(gòu)的字段外,每個節(jié)點都有一個前序節(jié)點序列和一個后續(xù)節(jié)點序列。其中前序節(jié)點是指在進行該節(jié)點操作時,必須先完成的節(jié)點操作,前序節(jié)點序列保存了所有的前序節(jié)點的ID。后續(xù)節(jié)點指的是必須在該節(jié)點操作完成后才能進行操作的節(jié)點,后續(xù)節(jié)點序列保存了所有后續(xù)節(jié)點的ID。
圖2 操作維護規(guī)程的有向圖結(jié)構(gòu)示例
圖2所示為某型減速器維護規(guī)程的有向圖結(jié)構(gòu),圖中的每個節(jié)點,都存在一個保存節(jié)點間操作先后順序的依賴節(jié)點序列和后續(xù)節(jié)點序列,例如步驟2.1存在一個ID為6的后續(xù)節(jié)點(即步驟2.2),這樣在步驟2.1和2.2中就構(gòu)成了操作的先后順序。在程序中就可以根據(jù)節(jié)點ID、前序節(jié)點序列和后續(xù)節(jié)點序列將原本為樹型結(jié)構(gòu)的操作維護規(guī)程組織成如圖2所示的樹型-有向圖混合結(jié)構(gòu)。
XML是擴展標(biāo)記語言extensible makeup language的縮寫,是通用標(biāo)記語言SGML的一個子集。XML文檔由XML元素組成,XML元素以樹型結(jié)構(gòu)存儲,包含開始標(biāo)簽和結(jié)束標(biāo)簽,標(biāo)簽之間的信息成為元素的內(nèi)容。XML的最大特點是:其標(biāo)簽并非事先定義好的,而是提供了一個標(biāo)準(zhǔn),利用這個標(biāo)準(zhǔn),用戶可以根據(jù)實際需求定義一套自己特有的標(biāo)簽[7]。
考慮到XML可擴展的優(yōu)點和維護規(guī)程描述的實際需求,可以用XML來描述維護規(guī)程的內(nèi)容及其各節(jié)點之間的約束關(guān)系,并將其以文件的形式存儲在磁盤上,在程序運行時由維護規(guī)程控件從磁盤加載并顯示。下面以某產(chǎn)品維護規(guī)程文件的部分內(nèi)容來說明規(guī)程文件的格式定義。
在上述維護規(guī)程文件中,每個node字段對應(yīng)產(chǎn)品維護規(guī)程和拆卸安裝序列中的一個節(jié)點,每個節(jié)點都有一個id屬性和parent屬性,其中id屬性記錄了節(jié)點的ID,是全局唯一的。parent屬性表明了此節(jié)點的父節(jié)點,如果parent屬性為0,表明該節(jié)點是一個根節(jié)點。在name、text字段中分別記錄了節(jié)點的章節(jié)序號和文本內(nèi)容等。prev和next字段分別記錄了節(jié)點的前序節(jié)點序列和后續(xù)節(jié)點序列,序列中的多個ID以逗號隔開。
維護規(guī)程控件的約束解算是指在某個規(guī)程條目所表示的維修動作完成以后,將此規(guī)程條目狀態(tài)改變?yōu)橐淹瓿?,并根?jù)節(jié)點間的約束關(guān)系對相關(guān)聯(lián)的節(jié)點條目的狀態(tài)變化進行處理。操作規(guī)程控件的約束解算主要由兩個成員函數(shù)完成,分別是stepComplete和stepEnable。其中stepComplete是在規(guī)程條目所表示的維修動作完成時由虛擬維修程序框架調(diào)用。
stepComplete和stepEnable的程序流程分別如圖3中(a)和(b)所示。
圖3 邏輯解析的流程圖
stepComplete的調(diào)用將使得維護規(guī)程控件可以進行約束解算,其流程為:首先根據(jù)函數(shù)傳入的節(jié)點ID找到節(jié)點,然后判斷節(jié)點的狀態(tài),如果節(jié)點狀態(tài)為可以執(zhí)行狀態(tài),則將節(jié)點狀態(tài)改變?yōu)閳?zhí)行完畢狀態(tài)。然后根據(jù)此節(jié)點的后續(xù)節(jié)點序列遍歷所有后續(xù)節(jié)點,對每一個后續(xù)節(jié)點執(zhí)行一次stepEnable。最后,依據(jù)pFather指針得到父節(jié)點,并遍歷父節(jié)點的所有子節(jié)點。如果所有子節(jié)點的狀態(tài)均為已完成,則對父節(jié)點遞歸執(zhí)行stepCompelete。
stepEnable用于相關(guān)聯(lián)的規(guī)程條目的解鎖。它根據(jù)傳入的節(jié)點ID找到節(jié)點并遍歷其前序節(jié)點序列,如果所有的前序節(jié)點均為已完成狀態(tài),則將節(jié)點狀態(tài)置為可以進行狀態(tài),如果當(dāng)前節(jié)點擁有子節(jié)點,遍歷其子節(jié)點。如果某個子節(jié)點的前序節(jié)點序列為空,則將其子節(jié)點狀態(tài)改變?yōu)榭蓤?zhí)行。
本文使用Visual C++7.1/MFC編寫由CWnd類派生的維護規(guī)程控件CRuleWnd,維護規(guī)程控件的實現(xiàn)效果如圖4所示。它提供了兩種顯示方式:按照規(guī)程組織的樹型結(jié)構(gòu)和按照約束組織的有向圖結(jié)構(gòu)。圖中不同背景顏色的節(jié)點代表不同的操作狀態(tài)。節(jié)點共有三種狀態(tài):完成狀態(tài)(表示該節(jié)點對應(yīng)的操作已經(jīng)完成),可以進行狀態(tài)(表示該節(jié)點對應(yīng)的操作可以進行,但還沒有完成),不能進行狀態(tài)(表示該節(jié)點由于約束關(guān)系還不能進行操作)。系統(tǒng)同時提供了規(guī)程編輯器以解決維護規(guī)程文件的可視化編輯問題,其界面如圖5所示。
圖4 維護規(guī)程控件的兩種顯示方式
圖5 維護規(guī)程的可視化編輯工具
上述實踐表明,針對虛擬維修訓(xùn)練對產(chǎn)品維護規(guī)程的要求和產(chǎn)品維護規(guī)程的特點,通過樹型-有向圖混合結(jié)構(gòu)的方法來統(tǒng)一的描述產(chǎn)品維護規(guī)程和拆卸安裝序列,可以有效解決虛擬維修訓(xùn)練中產(chǎn)品維護規(guī)程的同步直觀顯示、拆卸安裝序列的約束解算等問題。
[1]楊宇航,李志忠,等.虛擬維修研究綜述[J].系統(tǒng)仿真學(xué)報,2005,17(9):2192-2195.
[2]馬麟.虛擬維修過程模型的研究[D].北京:北京航空航天大學(xué),2003.
[3]劉振宇,譚建榮,張樹有.虛擬環(huán)境中基于約束動態(tài)解除的產(chǎn)品拆卸技術(shù)研究[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2003,5(7):812-816.
[4]孔令函,陳軍,姜俊澤,等.基于維修性的產(chǎn)品拆卸序列方法研究[J].后勤工程學(xué)院學(xué)報,2011,27(5):2.
[5]鄭軼,寧汝新,等.虛擬裝配關(guān)鍵技術(shù)及其發(fā)展[J].系統(tǒng)仿真學(xué)報,2006,18(3):649-654.
[6]俞斌,劉繼紅,等.基于定位立體模型的產(chǎn)品可裝配/拆卸性分析[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2002,14(1):87-92.
[7]曾春平,王超,張鵬.XML編程從入門到精通[M].北京:北京希望電子出版社,2002.