林坤
(西安航空職業(yè)技術(shù)學(xué)院陜西西安710089)
在計(jì)算機(jī)技術(shù)不斷發(fā)展的過(guò)程中,有效促進(jìn)了仿真技術(shù)的持續(xù)完善及發(fā)展,使其被廣泛應(yīng)用到航空航天等領(lǐng)域中,并且不斷成熟。飛行技術(shù)仿真是現(xiàn)代仿真技術(shù)的主要內(nèi)容,也是計(jì)算機(jī)、系統(tǒng)仿真及航空等領(lǐng)域的相互結(jié)合,其主要將飛機(jī)的運(yùn)動(dòng)作為研究對(duì)象,對(duì)飛行過(guò)程中的復(fù)雜系統(tǒng)進(jìn)行仿真。在人們對(duì)于飛行仿真對(duì)象真實(shí)性、復(fù)雜性、交互性及實(shí)時(shí)性的需求不斷提高的過(guò)程中,飛行仿真技術(shù)也成為計(jì)算機(jī)仿真的重點(diǎn)研究?jī)?nèi)容[1]。
在飛行過(guò)程中使用計(jì)算機(jī)仿真技術(shù)中的仿真模型替代真實(shí)的物理模型,從而能夠有效提高研制及試驗(yàn)的質(zhì)量,并且還能夠在計(jì)算機(jī)平臺(tái)中實(shí)現(xiàn)多次的重復(fù)模擬,并且對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,能夠有效縮短研制及實(shí)驗(yàn)的周期,并且降低研制成本。計(jì)算機(jī)仿真技術(shù)也可應(yīng)用于軍事領(lǐng)域中武器的研制及作戰(zhàn)訓(xùn)練方面,為飛行戰(zhàn)術(shù)演練、訓(xùn)練及武器裝備提供了經(jīng)濟(jì)有效的途徑,從而成為目前軍事領(lǐng)域中的重要科技。目前,在飛行技術(shù)訓(xùn)練過(guò)程中使用仿真技術(shù),已經(jīng)成為我國(guó)航空軍隊(duì)飛行員培養(yǎng)過(guò)程中的主要途徑。能夠在模擬訓(xùn)練過(guò)程中實(shí)施的對(duì)飛行員的操作進(jìn)行監(jiān)控,并且使飛行員能夠有效掌握飛行技能。和傳統(tǒng)飛行訓(xùn)練方式進(jìn)行對(duì)比,基于GLStudio軟件的仿真訓(xùn)練具有較大的優(yōu)勢(shì)[2]。
GLStudio軟件是現(xiàn)代尤為先進(jìn)的儀表面板開(kāi)發(fā)工具,其被廣泛應(yīng)用到三維、實(shí)時(shí)及照片交互的圖像界面中,其適應(yīng)于人機(jī)接口應(yīng)用的開(kāi)發(fā),比如飛行訓(xùn)練模擬器虛擬儀表等,其開(kāi)發(fā)的人機(jī)結(jié)構(gòu)能夠在產(chǎn)品全周期中[3]。GLStudio軟件還能夠?qū)崿F(xiàn)儀表指示、虛擬儀器動(dòng)態(tài)互聯(lián)及按鍵相應(yīng)等仿真,尤其適用于多功能顯示器仿真系統(tǒng)中的虛擬建模,其建模過(guò)程主要包括3步:
首先,設(shè)計(jì)整體外觀。GLStudio設(shè)計(jì)面板中具有面向?qū)ο蟮膱D像界面,操作簡(jiǎn)單方面,其中的工具欄中具有多種圖形元素及操作方式,用戶能夠通過(guò)操作基本圖像元素創(chuàng)建成為復(fù)雜模型,以此設(shè)計(jì)虛擬儀表外觀[4]。
另外,設(shè)計(jì)紋理貼圖。紋理貼圖能夠有效提高虛擬儀表的真實(shí)性,軟件能夠使用照片紋理,所有的多邊對(duì)象都能夠?qū)崿F(xiàn)紋理貼圖,其能夠通過(guò)在對(duì)象中進(jìn)行旋轉(zhuǎn)、縮放、平移等操作,從而實(shí)現(xiàn)預(yù)期的目的。
最后,人機(jī)交互的實(shí)現(xiàn)。GLStudio軟件中具有輸入/輸出設(shè)備,能夠根據(jù)用戶的輸入數(shù)據(jù)實(shí)現(xiàn)狀態(tài)的改變及用戶和輸入設(shè)備的交互。開(kāi)發(fā)人員將處理事件添加到輸入設(shè)備中,以此實(shí)現(xiàn)處理事件的交互響應(yīng)[5]。
通過(guò)以上步驟就能夠有效實(shí)現(xiàn)模型的設(shè)計(jì),之后在代碼生成器中實(shí)現(xiàn)模型代碼元的生成。圖1為GLStudio軟件的開(kāi)發(fā)流程圖。
圖1 GLStudio軟件的開(kāi)發(fā)流程圖
表2為領(lǐng)航儀表仿真系統(tǒng)面板的設(shè)計(jì)結(jié)構(gòu),通過(guò)圖2可以看出來(lái),領(lǐng)航儀表飛行技術(shù)仿真系統(tǒng)的面板主要包括地平儀、航向標(biāo)、顯示器、高度表等組成,在整個(gè)系統(tǒng)中,平視顯示器是最核心的部分,其主要功能就是顯示飛行器在整個(gè)仿真過(guò)程中的狀態(tài)信息[6]。并且整個(gè)系統(tǒng)中具有多個(gè)單獨(dú)的儀表,如果使用GLStudio軟件中的圖像設(shè)計(jì)窗口實(shí)現(xiàn)儀表控件的統(tǒng)一設(shè)計(jì),那么就會(huì)導(dǎo)致控件出現(xiàn)雜亂的現(xiàn)象,所以就要將儀表模塊轉(zhuǎn)換成為可插入的組件,實(shí)現(xiàn)儀表控件的單獨(dú)設(shè)計(jì),從而便于管理人員對(duì)系統(tǒng)進(jìn)行管理[7]。
圖2 領(lǐng)航儀表仿真系統(tǒng)面板的設(shè)計(jì)結(jié)構(gòu)
2.2.1 儀表界面的設(shè)計(jì)
在制作儀表界面過(guò)程中,要全面了解所要研發(fā)設(shè)計(jì)的機(jī)型內(nèi)部,包括儀表的顏色、尺寸、外形、儀表功能、報(bào)警指示、響應(yīng)時(shí)間等,都要和實(shí)際的領(lǐng)航儀表相一致[8]。并且還要實(shí)現(xiàn)儀表的圖像處理,使用PS圖像處理軟件將其制作成為各式紋理,使其能夠與真實(shí)的儀表更加接近。在VC++中創(chuàng)建相應(yīng)的工程模板,將用戶所創(chuàng)建的圖片模型在其中進(jìn)行創(chuàng)建[9]。
2.2.2 驅(qū)動(dòng)的設(shè)計(jì)及實(shí)現(xiàn)
為了能夠?qū)x表中的電門、指針及按鈕等進(jìn)行控制,就要在代碼生成器中實(shí)現(xiàn)部件的響應(yīng)及運(yùn)動(dòng)。使用GLStudio軟件和VC++共同編程,通過(guò)模擬儀表中的驅(qū)動(dòng)程序在靜態(tài)環(huán)境中添加代碼,從而實(shí)現(xiàn)控件的實(shí)時(shí)動(dòng)態(tài)顯示,將飛機(jī)中的飛行數(shù)據(jù)能夠顯示出來(lái)。
通過(guò)儀表內(nèi)部實(shí)現(xiàn)驅(qū)動(dòng)程序的描述,主飛行顯示器的高度、空速、導(dǎo)航顯示器及垂直速度等都是位置控制,簡(jiǎn)單來(lái)說(shuō),就是通過(guò)Location控件的調(diào)用實(shí)現(xiàn)。姿態(tài)指示器的航向羅盤、導(dǎo)航顯示器、刻度帶等都是旋轉(zhuǎn)控制,就是通過(guò)DynamicRotate函數(shù)的調(diào)用進(jìn)行控制,其他的風(fēng)向、讀數(shù)窗口及風(fēng)速等信息,都能夠?qū)?shù)據(jù)實(shí)時(shí)的顯示出來(lái)。本節(jié)通過(guò)航向游標(biāo)介紹旋轉(zhuǎn)的設(shè)計(jì)[10]。
GLStudio軟件的API函數(shù)庫(kù)較為強(qiáng)大,將羅盤刻度圓周中心作為中心,創(chuàng)建旋轉(zhuǎn)所需要的函數(shù),在對(duì)應(yīng)的位置中將回調(diào)函數(shù)進(jìn)行添加,從而實(shí)現(xiàn)游標(biāo)對(duì)象的旋轉(zhuǎn),創(chuàng)建外部控制對(duì)象在旋轉(zhuǎn)過(guò)程中使用的接口函數(shù)。首先,通過(guò)主控制界面中的Code Tab選項(xiàng)右擊選擇Add及Property,將成員的類型設(shè)置為double。
指針旋轉(zhuǎn)運(yùn)動(dòng)的控制通過(guò)以下代碼實(shí)現(xiàn):
在設(shè)置界面之后,就要在儀表中創(chuàng)建行為及屬性,GLStudio軟件能夠支持模塊化的編程,從而使用戶在添加代碼之后能夠具有固定的接口,并且軟件自身具有API函數(shù)庫(kù),其中包括多種常用的閃爍、旋轉(zhuǎn)等控制函數(shù),用戶能夠在code模塊中實(shí)現(xiàn)函數(shù)的調(diào)用,從而動(dòng)態(tài)控制模型。
通過(guò)GLStudio軟件創(chuàng)建類屬性,從而實(shí)現(xiàn)儀表動(dòng)作的控制,每個(gè)添加的類屬性都能夠自動(dòng)生成get函數(shù)、set函數(shù)及成員變量,用戶通過(guò)set函數(shù)的diamante實(shí)現(xiàn)元器件行為屬性的設(shè)置,通過(guò)get函數(shù)的調(diào)用實(shí)現(xiàn)屬性值的獲取[11]。
本節(jié)以駕駛桿的水平方向?yàn)槔?,在第二個(gè)多功能顯示器中將駕駛桿水平位置充分顯示出來(lái)。首先,通過(guò)code區(qū)創(chuàng)建字符變量,從而能夠夠顯示駕駛桿文本;另外通過(guò)創(chuàng)建全新屬性,使系統(tǒng)能夠自動(dòng)生成屬性變量,在字符變量中將下述代碼添加進(jìn)去,從而實(shí)現(xiàn)目前駕駛桿狀態(tài)的顯示。
領(lǐng)航儀表仿真系統(tǒng)和飛行模擬器的系統(tǒng)能夠相互聯(lián)系,才能夠滿足仿真系統(tǒng)最初設(shè)計(jì)的需求,儀表系統(tǒng)要與動(dòng)力學(xué)仿真系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)交換,通過(guò)數(shù)據(jù)流程圖確定系統(tǒng)的接口數(shù)據(jù)。
在現(xiàn)代網(wǎng)絡(luò)通信過(guò)程中一般使用UDP/IP或者TCP/IP協(xié)議,UDP也就是用戶數(shù)據(jù)報(bào)協(xié)議,其為面向無(wú)連接不可靠的傳輸類型,主要目的就是發(fā)送并且接受上層協(xié)議傳遞的消息,自身并沒(méi)有相關(guān)的檢測(cè)修改及回應(yīng)工作,具有較高的工作效率;TCP傳輸控制協(xié)議為可靠并且面向連接的傳輸類型,其需要一定的網(wǎng)絡(luò)實(shí)現(xiàn)。由于虛擬儀表具有較高的實(shí)時(shí)性,計(jì)算機(jī)就會(huì)持續(xù)的刷新畫面,在刷新過(guò)程中偶爾丟失一兩幀,不會(huì)對(duì)畫面的渲染及效果產(chǎn)生影響,所以系統(tǒng)中的傳輸協(xié)議可以選擇DUP用戶數(shù)據(jù)報(bào)協(xié)議[12]。
使用UDP協(xié)議作為通信程序,飛行仿真機(jī)將計(jì)算之后的仿真數(shù)據(jù)進(jìn)行發(fā)送,虛擬儀表端的主要目的就是實(shí)現(xiàn)每個(gè)循環(huán)周期的數(shù)據(jù)接收。圖3為系統(tǒng)的通信流程:
圖3 系統(tǒng)的通信流程設(shè)計(jì)
通過(guò)WinSock2開(kāi)發(fā)通信程序,由于軟件中已經(jīng)添加了頭文件及相關(guān)鏈接,所以用戶就能夠通過(guò)socket函數(shù)直接調(diào)用,實(shí)現(xiàn)網(wǎng)絡(luò)通信的設(shè)計(jì)。為了使系統(tǒng)能夠刻度,虛擬儀表計(jì)算機(jī)和飛行仿真機(jī)在連接之前要對(duì)結(jié)構(gòu)體進(jìn)行統(tǒng)一格式。在Initialize函數(shù)中添加代碼,實(shí)現(xiàn)套接字庫(kù)的初始化,之后實(shí)現(xiàn)套接字的定義,并且將其使用在數(shù)據(jù)接收緩存區(qū)中,將套接字的工作模式進(jìn)行設(shè)置,之后對(duì)其進(jìn)行綁定。一般情況下套接字都會(huì)出現(xiàn)阻塞,如果網(wǎng)絡(luò)出現(xiàn)故障,那么程序就會(huì)在原地等待,并且無(wú)法實(shí)現(xiàn)幀循環(huán),那么畫面就會(huì)出現(xiàn)停滯的現(xiàn)象,所以UDP通信設(shè)定的工作是在套接字沒(méi)有出現(xiàn)阻塞的模式下工作的[13]。代碼為:
GLStudio軟件中包括代碼生成器,其主要目的就是在已經(jīng)設(shè)計(jì)好的gls文件中自動(dòng)生成云代碼,其能夠支持3種模式代碼的轉(zhuǎn)換,本文通過(guò)在Standalone模式中生成獨(dú)立應(yīng)用程序,保存生成代碼,代碼的形式為源文件及頭文件。頭文件能夠?qū)崿F(xiàn)圖像對(duì)象類生命的自動(dòng)生成,源文件中包括類對(duì)象及類成員的具體定義,在VStudio中創(chuàng)建基于GLStudio軟件的項(xiàng)目,并且將頭文件及源文件添加進(jìn)入,實(shí)現(xiàn)程序的編譯及調(diào)試[14],圖4為成功的領(lǐng)航儀表仿真系統(tǒng)執(zhí)行效果。
圖4 成功的領(lǐng)航儀表仿真系統(tǒng)執(zhí)行效果
系統(tǒng)的仿真是通過(guò)管道通信實(shí)現(xiàn),在虛擬儀表啟動(dòng)的時(shí)候就會(huì)自動(dòng)創(chuàng)建管道服務(wù),在打開(kāi)驅(qū)動(dòng)數(shù)據(jù)編輯器之后就會(huì)自動(dòng)連接管道服務(wù)。通過(guò)添加和刪除按鈕,實(shí)現(xiàn)管理的演示,每添加或者刪除演示計(jì)劃之后,驅(qū)動(dòng)數(shù)據(jù)文件就會(huì)自動(dòng)實(shí)現(xiàn)更新。最后點(diǎn)擊飛行控制按鈕,從而為虛擬儀表發(fā)送相關(guān)的讀取驅(qū)動(dòng)數(shù)據(jù)指令,虛擬儀表就會(huì)執(zhí)行演示模式。每個(gè)演示模式會(huì)通過(guò)執(zhí)行自身的運(yùn)動(dòng)算法實(shí)現(xiàn)預(yù)設(shè)的參數(shù)值,參數(shù)值能夠在演示過(guò)程中通過(guò)手動(dòng)進(jìn)行刪除[15]。圖5為仿真飛行虛擬儀表的顯示。
圖5 仿真飛行虛擬儀表的顯示
文中通過(guò)GLStudio軟件的高效率、逼真形象、良好的代碼移植等優(yōu)點(diǎn),使用UDP協(xié)議和飛行仿真模型通信,從而實(shí)現(xiàn)了基于GLStudio軟件的領(lǐng)航儀表飛行技術(shù)仿真系統(tǒng)的設(shè)計(jì),并且實(shí)現(xiàn)了系統(tǒng)的編譯及運(yùn)行。此系統(tǒng)能夠?qū)崟r(shí)的顯示飛行狀態(tài)的參數(shù),并且能夠滿足系統(tǒng)對(duì)交互性及實(shí)時(shí)性的需求。目前,虛擬儀表軟件被成功使用在某飛行控制系統(tǒng)仿真平臺(tái)中,能夠有效節(jié)約訓(xùn)練成本,提高了飛行人員的安全,并且提高了飛行訓(xùn)練的質(zhì)量,并且為虛擬儀表開(kāi)發(fā)設(shè)計(jì)相關(guān)人員提供了參考。