摘要:該文研究了基于GL Studio的虛擬儀表開發流程,采用組件調用的方法設計完成了多儀表綜合顯示面板的虛擬仿真,實現了視頻界面切換,并通過外部數據驅動虛擬儀表。針對仿真面板運行時系統資源占用率大的問題,提出幾點改進辦法,實驗結果顯示該文所提出的改進方法,具有更好的實時性、高精確度、可移植性和實用性,且系統資源占用率低,在實際項目應用中取得了良好的效果。
關鍵詞:GL Studio;虛擬儀表;綜合顯示面板;串口通信
中圖分類號:TP319.9 文獻標志碼:A文章編號:1009-3044(2010)03-674-03
Multi-instruments Integrated Panel Simulation Based-on GL Studio
LI Dong, LV Wei-tao, LEI Zhen, CHOU Li
(Dept. of Information Engineering, Academy of Armored Forces Engineering, Beijing 100072, China)
Abstract: This paper researched the development cycle of the virtual instrument Simulation based-on GL Studio, simulated the virtual instruments and achieved the switch of vedio interfaces, designed and achieved the virtual simulation of multi-instruments integrated display panel driven by the external data by means of the component-based method. Then it proposed several methods to reduce the resource usage when running the simulation panel. Experimental results show that the proposed methods can achieve high precision, better real-time, portability, practicability, and take low system resources. These methods gain favorable effects in the exploitation of practical projects.
Keywords: GL Studio; virtual instrument; integrated display panel; serial communication
隨著裝甲車輛技術的進步和發展,車輛結構越來越復雜,子系統越來越多,需要檢測、顯示和超限報警的部位和內容不斷增加,而儀表是駕駛員與車輛進行信息交流的重要接口和界面,其技術性能的優劣直接影響了駕駛員對復雜車體的工作狀況的檢測和了解,影響了車輛性能的發揮。車輛儀表的功能已不僅僅是車體各部件參數的指示,而是通過微處理機和軟件接口與各種處理軟件連接,將所有信息都集成在一個綜合信息系統顯示界面,從而達到控制車輛各種運行工況的目的。采用視頻切換技術在同一面板上顯示不同的信息,不但直觀生動利于操作,還可提高利用率,降低成本,能滿足現代先進裝甲車輛的要求,還能在維修訓練中具有明顯的優越性。目前,虛擬儀表已應用于部分新型裝備中。
綜合顯示面板仿真的主要構成是集中化虛擬儀表,開發虛擬儀表的關鍵是好的軟件開發平臺,美國DiSTI公司的GL Studio開發的虛擬儀表具有靈活、準確、開發周期短、成本低以及可移植性強等特點,不僅能夠實現逼真的虛擬儀表仿真,還能和其他建模軟件(如Vega)相融合,使仿真效果更趨完美。
1 GL Studio開發流程
GL Studio是一個面向對象的開發工具,用于創建實時的、三維的、照片級的互動圖形界面。用戶可以利用其圖形設計器以所見即所得的方式來完成圖形設計,并且能快速地模型化,其代碼生成器可將創建的文件生成的C++和OpenGL源代碼,既可單獨編譯運行,也可作為組件嵌入到其他仿真程序中進行建模設計,它能運行于Windows NT、TRIX和Linux等操作系統上,實時模擬儀表之間的動態關聯,并可以通過鍵盤鼠標或觸摸屏對虛擬儀表進行操縱,效果逼真。圖1為GL Studio的基本開發流程圖。
其中圖形設計部分包括圖像處理和對象命名,利用GL Studio開發虛擬儀表主要有以下兩個步驟:
第一步:圖形界面設計-----“圖形藝術家”完成。可以高效的完成紋理工作,創建可視化對象,還可以給對象命名。
A.碼照片作為對象儀表的紋理,或者完全繪制數碼式對象儀表;
B.在GL Studio中創建圖形式對象;
C.為對象恰當命名。
第二步:添加行為代碼-----“軟件工程師”完成。根據仿真系統的要求,添加相應的行為代碼。
A.利用GL Studio的GUI為源文件、對象屬性等編寫程序;
B.生成源代碼;
C.連接GL Studio設計到其他仿真軟件或者獨立運行功能;
D.編譯,連接,運行調試。
以上兩個步驟,基本上完成了對虛擬儀表的創建。若研究需要,還可以進一步將所得結果與其他仿真軟件平臺相結合,開發更為復雜的虛擬平臺,這完全依賴于GL Studio靈活移植性的特點。
2 多儀表綜合界面設計與實現
筆者利用GL Studio對某型裝備車輛的駕駛員終端多儀表綜合顯示界面進行了仿真。
2.1 單個儀表組件的創建
用Photoshop處理所拍攝的數碼照片,包括均衡化光強、去反射光、去陰影、消除視差效應等,使照片清晰逼真;將動態部件挖出來放置在表盤圖的一側進行細化處理,主要包括儀表指針和滾動數字;而后將紋理載入GL Studio軟件平臺,進行仿真設計。經試驗發現,所拍照片效果越好,后續處理的效果也越好,其中紋理尺寸以2的冪次方為最佳。
圖形設計完成后便可添加基本行為代碼。為使仿真儀表能真實的反映傳輸來的數據,需要為其設置一個控制參數,通過該參數值來代表驅動數據,儀表指針隨著該參數值的變化適當偏轉。下面是單個儀表仿真的部分行為代碼:
/*GetValuesFromNetwork( receivedValues);
xianshibiao->sudu( receivedValues._hs );
sendValues.mainPower=Panel->MainPower();
SendValuesToNetwork( sendValues);*/
void suduClass::Calculate (double time)
{
objects->Group::Calculate(time);
TestValues(time);
}
void suduClass::Setsudu (float TV)
{
…
needle3->DynamicRotate(-angle3,Z_AXIS);
}
void suduClass::TestValues (double time)
{
float TestVal=(sinf((float)time*0.07f)+1)/2.0f;
…;
}
其中參數_hs是表示指針偏轉角度,通過改變參數值控制指針的偏轉角度; TestVal用來控制指針偏轉速率,改變其賦值表達式中的參數值可以改變指針的偏轉快慢;time為系統時間。此處以Z軸為轉軸(Z_AXIS),使指針在x-y平面內順時針偏轉(-angle3)。為了使虛擬儀表能獲取外界驅動數據,實現實時顯示和交互行為,這里可以調用GetValuesFromNetwork(receivedValues)函數和SendValuesToNetwork(sendValues)函數來控制接口;經VC++平臺調試無誤后,再將虛擬儀表設為組件,以便在面板整合時調用。
需要強調的是坐標系的轉換問題。若僅僅利用GL Studio和部分VC代碼實現獨立運行程序,則不需要坐標系的轉換;如果要和MFC結合,則需要進行原點坐標的轉換,因為windows原點坐標在左上方,GL Studio的在左下方;若與Vega相結合則需把GL Studio坐標系繞著X軸逆時針旋轉90度,使其與Vega坐標系保持一致,而且GL Studio在移植過程中是以Vega的基本單位為基準進行1:1轉換的。
2.2 綜合顯示面板的實現
由于顯示面板上儀表數量多,為縮短開發周期、便于優化以及虛擬儀表的重用性,這里采取組件調用的方法,即先逐個設計虛擬儀表,再將其嵌入到面板上完成仿真工作。其中車況信息通過傳感器轉換成電訊號傳給單片機,經過單片機處理后,通過串口傳給計算機,再由所編程序高速處理后在儀表上顯示出來。如圖2所示。
把已設計好的儀表組件嵌入相應頁面,調整頁面布局(包括儀表的位置尺寸及圖層順序等)。待所有頁面設計完成后,再將非主頁面生成組件添加到主頁面中,注意保持所有面板的尺寸相同,位置重疊,讓主頁面可見,其他頁面不可見,即將其他頁面設置為“invisible”狀態(見圖3)。
到此綜合顯示面板的圖形設計階段基本完成。在整合多儀表多頁面時,用圖形界面中的設計元素“InputDevice”來設置界面上的切換按鈕,在回調函數體內添加代碼。回調函數體使用C++代碼來處理事件,一個事件可以被多個不同事件觸發,對事件的響應代碼來說,確定當前事件是什么以及是否處理是非常重要的。如果代碼確定要處理事件,則應該返回1,否則返回0。
在添加消息響應代碼時,GL Studio的消息封裝結構與Windows的消息封裝結構存在一定區別,因此不能像在MFC中編程那樣通過自定義消息處理函數來捕捉GL Studio中的消息。本實例利用GL Studio自身所帶消息機制,實按鍵切換界面,添加消息代碼如下:
KeyboardEvent *kev=(KeyboardEvent*)ev;
if(kev)
{switch(kev->keysym)
{case 0x71:
self->State(1);
b_mode=1;
break;
…
}return 1;
}return 0;
事件響應函數的參數總是(GlsSwitch* self, DisplayEvent* ev),參數self是指代碼的應用對象;參數ev是指引發調用的事件。其中的ASCII碼0x71代表q鍵,通過switch語句來響應鍵盤消息,實現畫面切換。當按下其中一個按鍵后,系統會自動調用消息處理函數,進行狀態轉換。下面再添加如下代碼即可完成畫面切換后按要求顯示的功能:
duoyibiao->Visibility((b_mode!= 2)); zhuangkuang->Visibility((b_mode==2));
需要注意的是,并不是任何對象都會接受鍵盤消息,只有從ComponentsBase類派生的對象才能接受鍵盤消息。如果面板上沒有控制按鈕,則只需要捕獲相應的頁面和對應鍵盤消息即可。
3 仿真結果討論
利用GL Studio實現虛擬儀表及綜合顯示界面仿真的效果比較理想,達到了預期目的和要求,其中兩頁仿真界面如圖4所示。
駕駛員根據需要進行顯示界面的切換,可顯示車況信息、導航信息、實時路況視頻等。實踐證明,采用GL Studio軟件開發平臺,利用貼圖方式完成圖形設計,以C++源碼作為底層代碼,相比較基于OpenGL直接開發出來的虛擬儀表,前者具有更好的實時性、高精度、高靈敏度等優勢。較之傳統的機電式儀表,虛擬儀表可移植性強,成本低,占用空間小,不但可以用來實現維修訓練,還能應用于實際車輛。
同一面板中動態部件多、紋理處理不佳等因素,均會導致仿真效果不理想,系統資源占用率大。經反復調試發現,通過以下處理,可以大大減小系統資源占用率,提高仿真效果:
1) 背景透明處理:利用Photoshop處理照片時,把不顯示的區域定義為透明區域,并將圖片格式設為.png格式。因為.png格式支持24位RGB圖像且具有8位透明通道;GL Studio能識別透明區域,允許用戶穿透它們看到另一層而不能抓取。這種設計方式避免了在面板上出現圖像交疊,便于操作。而且用簡單多邊形代替面板上的重疊部分,使設計時圖像處理部分盡可能少,減少了系統對重疊部分的冗余處理,減輕了CPU的負擔。
2) 動態部件綜合放置:在處理紋理時,同一面板上往往存在多個動態部件,如儀表指針、滾動數字、控制開關、按鈕等,可將其綜合放置在一張紋理圖片上,這種處理方式導致的開發效率相對于動態部件單獨放置方式的開發效率,前者明顯優于后者。
3) 紋理尺寸為2的冪次方:GL Studio雖然可以處理非2的冪次方的紋理照片,但是這樣會使啟動時間減慢;由于GL Studio設計的模型最終都要生成OpenGL源碼,而當OpenGL使用某個紋理照片時,在裝載到存儲器之前先要將該紋理調整為2的冪次方,即每一個尺寸為非2的冪次方紋理都將會按照比例擴大到下一個2的冪次方尺寸,從而使加載時間延長。因此,我們在處理紋理時應盡量使其尺寸滿足2的冪次方。
4 結論
本文簡要介紹了虛擬儀表開發工具--GL Studio,實現了基于GL Studio的多儀表綜合顯示面板的虛擬仿真,并應用于實際項目開發中,取得了良好的效果。在此基礎上添加導航信息、路況環境實時顯示等更多信息,以及語音功能等,使裝甲車輛系統的智能化得以提高,降低維修訓練成本,提高訓練效率。根據目前情況,虛擬儀表走向智能化已成為趨勢,要做到更加完美逼真的虛擬仿真,需要融合多種仿真開發平臺和相關理論支持。
參考文獻:
[1] Distributed Simulation Technology Inc.GL Studio User's Guide[Z].Version3.01,USA,2004.
[2] 張文,朱元昌,樊世友.GL Studio及其在雷達面板仿真中的應用[J].測控技術,2002,21(6):50-52.
[3] 許穎慧,楊峰.GL Studio 在儀表仿真開發中的關鍵技術研究[J].自動化技術與應用,2008,27(10):76-79.
[4] 劉穎,朱元昌,張天輝.虛擬測量工具的構造與實現[J].系統仿真學報,2005,17(7):1779-1781.
[5] 謝永成,魏寧,李光升,等.虛擬儀表在裝甲車輛信息化改造中的應用[J].電子測量技術,2008,31(8):67-71.
[6] 王樹杰,張繼偉,肖成志.Windows環境下虛擬仿真界面的研究與開發[J].微計算機信息,2006,22(10-1):140-142.