高 穎,葛 飛,劉 寧,郭淑霞
(1.西北工業(yè)大學(xué)航海學(xué)院,西安 710072;2.西北工業(yè)大學(xué)無人機(jī)特種技術(shù)國防重點(diǎn)實(shí)驗(yàn)室,西安 710065)
隨著科學(xué)技術(shù)的迅猛發(fā)展,越來越多的高技術(shù)武器裝備被應(yīng)用到部隊(duì)中。目前在工控系統(tǒng)、科學(xué)研究及軍事仿真等領(lǐng)域,隨著信息量不斷擴(kuò)大,各種操作面板愈來愈龐大,增大了制造成本與維護(hù)難度。運(yùn)用虛擬現(xiàn)實(shí)技術(shù)對(duì)武器裝備進(jìn)行仿真,是彌補(bǔ)部隊(duì)操作和維修訓(xùn)練的有效途徑[1]。通過計(jì)算機(jī)仿真技術(shù)實(shí)現(xiàn)虛擬仿真界面能夠大大降低研發(fā)和制造成本,使系統(tǒng)易于更改和維護(hù),且能給人以逼真的視覺感受。
從某發(fā)動(dòng)機(jī)測(cè)試系統(tǒng)虛擬儀表控件的實(shí)際應(yīng)用的角度,提出了儀表建模和仿真實(shí)體控制的具體方法,并以此理論開發(fā)基于COM技術(shù)的虛擬儀表ActiveX控件,旨在從應(yīng)用角度提供一種設(shè)備訓(xùn)練仿真建模和實(shí)施手段,以用于軍事仿真、計(jì)算機(jī)輔助訓(xùn)練等領(lǐng)域。
組件對(duì)象模型(Component Object Model,COM)是一種以組件為發(fā)布單元的對(duì)象模型,這種模型使各軟件組件可以用一種統(tǒng)一的方式進(jìn)行交互。COM提供了組件之間進(jìn)行交互的規(guī)范,也提供了實(shí)現(xiàn)交互的環(huán)境[2]。這種交互使得一種語言編寫的程序能調(diào)用另一種語言編寫的軟件組件,實(shí)現(xiàn)了與編程語言無關(guān)的軟件重用。調(diào)用端被稱為客戶,被調(diào)用端是組件對(duì)象,兩者的相互作用建立在簡單客戶/服務(wù)器模型機(jī)制基礎(chǔ)之上。組件對(duì)象以動(dòng)態(tài)鏈接的可執(zhí)行軟件單位作為載體,接口提供了客戶與組件之間進(jìn)行通信的協(xié)議或規(guī)范。
COM組件具有如下特點(diǎn)和功能:
(1)語言無關(guān)性和易學(xué)易用性。因?yàn)镃OM規(guī)范的定義不依賴于語言,所以組件對(duì)象所使用的語言與客戶程序所使用的語言可以不同,只要它們都能夠生成符合COM規(guī)范的可執(zhí)行代碼即可。COM對(duì)象不同于一般的面向?qū)ο笳Z言(如C++語言)中的對(duì)象概念,它是建立在二進(jìn)制可執(zhí)行代碼、而不是源代碼基礎(chǔ)上的,因而COM對(duì)象與語言無關(guān)。COM的語言無關(guān)性為跨語言合作開發(fā)提供了一致的標(biāo)準(zhǔn)。
(2)接口與實(shí)現(xiàn)分離。COM對(duì)象接口與實(shí)現(xiàn)分離的特性使得COM組件非常容易完成替換。當(dāng)虛擬儀表類型需要改變時(shí),只要改變組件、重建組件并發(fā)布新組件即可。由于更新是局部的,程序中出錯(cuò)的機(jī)會(huì)也就僅限于這個(gè)局部。開發(fā)COM組件時(shí),通常是先開發(fā)組件接口,保證一切能順利配合,然后再實(shí)現(xiàn)接口的要求。而且只要接口設(shè)計(jì)完成,就可以將其分布到幾個(gè)程序中,組件功能的實(shí)現(xiàn)可以并行進(jìn)行,從而實(shí)現(xiàn)并行開發(fā)。
(3)重用性極強(qiáng)??芍赜眯允侨魏螌?duì)象模型的實(shí)現(xiàn)目標(biāo)。COM客戶程序可通過接口使用對(duì)象所提供的服務(wù),而并不需要知道對(duì)象內(nèi)部的實(shí)現(xiàn)過程。它使復(fù)雜的系統(tǒng)簡化為一些簡單的對(duì)象模塊,高度體現(xiàn)了面向?qū)ο蟮乃枷?。組件其實(shí)就是一個(gè)軟件塊,用于完成特定工作,任何程序都可以使用組件。由于組件是自給自足的,可以很容易地進(jìn)行替換,并且可以一次編寫,到處使用。以后只更新或替換這個(gè)組件就可以糾正或改進(jìn)該組件的功能。
(4)可跨進(jìn)程、跨平臺(tái)移植并實(shí)現(xiàn)分布式應(yīng)用。采用COM組件完全可以實(shí)現(xiàn)二進(jìn)制可執(zhí)行代碼級(jí)基礎(chǔ)上的跨進(jìn)程、跨操作系統(tǒng)移植。
利用VC+OpenGL從底層進(jìn)行開發(fā),優(yōu)點(diǎn)是能夠?qū)崿F(xiàn)用戶的個(gè)性化需求,滿足計(jì)算機(jī)通訊的實(shí)時(shí)性,適用于對(duì)實(shí)時(shí)性有嚴(yán)格要求的工控軟件系統(tǒng)。缺點(diǎn)是要求用戶掌握較深的編程知識(shí),系統(tǒng)開發(fā)周期長,代碼重用性低,仿真界面的真實(shí)感一般。
利用以美國國家儀器公司(NI)的LabView為代表的虛擬儀器軟件進(jìn)行開發(fā),其優(yōu)點(diǎn)是用戶經(jīng)簡單培訓(xùn)可快速掌握其交互式的編程設(shè)計(jì)環(huán)境,軟件自身具有大量虛擬儀器面板設(shè)計(jì)用的開關(guān)、按鈕、旋鈕、表頭等面板組件,還具有數(shù)據(jù)采集、儀器通信等用途,用戶可自定義仿真系統(tǒng),滿足不同需求。缺點(diǎn)是成本較高,開放性較差,不適用于真實(shí)性要求較高的場(chǎng)合。
利用以GL Studio和VAPS為代表的專業(yè)級(jí)虛擬仿真軟件,用戶可通過熟悉的繪圖習(xí)慣編制虛擬仿真應(yīng)用程序,其優(yōu)點(diǎn)是開發(fā)周期短,仿真界面的真實(shí)感較強(qiáng),生成的C(C++)代碼可移植性高,并借助VC++等編譯環(huán)境實(shí)現(xiàn)了計(jì)算機(jī)實(shí)時(shí)性的通訊需求,應(yīng)用前景廣闊。
由于VC++等開發(fā)環(huán)境提供的控件(如按鈕等)過于Windows風(fēng)格化,導(dǎo)致所開發(fā)的界面千篇一律,雖然可利用許多二次開發(fā)的“皮膚”為程序“換膚”,但不能解決根本性問題。以MSVC 6.0的按鈕控件為例,采用位圖按鈕雖能解決按鈕的美觀問題,但編程時(shí)需要對(duì)按鈕的樣式重新進(jìn)行繪制,且不能給形狀不規(guī)則的按鈕配置不規(guī)則的位圖,故無法滿足需求。
而GL Studio自身支持含通道信息的PNG格式,利用Photo-Shop等圖像編輯軟件,可按需要繪制任意形狀的按鈕,賦予在GL Studio環(huán)境中生成的部件后,即可生成美觀的自定義按鈕[3]。除了上述按鈕控件外,如果用戶想要制作高級(jí)控件,例如飛行仿真中的表盤等,利用GL Studio便更能體現(xiàn)出優(yōu)勢(shì)。
在為“發(fā)動(dòng)機(jī)測(cè)試系統(tǒng)”設(shè)計(jì)軟件系統(tǒng)時(shí),由于軟件界面層次及邏輯性復(fù)雜,采集并顯示的運(yùn)行狀態(tài)參數(shù)較多,操作員對(duì)界面真實(shí)感及軟件的人機(jī)交互友好程度要求較高,所以采用了GL Studio作為開發(fā)工具,結(jié)合已有的VC++開發(fā)儀表技術(shù),不但滿足了實(shí)時(shí)性和交互性要求,還增強(qiáng)了軟件構(gòu)成的靈活性。其設(shè)計(jì)流程如圖1所示。設(shè)計(jì)中啟動(dòng)這個(gè)對(duì)象時(shí),圖形表面的指針必須移除。抽取指針?biāo)闹艿膮^(qū)域,并復(fù)制到指針的位置之上。
圖1 儀表設(shè)計(jì)框架圖
(5)一旦圖像處理好了,將其保存到圖層中。這樣從最初的面板中移除的任何物體都位于它們各自的圖層中。圖層文件以*.png形式使用保留透明區(qū)保存。如果使用PhotoShop的*.psd文件,則可以直接利用*.psd文件而不必轉(zhuǎn)換成*.png文件。
由此框圖設(shè)計(jì)的三維儀表控件,打破了傳統(tǒng)儀器由廠家定義,用戶無法根據(jù)自己的要求而改變其相應(yīng)功能的工作模式,使得用戶可以根據(jù)自己的需求輕易地改變ActiveX控件提供的接口參數(shù),設(shè)計(jì)自己的儀表系統(tǒng),在虛擬測(cè)試系統(tǒng)和儀表設(shè)計(jì)中盡量用軟件代替硬件,充分利用計(jì)算機(jī)技術(shù)來實(shí)現(xiàn)和擴(kuò)展傳統(tǒng)測(cè)試系統(tǒng)和儀表的功能。下面以軟件中的一種虛擬儀表控件為例,介紹具體的開發(fā)流程。
將GL Studio安裝完畢,即在MSVC 6.0新建菜單中出現(xiàn)三個(gè)新項(xiàng)目,其中第一項(xiàng)為主要介紹基于COM技術(shù)的ActiveX控件項(xiàng)目開發(fā)。在選擇該項(xiàng)后,按常用的VC生成項(xiàng)目的方法完成初始化設(shè)置,進(jìn)入編程狀態(tài),并生成GL Studio開發(fā)文件。
4.2.1 處理紋理文件
先采用Photoshop對(duì)儀表圖像素材進(jìn)行處理,并根據(jù)分部抽象實(shí)例化技術(shù)將面板中能動(dòng)的部件單獨(dú)處理,生成紋理文件,如指針、按鍵、旋鈕等。以圖2所示的圓形指針儀表為例,紋理制作包含以下幾個(gè)重要步驟:
(1)首先創(chuàng)建圖形的像素定為360×370。重新定位畫布上焦點(diǎn)的圖象,以便于為指針騰出顯示表面板以外的空間。值得注意的是,在不阻擋圖像其他部分的前提下,應(yīng)盡可能多地利用畫的固定部分。
(2)為圖像建立一個(gè)新的不可見圖層,同時(shí)切掉背景區(qū)域。
(3)復(fù)制指針并粘貼到一個(gè)單獨(dú)圖層。旋轉(zhuǎn)圖層以使得靠近背景面板的指針在結(jié)構(gòu)中水平放置。
(4)如果已經(jīng)完成好指針,則可以選擇整理儀表的外觀。實(shí)際上儀表外觀是比較臟亂的??梢赃x擇保持原樣讓儀表看起來更真實(shí)些。另一種做法是采用圖解的畫法,先做出外觀的一塊干凈地方并把它復(fù)制到臟亂的區(qū)域。不管怎樣,一旦在GL Studio
圖2 儀表紋理制作效果圖
(6)針對(duì)虛擬儀表仿真類型多、參數(shù)變化大的特點(diǎn),有時(shí)需要對(duì)紋理文件進(jìn)行再加工處理以滿足用戶對(duì)量程、字體、顏色、起始角度等要求,比如摳出刻度及量程標(biāo)識(shí)數(shù)字,提供儀表控件更豐富的接口內(nèi)容。
4.2.2 設(shè)計(jì)組件
雙擊自動(dòng)生成的GL Studio開發(fā)文件,進(jìn)入GL Studio編輯環(huán)境。利用直線、曲線、矩形等圖形工具可直接設(shè)計(jì)仿真界面相關(guān)部件的線條形狀,而后將相關(guān)部件進(jìn)行類似于CAD中的組合等操作,并賦予材質(zhì)和紋理,形成用戶自己定制的組件,如圖3所示。
圖3 儀表制作效果圖
4.2.3 加入控制算法
本例中儀表的刻度范圍在圓周方向上均勻分布,并且刻度范圍可以由用戶通過接口改變,在計(jì)算好指針的每一等份所對(duì)應(yīng)的角度之后,利用GL Studio強(qiáng)大的 API函數(shù)庫[4],以表體的圓周中心為中心,構(gòu)造旋轉(zhuǎn)所需的算法如下:
為了實(shí)現(xiàn)按鈕開關(guān)控制參數(shù)圖片的實(shí)時(shí)更新,在相應(yīng)位置添加回調(diào)函數(shù),形成外部控制所用的接口函數(shù),代碼如下:
4.2.4 生成控件源代碼
通過GL Studio中主面板Generation選項(xiàng),選擇Component,利用代碼生成器自動(dòng)編譯生成ActiveX控件所需的代碼,返回至MSVC 6.0編譯環(huán)境,在控件代碼中擴(kuò)展屬性和方法所需的代碼,然后編譯生成GL Studio所形成的ActiveX控件[5]。
4.2.5 形成ActiveX控件
(1)根據(jù)“發(fā)動(dòng)機(jī)測(cè)試系統(tǒng)”虛擬儀表仿真界面的設(shè)計(jì)要求,需要提供一系列關(guān)于儀表控件可調(diào)的接口。在此結(jié)合VC++底層開發(fā)畫出刻度標(biāo)識(shí)及刻度線,以便添加控件量程、背景色、前景色、字體等屬性,如圖4所示。
圖4 儀表刻度效果圖
(2)通過引用GL Studio生成的控件內(nèi)部所提供的“m_glsComponent”指針變量在程序中添加用戶自定義控制各虛擬仿真部件的方法,預(yù)留控件與用戶程序間的接口。當(dāng)主程序調(diào)用GL Studio生成的控件時(shí),由于其接口函數(shù)是預(yù)先定義的,所以即使在調(diào)用時(shí)控件方法在代碼上表現(xiàn)為不透明,但這里仍可在主程序中調(diào)用,方便實(shí)現(xiàn)了外部對(duì)內(nèi)部的驅(qū)動(dòng)。以下代碼實(shí)現(xiàn)表盤外觀風(fēng)格的變化:
最終實(shí)現(xiàn)的控件接口屬性如圖5所示。
圖5 儀表屬性圖
采用GL Studio開發(fā)出獨(dú)立運(yùn)行程序或者開發(fā)出與VC++結(jié)合的Windows框架程序均能實(shí)現(xiàn)上述要求,但界面整體靈活性受到很大限制。而采用GL Studio所支持的COM組件技術(shù)后,由ActiveX組件構(gòu)成界面,靈活性高,可擴(kuò)展性強(qiáng)。
利用GL Studio所開發(fā)的程序框架豐富,在采用COM開發(fā)技術(shù)后,其擴(kuò)展性和可移植性得到了極大提升,并在軍事仿真等方面都有著廣闊的應(yīng)用前景。所述的仿真程序經(jīng)測(cè)試,系統(tǒng)穩(wěn)定,界面友好,真實(shí)感強(qiáng),為儀表測(cè)試系統(tǒng)提供了強(qiáng)有力的技術(shù)支持和保障。
[1]劉穎,朱元昌,張?zhí)燧x,等.虛擬測(cè)量工具的構(gòu)造與實(shí)現(xiàn)[J].系統(tǒng)仿真學(xué)報(bào),2005,17(7):1779 -1781.
[2]朱東方,蘇群星,劉鵬遠(yuǎn),佟德飛.虛擬儀表響應(yīng)模塊行為實(shí)現(xiàn)[J].信息技術(shù),2011(1):65-69.
[3]樊世友,邸彥強(qiáng),朱元昌.GL Studio軟件在視景仿真建模中的應(yīng)用[J].計(jì)算機(jī)工程,2002(3):260-261.
[4]許穎慧,楊峰.GL Studio在儀表仿真開發(fā)中的關(guān)鍵技術(shù)研究[J].儀器儀表與檢測(cè)技術(shù),2008(10):76-78.
[5]高穎,邵亞楠,鄭濤,黃建國.GL Studio在飛行座艙模擬器中的仿真研究[J].彈箭與制導(dǎo)學(xué)報(bào),2008,28(1):257-260.