劉升護(hù)等
摘 要: 為滿足多架飛機(jī)的實(shí)時(shí)監(jiān)控需求,對(duì)實(shí)時(shí)遙測(cè)系統(tǒng)的結(jié)構(gòu)和原理進(jìn)行了研究,使用VC++開(kāi)發(fā)工具以及MapX控件,開(kāi)發(fā)了基于多目標(biāo)的飛行電子地圖軟件。軟件采用C/S結(jié)構(gòu)設(shè)計(jì),并應(yīng)用MapX控件對(duì)Maplnfo地理信息系統(tǒng)進(jìn)行二次開(kāi)發(fā)。軟件能顯示多架飛機(jī)的位置信息、實(shí)時(shí)飛行軌跡和導(dǎo)航參數(shù),使地面指揮員和監(jiān)控人員能夠同時(shí)地掌握所有飛行器的飛行狀態(tài),增強(qiáng)了導(dǎo)航信息的可讀性和可視效果,滿足了多目標(biāo)綜合監(jiān)控的需求,對(duì)以后的型號(hào)試飛任務(wù)起到了積極的作用。
關(guān)鍵字: MapX; 多目標(biāo)電子地圖; 航跡信息顯示; 實(shí)時(shí)遙測(cè)系統(tǒng)
中圖分類號(hào): TN962?34; TP302 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)12?0094?04
隨著多目標(biāo)綜合監(jiān)控技術(shù)在飛行試驗(yàn)中的應(yīng)用,多目標(biāo)飛行電子地圖也成為飛行試驗(yàn)的重要監(jiān)控工具。傳統(tǒng)的基于單目標(biāo)的電子地圖,僅能顯示一架飛機(jī),難以使地面指揮員全面地了解機(jī)場(chǎng)的整體飛行的狀態(tài)。本文以MapX控件為基礎(chǔ),利用面向?qū)ο缶幊陶Z(yǔ)言VC++,設(shè)計(jì)并實(shí)現(xiàn)了多目標(biāo)飛行電子地圖的服務(wù)器端和客戶端軟件。該地圖除具有常規(guī)功能外,還可以實(shí)現(xiàn)位置信息、航跡顯示及導(dǎo)航參數(shù)的顯示。此外,軟件通過(guò)飛機(jī)的位置和接收其遙測(cè)數(shù)據(jù)的天線位置,計(jì)算出飛機(jī)相對(duì)遙測(cè)天線的水平和垂直角度,并實(shí)時(shí)顯示在地圖上,方便遙測(cè)人員更好的跟蹤天線,保證了遙測(cè)信號(hào)的質(zhì)量。MapX是MapInfo公司向用戶提供的具有強(qiáng)大地圖分析功能的ActiveX控件產(chǎn)品。在開(kāi)發(fā)過(guò)程中可以選用自己最熟悉的開(kāi)發(fā)語(yǔ)言,易于將地圖功能嵌入到應(yīng)用中,并且可以脫離MapInfo的軟件平臺(tái)運(yùn)行。利用MapX能夠簡(jiǎn)單快速地在應(yīng)用中嵌入地圖功能。
1 總體設(shè)計(jì)
1.1 服務(wù)器端設(shè)計(jì)
多目標(biāo)電子地圖接收網(wǎng)絡(luò)多流數(shù)據(jù),因此它的設(shè)計(jì)不僅包含軟件本身的設(shè)計(jì),也應(yīng)包含其數(shù)據(jù)來(lái)源系統(tǒng)的設(shè)計(jì),即服務(wù)器端的設(shè)計(jì)。在飛行試驗(yàn)中,通常在飛機(jī)上加裝遙測(cè)天線用來(lái)發(fā)射無(wú)線遙測(cè)信號(hào),將機(jī)載實(shí)時(shí)傳輸?shù)降孛?。地面遙測(cè)接收機(jī)接收無(wú)線遙測(cè)信號(hào),將其解調(diào)后送往實(shí)時(shí)處理服務(wù)器,服務(wù)器經(jīng)過(guò)處理送往客戶端,這時(shí)監(jiān)控人員就可以通過(guò)客戶端裝置實(shí)時(shí)觀察飛機(jī)性能、位置等信息。因此飛行試驗(yàn)實(shí)時(shí)遙測(cè)系統(tǒng)通??煞譃闄C(jī)載數(shù)據(jù)發(fā)送、地面遙測(cè)接收機(jī)、前端實(shí)時(shí)服務(wù)器和實(shí)時(shí)顯示客戶端4部分。系統(tǒng)數(shù)據(jù)傳輸如圖1所示。
因此多目標(biāo)電子地圖的設(shè)計(jì)有如圖2所示的兩種設(shè)計(jì)思路:
(1) 通過(guò)轉(zhuǎn)發(fā)程序從客戶端接收數(shù)據(jù)并以組播的形式轉(zhuǎn)發(fā)給電子地圖;
(2) 在實(shí)時(shí)處理服務(wù)器里加入基本數(shù)據(jù)轉(zhuǎn)發(fā)功能,每當(dāng)服務(wù)器軟件開(kāi)啟以后就自動(dòng)將地圖所需的參數(shù)以組播的形式轉(zhuǎn)發(fā)給地圖。
方法(1)采用中間轉(zhuǎn)發(fā)程序?qū)崿F(xiàn)連接實(shí)時(shí)處理服務(wù)器和電子地圖,優(yōu)點(diǎn)是使電子地圖系統(tǒng)脫離原有的實(shí)時(shí)監(jiān)控系統(tǒng),為以后更優(yōu)化帶來(lái)了方便,缺點(diǎn)是每架飛機(jī)都需要一臺(tái)電腦進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),并且中轉(zhuǎn)程序需人為啟動(dòng),增加出錯(cuò)的概率。方法(2)采用內(nèi)嵌到服務(wù)器的轉(zhuǎn)發(fā)功能,可以有效地提高工作效率,只需要一次性配置好轉(zhuǎn)發(fā)設(shè)置,以后只需要打開(kāi)服務(wù)器軟件,就會(huì)自動(dòng)進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā),避免人為的出錯(cuò);缺點(diǎn)是地圖系統(tǒng)依賴實(shí)時(shí)服務(wù)器,為以后的優(yōu)化設(shè)計(jì)增加少許麻煩。
由于實(shí)時(shí)監(jiān)控對(duì)系統(tǒng)的安全可靠有著嚴(yán)格的要求,因此選用第二種方法進(jìn)行系統(tǒng)軟件的設(shè)計(jì)。
1.2 客戶端(電子地圖)設(shè)計(jì)
軟件采用MapX組件與面向?qū)ο罂梢暬幊陶Z(yǔ)言VC++集成的二次開(kāi)發(fā)模式,根據(jù)實(shí)時(shí)飛行監(jiān)控特點(diǎn),軟件應(yīng)該考慮到以下幾點(diǎn):
(1) 具備基本的地圖操作。包括放大、縮小、居中、漫游、平移、點(diǎn)選圖元等MapX自帶功能以及測(cè)距、飛機(jī)中心點(diǎn)和繪制飛行半徑等功能。
(2) 可選的飛行軌跡。由于多架飛機(jī)同時(shí)飛行,如果顯示每架飛機(jī)的完全軌跡則會(huì)顯得地圖太亂,并且我們并不是很關(guān)注飛機(jī)的整個(gè)軌跡,有時(shí)只關(guān)注飛機(jī)在最近幾分鐘內(nèi)的這一段軌跡。因此,地圖默認(rèn)只顯示飛機(jī)近一段時(shí)間的軌跡,即部分軌跡。但依然保存完整軌跡數(shù)據(jù),用戶可在菜單上通過(guò)選擇飛機(jī)軌跡顯示模式來(lái)顯示完整軌跡。
(3) 隱藏不關(guān)注的飛機(jī)。并不是所有飛機(jī)都值得去關(guān)注,隱藏不關(guān)注的飛機(jī)可以使監(jiān)控人員避免受到不必要的干擾。
(4) 顯示飛行的基本參數(shù)。結(jié)合飛機(jī)的基本參數(shù)信息可以更好地了解飛行的狀態(tài)。
軟件采用模塊化結(jié)構(gòu)程序設(shè)計(jì)方式。軟件功能模塊如圖3所示。程序總體流程框架圖如圖4所示。其中定時(shí)器模塊是軟件的重點(diǎn),主要完成地圖的顯示。
1.3 接口設(shè)計(jì)
機(jī)載數(shù)據(jù)通過(guò)遙測(cè)天線傳入地面接收系統(tǒng),再由地面數(shù)據(jù)處理服務(wù)器通過(guò)網(wǎng)絡(luò)發(fā)送。電子地圖通過(guò)接收網(wǎng)絡(luò)上多流數(shù)據(jù)包,根據(jù)其中飛機(jī)號(hào)不同來(lái)提取信息,然后將相應(yīng)飛機(jī)位置信息和參數(shù)信息顯示在地圖上。如圖5所示,多流數(shù)據(jù)包包含同步字、總字長(zhǎng)、飛機(jī)編號(hào)、處理系統(tǒng)類型、數(shù)據(jù)類型、時(shí)間字和基本飛行信息,如經(jīng)緯度、高度、速度、航向角、橫滾角、俯仰角和剩余油量等。
2 軟件實(shí)現(xiàn)
2.1 地圖的顯示
在VC環(huán)境下集成MapX開(kāi)發(fā)電子地圖軟件是將MapX作為控件插入到應(yīng)用程序中,然后通過(guò)設(shè)置其屬性和調(diào)用其方法,響應(yīng)其事件來(lái)實(shí)現(xiàn)的[1?4]。
2.2 飛機(jī)的顯示
飛機(jī)顯示主要顯示飛機(jī)位置、基本飛行參數(shù)和飛行軌跡。軟件采用創(chuàng)建動(dòng)態(tài)圖層的方式,將表示飛機(jī)的符號(hào)圖元、標(biāo)簽和飛行軌跡置于單獨(dú)的一個(gè)圖層中,通過(guò)SetTimer()函數(shù)設(shè)置一個(gè)定時(shí)器,并利用MapX的動(dòng)態(tài)圖層,快速刷新顯示飛機(jī)定位信息。圖6所示是實(shí)現(xiàn)飛機(jī)顯示的程序框圖,該模塊采用定時(shí)器實(shí)現(xiàn)。處理步驟如下:
(1) 判斷飛機(jī)號(hào)是否為零。在飛行過(guò)程中飛機(jī)落地后就會(huì)停止發(fā)送遙測(cè)信號(hào),這時(shí)軟件將該飛機(jī)的飛機(jī)號(hào)置零。因此,如果飛機(jī)號(hào)為零,則意味著該飛機(jī)已經(jīng)無(wú)信號(hào),軟件直接處理下一架飛機(jī)數(shù)據(jù);若不為零,則進(jìn)行下一步。
(2) 判斷飛機(jī)信息是否更新。在接收模塊時(shí)加標(biāo)記量判斷數(shù)據(jù)是否更新,若未更新,則等待一定時(shí)間(軟件設(shè)置為10 min),若依然沒(méi)有新數(shù)據(jù)則將該飛機(jī)的飛機(jī)號(hào)置零,所有參數(shù)變量恢復(fù)初始值;若數(shù)據(jù)已更新,則進(jìn)行下一步。
(3) 飛機(jī)是否顯示。通過(guò)菜單欄選擇不需要顯示的飛機(jī),若該架飛機(jī)不需顯示,則將該飛機(jī)的飛機(jī)號(hào)置零,所有參數(shù)變量恢復(fù)初始值。
(4) 判斷經(jīng)緯度是否合法。由于遙測(cè)鏈路有時(shí)信號(hào)不穩(wěn)定或者機(jī)載測(cè)試設(shè)備自身原因?qū)е聜鬏數(shù)降孛娴臄?shù)據(jù)發(fā)生錯(cuò)誤,特別是經(jīng)緯度錯(cuò)誤常常會(huì)引起跳點(diǎn),所以需要判斷經(jīng)緯度是否在正常范圍。中國(guó)政區(qū)經(jīng)度在73°~136°之間,緯度在3°~54°。
(5) 與上一個(gè)點(diǎn)距離是否合理。同樣還是為了防止跳點(diǎn),如果相鄰兩個(gè)點(diǎn)的距離過(guò)大,則認(rèn)為該點(diǎn)為跳點(diǎn),直接處理下一架飛機(jī)數(shù)據(jù)。MapX提供Distance()函數(shù)計(jì)算兩點(diǎn)間的距離。
(6) 飛機(jī)位置信息是否創(chuàng)建。若沒(méi)有創(chuàng)建,則是飛機(jī)第一次發(fā)出數(shù)據(jù),創(chuàng)建飛機(jī)圖元并顯示在地圖上。MapX提供CreateSymbol()函數(shù)創(chuàng)建點(diǎn)圖元,用來(lái)顯示飛機(jī)位置。CreateText()函數(shù)用來(lái)創(chuàng)建文本,用來(lái)顯示飛機(jī)編號(hào)和飛機(jī)號(hào)。文本的字體、大小、顏色等屬性可以根據(jù)實(shí)際需求來(lái)予以設(shè)置;若已創(chuàng)建則修改飛機(jī)圖元的位置信息,重新設(shè)定圖元的經(jīng)緯度。
(7) 是否顯示完整軌跡??赏ㄟ^(guò)菜單欄選擇,MapX 提供的航跡顯示就是將飛機(jī)相鄰時(shí)間的位置點(diǎn)連成線。MapX提供CreateLine()函數(shù)創(chuàng)建線圖元。若顯示完整軌跡,則軟件不會(huì)刪除軌跡,但需要將本應(yīng)該刪除的軌跡線的ID保存在Dsave[n][]數(shù)組中,用于當(dāng)再次選擇不顯示完整軌跡時(shí)刪除這些軌跡線;若不顯示完整軌跡,則需判斷飛機(jī)軌跡線是否足夠長(zhǎng)。如果不夠長(zhǎng),則創(chuàng)建新軌跡線;如果夠長(zhǎng),則在創(chuàng)建新軌跡線之前刪除最舊的一段軌跡,保持軌跡線在一定數(shù)量。
(8) 保存飛機(jī)軌跡。每間隔三個(gè)點(diǎn)保存飛機(jī)的經(jīng)緯度到結(jié)構(gòu)體數(shù)組Save[n][]中。結(jié)構(gòu)體Save[n][]由兩個(gè)float型變量組成。Save[n][]用于當(dāng)選擇“顯示完整軌跡”時(shí),用虛線畫(huà)出飛機(jī)之前的完全軌跡圖。
(9) 更新信息列表飛機(jī)信息。將飛機(jī)的相關(guān)信息實(shí)時(shí)顯示到軟件界面底部的List列表。
(10) n=n+1,判斷是否n 2.3 軟件運(yùn)行界面 軟件運(yùn)行主界面如圖7所示。 界面上部菜單和左邊工具欄為連接各個(gè)功能模塊的操作按鍵,下部為飛機(jī)部分參數(shù)信息的顯示,如飛行試驗(yàn)的高度、速度、經(jīng)度、緯度等,容易觀察,直接、便捷。在顯示信息最右邊選擇遙測(cè)站后,會(huì)顯示飛機(jī)相對(duì)該遙測(cè)站的水平和垂直角度。狀態(tài)欄顯示軟件網(wǎng)絡(luò)連接情況和測(cè)距數(shù)值,以及當(dāng)前時(shí)間和地圖上任意點(diǎn)的經(jīng)緯度。圖中以機(jī)場(chǎng)為中心顯示坐標(biāo)軸,并顯示4架飛機(jī),其中飛機(jī)1顯示了完整軌跡,并用虛線畫(huà)出。軟件界面友好,使用方便,維護(hù)簡(jiǎn)單,穩(wěn)定性好,通用性強(qiáng)。 3 結(jié) 語(yǔ) 本文介紹了采用面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言VC++,集成MapX控件,設(shè)計(jì)并實(shí)現(xiàn)的多目標(biāo)電子地圖的開(kāi)發(fā)。由于軟件采用模塊化設(shè)計(jì),可根據(jù)以后監(jiān)控需求進(jìn)行快速的升級(jí)。使用結(jié)果表明,軟件完全滿足多架飛機(jī)同時(shí)監(jiān)控的需求,并很好的提升了遙測(cè)信號(hào)的質(zhì)量,對(duì)型號(hào)試飛任務(wù)起到積極的作用。 參考文獻(xiàn) [1] 秦浩,徐景碩,高揚(yáng),等.基于VC++與MapX的導(dǎo)航電子地圖的實(shí)現(xiàn)[J].航空計(jì)算技術(shù),2011,41(5):98?101. [2] MapInfo Corporation. MapX 5.0開(kāi)發(fā)人員手冊(cè)[EB/OL].[2012?09?17].http://www.doc88.com/p?316626589957.html. [3] 翟亞棟,陳懷民,吳成富,等.基于MapX開(kāi)發(fā)的無(wú)人機(jī)導(dǎo)航系統(tǒng)[J].計(jì)算機(jī)測(cè)量與控制,2008,16(11):1626?1628. [4] 顏輝武,吳小芳,祝國(guó)瑞.VC++環(huán)境下基于MapX控件的GIS應(yīng)用軟件的開(kāi)發(fā)[J].昆明理工大學(xué)學(xué)報(bào):理工版,2001,26(6):12?17. [5] 王慶,周喜寧,宋磊.基于MapX的模擬器電子海圖軟件設(shè)計(jì)研究[J].現(xiàn)代電子技術(shù),2014,37(1):119?122. [6] 王延路,劉語(yǔ)喬.試飛監(jiān)控電子地圖設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2013,35(13):131?133.