周彥菲,杜承烈,劉利江
(1.西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 7101291;2.海軍試驗(yàn)基地第二實(shí)驗(yàn)區(qū) 山東 煙臺(tái) 265700)
虛擬試驗(yàn)技術(shù)是基于先進(jìn)的建模技術(shù)、多領(lǐng)域協(xié)同仿真技術(shù)、信息集成與管理技術(shù)、工程設(shè)計(jì)分析技術(shù)、交互式用戶界面技術(shù)和虛擬現(xiàn)實(shí)技術(shù)不斷發(fā)展而來[1],憑借其有效性、經(jīng)濟(jì)性、安全性、直觀性等特點(diǎn)而受到了廣泛的采用。但是隨著虛擬試驗(yàn)系統(tǒng)的日益復(fù)雜,仿真軟件開發(fā)的工作量也成倍增加,總是從頭開發(fā)一個(gè)虛擬試驗(yàn)平臺(tái)的工作效率越來越低。在這樣的情況下,采用支持軟件復(fù)用的組件技術(shù)來構(gòu)建具有開放性、通用性的虛擬試驗(yàn)平臺(tái),使得第三方開發(fā)的功能組件能夠像搭積木一樣運(yùn)行在試驗(yàn)平臺(tái)上,而實(shí)現(xiàn)軟件的大粒度復(fù)用,對(duì)縮短開發(fā)周期、降低維護(hù)成本和提高試驗(yàn)可靠性具有重要意義。筆者分析了組件技術(shù)的特點(diǎn),借鑒其思想搭建一個(gè)接口開放、可擴(kuò)展的虛擬試驗(yàn)平臺(tái),并在該平臺(tái)基礎(chǔ)上實(shí)現(xiàn)了子母彈拋撒評(píng)估試驗(yàn)。該平臺(tái)的搭建對(duì)今后視景仿真模擬軟件的開發(fā)打下良好的基礎(chǔ),能夠有效的實(shí)現(xiàn)軟件的重用性,極大的縮短軟件的開發(fā)周期。
組件技術(shù)是近年發(fā)展起來的一種優(yōu)秀的軟件重用技術(shù),已在工程領(lǐng)域廣泛使用,但由于其自身特性使得組件到目前還沒有統(tǒng)一的定義,組件的含義可以從以下幾方面來理解:
1)組件是一個(gè)分布對(duì)象。這表明組件須按統(tǒng)一接口規(guī)范想外界聲明服務(wù)。
2)組件是完成特定功能的軟件模塊。這又規(guī)定了組件與一般的簡單的控件的區(qū)別。從概念上講,簡單控件也可以屬于組件但組件的粒度比簡單空間粗,組件應(yīng)由簡單控件組成[2]。
3)組件是具有特定功能的、能夠跨越進(jìn)程的邊界,實(shí)現(xiàn)網(wǎng)絡(luò)、語言、應(yīng)用程序、開發(fā)工具和操作系統(tǒng)“即插即用”的獨(dú)立的對(duì)象[3]。
總結(jié)起來,可認(rèn)為組件包含技術(shù)和工程兩方面的因素:在技術(shù)方面,組件可以進(jìn)行二進(jìn)制級(jí)別上的繼承和重用,它提供對(duì)功能的封裝,外部通過接口來訪問它的服務(wù),使得復(fù)用組件不一定需要源代碼;在工程方面,組件可被獨(dú)立的生產(chǎn)、獲得和配置,它允許被無縫地集成到第三方所開發(fā)的軟件系統(tǒng)中,從這個(gè)角度看,使用組件最理想的方式是采用拼圖的方法將已有的組件構(gòu)建一個(gè)應(yīng)用。
目前,隨著對(duì)軟件復(fù)用理解的深入,組件的概念已不再局限于源代碼,而是延伸到需求、系統(tǒng)和軟件的需求規(guī)約、系統(tǒng)和軟件的構(gòu)架、文檔、測(cè)試計(jì)劃、測(cè)試案例和數(shù)據(jù)等所有對(duì)開發(fā)活動(dòng)有用的信息,這些信息都可以稱為可復(fù)用軟件的組件,其組件結(jié)構(gòu)如圖1所示。
圖1 組件結(jié)構(gòu)模型Fig.1 Model of component structure
面向?qū)ο蠓椒ǖ幕A(chǔ)是封裝,實(shí)現(xiàn)接口與實(shí)現(xiàn)分離,核心是多態(tài)。通過將信息隱藏,使調(diào)用者不需要了解實(shí)現(xiàn)細(xì)節(jié)而且使得對(duì)一個(gè)對(duì)象內(nèi)部的修改不會(huì)影響其他對(duì)象,系統(tǒng)的可維護(hù)性很好,易于修改;缺點(diǎn)是耦合度依然較高,例如對(duì)象間的交互必須了解被交互對(duì)象的標(biāo)志。而且若某一對(duì)象標(biāo)志改變了,顯式調(diào)用該對(duì)象的其他對(duì)象都需改變。組件方法是對(duì)面向?qū)ο蟮能浖_發(fā)方法的進(jìn)一步發(fā)展,其更核心的概念是接口,主要目標(biāo)是粗粒度的復(fù)用。通過引入屬性和事件作為更高級(jí)的支撐,很好的解決了類之間相互依賴/消息傳遞問題。面向?qū)ο蠓椒ê徒M件方法間的關(guān)系如表1所示。
表1 面向?qū)ο蠛徒M件技術(shù)的比較Tab.1 Differences between object-oriented and component technology
通過深入研究現(xiàn)有驗(yàn)證系統(tǒng)對(duì)虛擬試驗(yàn)平臺(tái)的需求,并結(jié)合子母彈拋撒評(píng)估試驗(yàn)需求,總結(jié)出平臺(tái)架構(gòu)需要滿足參數(shù)錄入、2D/3D目標(biāo)場景建立以及試驗(yàn)?zāi)M引擎幾大模塊,其中目標(biāo)場景建立的2D/3D表現(xiàn)部分相對(duì)獨(dú)立。由于目前的虛擬試驗(yàn)軟件大多使用結(jié)構(gòu)化的開發(fā)方法,系統(tǒng)耦合高,難以復(fù)用,導(dǎo)致即使用戶需求的發(fā)生輕微的變化,都需要對(duì)模型進(jìn)行重新開發(fā)。針對(duì)這些問題,要求搭建的平臺(tái)滿足以下需求:
1)可擴(kuò)展性:新添加組件不依賴現(xiàn)有的功能組件,添加的新組件可在平臺(tái)中得到動(dòng)態(tài)支持,并能協(xié)同工作;
2)易用性:包含對(duì)硬件設(shè)備要求低和軟件設(shè)計(jì)界面的簡潔實(shí)用;
3)數(shù)據(jù)重視性:強(qiáng)大的數(shù)據(jù)管理功能,包括數(shù)據(jù)的精度、記錄、管理及分析功能,方便用戶在試驗(yàn)后的分析或場景重現(xiàn)的建立。
虛擬試驗(yàn)平臺(tái)提供一個(gè)集成的可視化的編輯環(huán)境,使用MS3D制作模型,通過解析XML文件動(dòng)態(tài)生成所需的配置界面,調(diào)用OpenGL提供的API實(shí)現(xiàn)可視化功能,利用網(wǎng)絡(luò)通信組件進(jìn)行分步節(jié)點(diǎn)間的通信,集合這些關(guān)鍵技術(shù)搭建一個(gè)易于擴(kuò)展的平臺(tái)架構(gòu),平臺(tái)架構(gòu)圖如圖2所示。
圖2 虛擬試驗(yàn)平臺(tái)結(jié)構(gòu)Fig.2 Model of virture test platform
組件形式化文檔采用基于XML的元數(shù)據(jù)進(jìn)行描述,主要包括兩大類組件信息:一方面是組件內(nèi)實(shí)現(xiàn)環(huán)境和細(xì)節(jié)相關(guān)的信息,包括:組件名稱,實(shí)現(xiàn)語言,可執(zhí)行代碼的位置,初始化參數(shù),API,圖標(biāo)菜單等。另一方面是與組件間相關(guān)的信息,如組件間搭載的依賴關(guān)系,使用限制條件等。
組件管理器是平臺(tái)的核心,負(fù)責(zé)管理其他所有組件的實(shí)例化和釋放。組件管理器使用工廠模式實(shí)現(xiàn)。首先,組件管理器解析XML配置文件,通過工廠模式的統(tǒng)一接口為系統(tǒng)產(chǎn)生組件實(shí)例;然后組件管理器使用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)記錄所有組件的關(guān)鍵信息,便于對(duì)所有組件進(jìn)行統(tǒng)一管理;最后組件管理器解析配置文件,為其他組件建立通信渠道,保證組件間的信息流暢通。
二維顯示模塊負(fù)責(zé)配置界面的生成,進(jìn)行試驗(yàn)參數(shù)、模型選擇和評(píng)估準(zhǔn)則的錄入。通過解析XML文件獲取配置界面信息及所處位置生成界面,并將輸入的參數(shù)保存在XML文件中;通過搭載三維顯示窗口可在配置界面對(duì)所選模型進(jìn)行三維預(yù)覽。
三維顯示模塊負(fù)責(zé)虛擬試驗(yàn)的可視化顯示??刂平M件通過解析XML文件,在分布式環(huán)境下選擇不同窗口中顯示的可視化組件,同時(shí)負(fù)責(zé)試驗(yàn)的全局時(shí)鐘推進(jìn);顯示組件是場景、導(dǎo)彈、目標(biāo)等功能組件的統(tǒng)稱,使用OpenGL技術(shù)模擬顯示;根據(jù)需求將相關(guān)的控制信息保存在XML文件中,用于場景重現(xiàn)和試驗(yàn)評(píng)估。
評(píng)估組件負(fù)責(zé)試驗(yàn)后對(duì)結(jié)果數(shù)據(jù)的詳細(xì)分析,按照用戶需求進(jìn)行具體組件開發(fā)。在子母彈拋撒試驗(yàn)中包括以二維曲線繪制V_T、H_T圖、毀傷概率、毀傷半徑等。
模型庫提供已使用第三方軟件繪制完的模型,如飛行器、靶場目標(biāo)等。使用常用的三維模型軟件如3DSMax、MilkShape3D建模,可在程序中避免使用點(diǎn)、線、面等簡單圖元和一些標(biāo)準(zhǔn)椎體來構(gòu)建復(fù)雜模型帶來的繁瑣工作,同時(shí)提高了模型的逼真度。
網(wǎng)絡(luò)通信組件提供在分布式試驗(yàn)環(huán)境下各節(jié)點(diǎn)的數(shù)據(jù)傳輸。由于軍工領(lǐng)域?qū)?shí)時(shí)性要求高,采用虛擬共享內(nèi)存提供的高速、實(shí)時(shí)、確定性的網(wǎng)絡(luò),可有效地解決試驗(yàn)系統(tǒng)中數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性問題。
文中采用VC6.0版本進(jìn)行平臺(tái)開發(fā),圖3顯示了平臺(tái)基本組件間的關(guān)系和一些重要的接口。下面詳細(xì)介紹各組件及接口的作用。
圖3 組件及接口的關(guān)系Fig.3 The relationship of components and interfaces
1)DisplayElement:基本繪圖組件,提供圖形的繪制接口,功能組件調(diào)用或重載該Draw接口,完成具體的繪制功能。
2)Component:基本通信組件,提供兩個(gè)基本接口,用于組件間消息的傳遞,其中Notify接口用于向上一級(jí)組件傳遞消息,Report接口用于向底層組件回報(bào)消息。
3)DisplayPanel:基本窗口組件,用于提供顯示窗口的重繪和刷新等基本功能。
4)DisplayComponent:繼承自 Component和 DisplayElement,具備消息通信能力以及圖形繪制能力,添加DrawComponent接口用于指定為第幾號(hào)組件提供DC。
5)DisplayPanelComponent:基本窗口組件, 繼承自DisplayPanel和Component,具備消息通信能力,同時(shí)提供用于界面或圖形的顯示窗口。
6)EditPanel:基本界面配置組件,繼承自Component和DisplayPanel,具備消息通信及界面編輯能力,用于試驗(yàn)參數(shù)等信息配置窗口的生成;通過DrawComponent接口獲得配置組件的XML信息和工具條生成配置界面,并通過SaveProject接口將錄入信息保存在指定的XML中。
7)2DDisplayComponent:基本二維圖形繪制組件,繼承自DisplayComponent,通過重載Draw接口,具備類似于 WORD中二維圖形繪制能力,同時(shí)添加Move、Delete等功能接口。
8)3DDisplayComponent:基本三維圖形繪制組件,繼承自DisplayComponent,重載Draw接口來調(diào)用OpenGL提供的函數(shù),實(shí)現(xiàn)三維顯示功能,其中Rotate就是調(diào)用OpenGL函數(shù)的一個(gè)典型接口,它實(shí)現(xiàn)了對(duì)指定模型的三維旋轉(zhuǎn)。
繪圖組件和界面配置組件都需要加載在窗口組件上。窗口組件通過調(diào)用Draw接口,通知掛在在他之上的繪圖組件,繪圖組件依次調(diào)用自己的Draw方法進(jìn)行繪制,并在窗口上顯示,完成可視化;窗口組件通過響應(yīng)菜單命令,讀取相關(guān)的XML文件完成配置界面的生成。
使用上述虛擬試驗(yàn)平臺(tái)接口,通過開發(fā)并加載需要的功能組件實(shí)現(xiàn)了某型號(hào)子母彈拋撒評(píng)估試驗(yàn),完整的實(shí)現(xiàn)了從模型選取、參數(shù)配置到可視化仿真以及詳細(xì)的試驗(yàn)結(jié)果評(píng)估。Q其中,子彈參數(shù)、目標(biāo)形態(tài)、評(píng)價(jià)方案等配置界面可使用統(tǒng)一的組件,通過解析各自的XML文件獲取界面信息;二維圖形繪制組件完成子母彈攻擊目標(biāo)的生成,并將所繪圖形的ID和節(jié)點(diǎn)按規(guī)定格式保存在目標(biāo)庫內(nèi);三維顯示組件包括飛行場景、導(dǎo)彈、尾焰、爆炸、拋撒及計(jì)算組件,其中計(jì)算組件負(fù)責(zé)導(dǎo)彈飛行和子彈拋撒時(shí)模型的飛行引導(dǎo)。圖4分別給出了程序運(yùn)行時(shí)子母彈飛行和爆破后子彈拋撒的效果圖。
圖4 子母彈飛行及子彈拋撒示意圖Fig.4 Schematic diagram of shrapnel flight and ejection
通過在將組件技術(shù)用于開發(fā)虛擬試驗(yàn)平臺(tái)的實(shí)踐證明,雖然利用組件技術(shù)在設(shè)計(jì)試驗(yàn)初期,需要在領(lǐng)域內(nèi)對(duì)平臺(tái)需求進(jìn)行深入分析,搭建具有許多冗余接口的框架,而且在編寫基本的程序組件看不到系統(tǒng)實(shí)現(xiàn)的進(jìn)度,使用的精力、時(shí)間要多一些,但很多通用功能組件能在擴(kuò)展中得到重用,可以大大提高軟件開發(fā)效率,大幅度降低系統(tǒng)的開發(fā)費(fèi)用;同時(shí)當(dāng)一個(gè)系統(tǒng)需求發(fā)生變化和擴(kuò)展系統(tǒng)時(shí),只需修改或開發(fā)相應(yīng)的組件而不改變系統(tǒng)的其他部分,如需要災(zāi)難事故模擬時(shí),只需添加新的模型,修改部分控制組件即可,這些工作可以并行進(jìn)行,提高時(shí)效性。結(jié)合文獻(xiàn)[5][6]等人使用組件技術(shù)的經(jīng)驗(yàn),今后可以在框架基礎(chǔ)上開發(fā)更多目標(biāo)明確的組件接口,以適應(yīng)更廣泛的虛擬試驗(yàn)需求。
[1]支超有,李振水,薛峰.基于模型組件的虛擬試驗(yàn)系統(tǒng)框架研究[J].計(jì)算機(jī)測(cè)量與控制,2011,19(4):890-893.ZHI Chao-you,LI Zhen-shui,XUE Feng.Research for virtual test system framework based on software model component[J].Computer Measurement&Control,2011,19(4):890-893.
[2]鄧邵芳.組件技術(shù)在軟件開發(fā)中的應(yīng)用研究 [D].成都:西南交通大學(xué),2001.
[3]舒振,張耀鴻,羅雪山.基于組件的軟件開發(fā)方法在C3I系統(tǒng)仿真中的應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用研究,2004(10):182-184.SHU Zhen,ZHANG Yao-hong,LUO Xue-shan.Application and research of C3I system simulation using the method of software development based on component[J].Application Research of Computers,2004(10):182-184.
[4]寧偉,杜承烈.廣播內(nèi)存網(wǎng)在實(shí)時(shí)半實(shí)物仿真系統(tǒng)中的實(shí)現(xiàn)[J].測(cè)控技術(shù),2006,25(8):76-77.NING Wei,DU Cheng-lie.Realization of real-time HLS based on broadcast memory network[J].Measurement&Control Techniques,2006,25(8):76-77.
[5]張童,劉云生,查亞兵.可組合仿真系統(tǒng)的概念框架研究[J].系統(tǒng)仿真學(xué)報(bào),2007,19(8):1710-1712.ZHANG Tong,LIU Yun-sheng,ZHA Ya-bing.Research of concept framework for composable simulation system[J].Journal of System Simulation,2007,19(8):1710-1712.
[6]戰(zhàn)德臣,王忠杰.一種基于組件的復(fù)雜應(yīng)用系統(tǒng)開發(fā)過程[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2002,34(6):748-752.ZHAN De-chen,WANG Zhong-jie.Development process for component-based complex application system[J].Journal of Harbin Institute of Technology,2002,34(6):748-752.