周彥菲,杜承烈,劉利江
(1.西北工業大學 計算機學院,陜西 西安 7101291;2.海軍試驗基地第二實驗區 山東 煙臺 265700)
虛擬試驗技術是基于先進的建模技術、多領域協同仿真技術、信息集成與管理技術、工程設計分析技術、交互式用戶界面技術和虛擬現實技術不斷發展而來[1],憑借其有效性、經濟性、安全性、直觀性等特點而受到了廣泛的采用。但是隨著虛擬試驗系統的日益復雜,仿真軟件開發的工作量也成倍增加,總是從頭開發一個虛擬試驗平臺的工作效率越來越低。在這樣的情況下,采用支持軟件復用的組件技術來構建具有開放性、通用性的虛擬試驗平臺,使得第三方開發的功能組件能夠像搭積木一樣運行在試驗平臺上,而實現軟件的大粒度復用,對縮短開發周期、降低維護成本和提高試驗可靠性具有重要意義。筆者分析了組件技術的特點,借鑒其思想搭建一個接口開放、可擴展的虛擬試驗平臺,并在該平臺基礎上實現了子母彈拋撒評估試驗。該平臺的搭建對今后視景仿真模擬軟件的開發打下良好的基礎,能夠有效的實現軟件的重用性,極大的縮短軟件的開發周期。
組件技術是近年發展起來的一種優秀的軟件重用技術,已在工程領域廣泛使用,但由于其自身特性使得組件到目前還沒有統一的定義,組件的含義可以從以下幾方面來理解:
1)組件是一個分布對象。這表明組件須按統一接口規范想外界聲明服務。
2)組件是完成特定功能的軟件模塊。這又規定了組件與一般的簡單的控件的區別。從概念上講,簡單控件也可以屬于組件但組件的粒度比簡單空間粗,組件應由簡單控件組成[2]。
3)組件是具有特定功能的、能夠跨越進程的邊界,實現網絡、語言、應用程序、開發工具和操作系統“即插即用”的獨立的對象[3]。
總結起來,可認為組件包含技術和工程兩方面的因素:在技術方面,組件可以進行二進制級別上的繼承和重用,它提供對功能的封裝,外部通過接口來訪問它的服務,使得復用組件不一定需要源代碼;在工程方面,組件可被獨立的生產、獲得和配置,它允許被無縫地集成到第三方所開發的軟件系統中,從這個角度看,使用組件最理想的方式是采用拼圖的方法將已有的組件構建一個應用。
目前,隨著對軟件復用理解的深入,組件的概念已不再局限于源代碼,而是延伸到需求、系統和軟件的需求規約、系統和軟件的構架、文檔、測試計劃、測試案例和數據等所有對開發活動有用的信息,這些信息都可以稱為可復用軟件的組件,其組件結構如圖1所示。

圖1 組件結構模型Fig.1 Model of component structure
面向對象方法的基礎是封裝,實現接口與實現分離,核心是多態。通過將信息隱藏,使調用者不需要了解實現細節而且使得對一個對象內部的修改不會影響其他對象,系統的可維護性很好,易于修改;缺點是耦合度依然較高,例如對象間的交互必須了解被交互對象的標志。而且若某一對象標志改變了,顯式調用該對象的其他對象都需改變。組件方法是對面向對象的軟件開發方法的進一步發展,其更核心的概念是接口,主要目標是粗粒度的復用。通過引入屬性和事件作為更高級的支撐,很好的解決了類之間相互依賴/消息傳遞問題。面向對象方法和組件方法間的關系如表1所示。

表1 面向對象和組件技術的比較Tab.1 Differences between object-oriented and component technology
通過深入研究現有驗證系統對虛擬試驗平臺的需求,并結合子母彈拋撒評估試驗需求,總結出平臺架構需要滿足參數錄入、2D/3D目標場景建立以及試驗模擬引擎幾大模塊,其中目標場景建立的2D/3D表現部分相對獨立。由于目前的虛擬試驗軟件大多使用結構化的開發方法,系統耦合高,難以復用,導致即使用戶需求的發生輕微的變化,都需要對模型進行重新開發。針對這些問題,要求搭建的平臺滿足以下需求:
1)可擴展性:新添加組件不依賴現有的功能組件,添加的新組件可在平臺中得到動態支持,并能協同工作;
2)易用性:包含對硬件設備要求低和軟件設計界面的簡潔實用;
3)數據重視性:強大的數據管理功能,包括數據的精度、記錄、管理及分析功能,方便用戶在試驗后的分析或場景重現的建立。
虛擬試驗平臺提供一個集成的可視化的編輯環境,使用MS3D制作模型,通過解析XML文件動態生成所需的配置界面,調用OpenGL提供的API實現可視化功能,利用網絡通信組件進行分步節點間的通信,集合這些關鍵技術搭建一個易于擴展的平臺架構,平臺架構圖如圖2所示。

圖2 虛擬試驗平臺結構Fig.2 Model of virture test platform
組件形式化文檔采用基于XML的元數據進行描述,主要包括兩大類組件信息:一方面是組件內實現環境和細節相關的信息,包括:組件名稱,實現語言,可執行代碼的位置,初始化參數,API,圖標菜單等。另一方面是與組件間相關的信息,如組件間搭載的依賴關系,使用限制條件等。
組件管理器是平臺的核心,負責管理其他所有組件的實例化和釋放。組件管理器使用工廠模式實現。首先,組件管理器解析XML配置文件,通過工廠模式的統一接口為系統產生組件實例;然后組件管理器使用統一的數據結構記錄所有組件的關鍵信息,便于對所有組件進行統一管理;最后組件管理器解析配置文件,為其他組件建立通信渠道,保證組件間的信息流暢通。
二維顯示模塊負責配置界面的生成,進行試驗參數、模型選擇和評估準則的錄入。通過解析XML文件獲取配置界面信息及所處位置生成界面,并將輸入的參數保存在XML文件中;通過搭載三維顯示窗口可在配置界面對所選模型進行三維預覽。
三維顯示模塊負責虛擬試驗的可視化顯示。控制組件通過解析XML文件,在分布式環境下選擇不同窗口中顯示的可視化組件,同時負責試驗的全局時鐘推進;顯示組件是場景、導彈、目標等功能組件的統稱,使用OpenGL技術模擬顯示;根據需求將相關的控制信息保存在XML文件中,用于場景重現和試驗評估。
評估組件負責試驗后對結果數據的詳細分析,按照用戶需求進行具體組件開發。在子母彈拋撒試驗中包括以二維曲線繪制V_T、H_T圖、毀傷概率、毀傷半徑等。
模型庫提供已使用第三方軟件繪制完的模型,如飛行器、靶場目標等。使用常用的三維模型軟件如3DSMax、MilkShape3D建模,可在程序中避免使用點、線、面等簡單圖元和一些標準椎體來構建復雜模型帶來的繁瑣工作,同時提高了模型的逼真度。
網絡通信組件提供在分布式試驗環境下各節點的數據傳輸。由于軍工領域對實時性要求高,采用虛擬共享內存提供的高速、實時、確定性的網絡,可有效地解決試驗系統中數據傳輸的實時性問題。
文中采用VC6.0版本進行平臺開發,圖3顯示了平臺基本組件間的關系和一些重要的接口。下面詳細介紹各組件及接口的作用。

圖3 組件及接口的關系Fig.3 The relationship of components and interfaces
1)DisplayElement:基本繪圖組件,提供圖形的繪制接口,功能組件調用或重載該Draw接口,完成具體的繪制功能。
2)Component:基本通信組件,提供兩個基本接口,用于組件間消息的傳遞,其中Notify接口用于向上一級組件傳遞消息,Report接口用于向底層組件回報消息。
3)DisplayPanel:基本窗口組件,用于提供顯示窗口的重繪和刷新等基本功能。
4)DisplayComponent:繼承自 Component和 DisplayElement,具備消息通信能力以及圖形繪制能力,添加DrawComponent接口用于指定為第幾號組件提供DC。
5)DisplayPanelComponent:基本窗口組件, 繼承自DisplayPanel和Component,具備消息通信能力,同時提供用于界面或圖形的顯示窗口。
6)EditPanel:基本界面配置組件,繼承自Component和DisplayPanel,具備消息通信及界面編輯能力,用于試驗參數等信息配置窗口的生成;通過DrawComponent接口獲得配置組件的XML信息和工具條生成配置界面,并通過SaveProject接口將錄入信息保存在指定的XML中。
7)2DDisplayComponent:基本二維圖形繪制組件,繼承自DisplayComponent,通過重載Draw接口,具備類似于 WORD中二維圖形繪制能力,同時添加Move、Delete等功能接口。
8)3DDisplayComponent:基本三維圖形繪制組件,繼承自DisplayComponent,重載Draw接口來調用OpenGL提供的函數,實現三維顯示功能,其中Rotate就是調用OpenGL函數的一個典型接口,它實現了對指定模型的三維旋轉。
繪圖組件和界面配置組件都需要加載在窗口組件上。窗口組件通過調用Draw接口,通知掛在在他之上的繪圖組件,繪圖組件依次調用自己的Draw方法進行繪制,并在窗口上顯示,完成可視化;窗口組件通過響應菜單命令,讀取相關的XML文件完成配置界面的生成。
使用上述虛擬試驗平臺接口,通過開發并加載需要的功能組件實現了某型號子母彈拋撒評估試驗,完整的實現了從模型選取、參數配置到可視化仿真以及詳細的試驗結果評估。Q其中,子彈參數、目標形態、評價方案等配置界面可使用統一的組件,通過解析各自的XML文件獲取界面信息;二維圖形繪制組件完成子母彈攻擊目標的生成,并將所繪圖形的ID和節點按規定格式保存在目標庫內;三維顯示組件包括飛行場景、導彈、尾焰、爆炸、拋撒及計算組件,其中計算組件負責導彈飛行和子彈拋撒時模型的飛行引導。圖4分別給出了程序運行時子母彈飛行和爆破后子彈拋撒的效果圖。

圖4 子母彈飛行及子彈拋撒示意圖Fig.4 Schematic diagram of shrapnel flight and ejection
通過在將組件技術用于開發虛擬試驗平臺的實踐證明,雖然利用組件技術在設計試驗初期,需要在領域內對平臺需求進行深入分析,搭建具有許多冗余接口的框架,而且在編寫基本的程序組件看不到系統實現的進度,使用的精力、時間要多一些,但很多通用功能組件能在擴展中得到重用,可以大大提高軟件開發效率,大幅度降低系統的開發費用;同時當一個系統需求發生變化和擴展系統時,只需修改或開發相應的組件而不改變系統的其他部分,如需要災難事故模擬時,只需添加新的模型,修改部分控制組件即可,這些工作可以并行進行,提高時效性。結合文獻[5][6]等人使用組件技術的經驗,今后可以在框架基礎上開發更多目標明確的組件接口,以適應更廣泛的虛擬試驗需求。
[1]支超有,李振水,薛峰.基于模型組件的虛擬試驗系統框架研究[J].計算機測量與控制,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]鄧邵芳.組件技術在軟件開發中的應用研究 [D].成都:西南交通大學,2001.
[3]舒振,張耀鴻,羅雪山.基于組件的軟件開發方法在C3I系統仿真中的應用研究[J].計算機應用研究,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]寧偉,杜承烈.廣播內存網在實時半實物仿真系統中的實現[J].測控技術,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]張童,劉云生,查亞兵.可組合仿真系統的概念框架研究[J].系統仿真學報,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]戰德臣,王忠杰.一種基于組件的復雜應用系統開發過程[J].哈爾濱工業大學學報,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.