郝士林 李方軍 朱永杰
(西安電子工程研究所 西安 710100)
vxworks系統(tǒng)具有高效的微內(nèi)核、可裁剪性、高可靠性、高穩(wěn)定性等優(yōu)點,被廣泛應用于農(nóng)業(yè)、工業(yè)、醫(yī)療、軍事、航空航天等領(lǐng)域。隨著計算機硬件性能的提高,以前因硬件性能限制并不要求圖形界面的vxworks應用軟件也被越來越多的領(lǐng)域要求具備基本甚至復雜圖形功能。鑒于基于vxworks開發(fā)的軟件具備高實時性、高可靠性、支持圖形顯示、支持電子地圖等特點,目前軍品型號人機交互項目通常要求在vxworks操作系統(tǒng)進行設(shè)計實現(xiàn)。
vxworks操作系統(tǒng)在可靠性、實時性上滿足軟件設(shè)計要求。Windml作為風河公司的多媒體庫雖能提供對基本的圖元、視頻、音頻的支持,但自帶的控件不足以支撐復雜圖形界面的顯示[1],如電子地圖中的圖形要素。為了實現(xiàn)復雜的圖形界面,往往會借助于當今比較成熟的vxworks圖形開發(fā)工具,DeltaGUI作為輕量級的嵌入式圖形開發(fā)包具有可靠性強、占用資源少、易移植等優(yōu)點,能很好的支持嵌入式圖形界面的開發(fā),被廣泛應用于vxworks系統(tǒng)輕量級圖形開發(fā)上。
現(xiàn)在主流電子地圖都是在桌面地理信息系統(tǒng)工具Mapinfo中制作的完成,在嵌入式系統(tǒng)中并沒有專門的軟件或插件支持Mapinfo格式的電子地圖[2],在Vxworks系統(tǒng)實現(xiàn)電子地圖功能首先需開發(fā)Mapinfo電子地圖文件讀取工具,對讀取的地圖信息進行顯示。
Tab文件和MIF文件是Mapinfo地圖的主要存儲格式, 其中,Mapinfo的Tab數(shù)據(jù)存儲在屬性表結(jié)構(gòu)文件(.tab)與屬性數(shù)據(jù)文件(.dat)中,空間數(shù)據(jù)保存在空間數(shù)據(jù)文件(.map)中,兩者通過交叉索引文件(.id)聯(lián)系。
Mapinfo公司并沒有對外公布原始矢量形式存儲的數(shù)據(jù)格式,但其提供的地圖數(shù)據(jù)交換格式(MIF和MID)可以供開發(fā)人員做二次開發(fā),該格式的空間數(shù)據(jù)以ASCII碼存儲,易生成且便于編譯。
MIF文件的內(nèi)容主要包括“頭文件區(qū)”和“數(shù)據(jù)區(qū)”,在“頭文件區(qū)”規(guī)定了地圖的版本信息、字符集、投影坐標類型及表的結(jié)構(gòu);在“數(shù)據(jù)區(qū)”記錄了圖形的坐標和圖形屬性信息,包括點、文本、線、折線、區(qū)域、矩形、圓角矩形、橢圓、圓弧等;MID作為圖形屬性數(shù)據(jù)描述文件,對MIF文件中定義的圖形要素的屬性進行說明。
MapInfo軟件不能在vxworks系統(tǒng)下讀取MapInfo原始地圖數(shù)據(jù),在vxworks系統(tǒng)下開發(fā)電子地圖,只能從mif和mid文件獲取地圖數(shù)據(jù)。地圖數(shù)據(jù)被存放在多個mif和mid文件,每個mif文件為一個圖層,圖形信息以圖元的形式存儲在mif圖層文件中,每個圖元的描述信息存儲在mid文件中,在程序設(shè)計時采用鏈表方式對文件信息進行存儲,根據(jù)mif文件格式定義圖元、圖層的數(shù)據(jù)結(jié)構(gòu)體,典型的圖層結(jié)構(gòu)體采用鏈表形式,內(nèi)容包括點、線、折線、多邊形、區(qū)域、弧線等的屬性描述。
地圖讀取方法:打開第一個mif圖層文件,開辟內(nèi)存創(chuàng)建圖層鏈表指針,將圖層中的圖形數(shù)據(jù)和mid文件中圖形描述信息以鏈表的形式存放在圖層結(jié)構(gòu)體中,此圖層的圖元全部讀取完畢后,讀取下一個mif圖層文件,再次開辟內(nèi)存創(chuàng)建圖層鏈表指針,將新的圖層指針賦值給上一圖層結(jié)構(gòu)體中的下一圖層指針后,進行本圖層數(shù)據(jù)的讀取和存儲,以此類推完成所有文件的讀取,并將所有圖層的數(shù)據(jù)存在內(nèi)存變量中,地圖讀取的過程是通過C++封裝的地圖讀取類實現(xiàn),圖1為電子地圖文件讀取流程圖。
圖1 地圖文件讀取流程圖
DeltaGUI實現(xiàn)作圖的原理是在系統(tǒng)內(nèi)存中分配一個與實際物理顯存相對應的虛擬顯示存儲空間,然后把虛擬顯示存儲空間的圖像數(shù)據(jù)更新到物理顯示存儲空間上以實現(xiàn)圖像的顯示。畫圖是把虛擬顯示存儲空間的圖像數(shù)據(jù)更新到物理顯示存儲空間的過程,實現(xiàn)圖形的刷新,這種顯示方式為脫屏緩沖,脫屏緩沖技術(shù)可最大限度的提高圖形顯示速度,減少圖形顯示時的閃爍。但出于效率和視覺考慮,在進行圖形數(shù)據(jù)更新時,可只更新發(fā)生變化的那塊區(qū)域的數(shù)據(jù),這一區(qū)域被稱作為失效(無效)區(qū)域,若整個屏幕都發(fā)生變化,失效區(qū)域為整個屏幕。
電子地圖的顯示及相關(guān)操作由PPI顯示類實現(xiàn),把內(nèi)存中的地圖數(shù)據(jù)通過圖形工具包DeltaGUI以圖層的方式進行畫圖。為了保證畫圖的高效性,只繪制虛擬顯存中失效矩形區(qū)域內(nèi)的圖元,當?shù)谝淮卫L圖時,失效區(qū)域為整個PPI屏幕,以后繪圖的失效區(qū)域是地圖或背景被覆蓋而需要重繪的矩形區(qū)域。
地圖縮放功能是響應雷達顯示量程的切換操作,根據(jù)切換后的量程自動切換地圖顯示范圍,當切換雷達顯示量程時,使整個矩形區(qū)域失效,按照電子地圖顯示流程,重新繪制地圖背景。
圖2 脫屏緩沖原理
圖3 電子地圖顯示流程圖
區(qū)域放大功能是將關(guān)心的區(qū)域放大至全屏,在需要放大的矩形區(qū)域左上角單擊鼠標左鍵不放,然后拖動鼠標至矩形區(qū)域右下角,釋放鼠標左鍵,矩形區(qū)域會放大到整個PPI屏幕,單擊鼠標右鍵恢復普通視圖。內(nèi)部處理過程:首先根據(jù)DeltaGUI反饋的鼠標左鍵按下、鼠標移動、鼠標左鍵抬起、鼠標右鍵抬起消息,判斷是否執(zhí)行了區(qū)域放大操作或恢復普通視圖操作;若是區(qū)域放大操作,根據(jù)選擇的矩形區(qū)域進行比例放大,并重新計算放大后的顯示中心屏幕坐標,使整個矩形區(qū)域失效,按畫圖的流程完成畫圖;若是恢復圖通視圖操作,則將區(qū)域放大模式恢復至普通模式。
應用程序運行在單核CPU主頻1.1GHz,顯卡為intel Extreme Graphics2的單板機上。應用程序除了進行網(wǎng)絡(luò)任務(wù)、串口任務(wù)、圖形控件的操作與響應、鼠標鍵盤的操作與響應外,每40ms還進行一次屏幕刷新,刷新的主要內(nèi)容包括點跡、航跡、雜波、微表、地圖。圖4為電子地圖顯示效果圖、圖5為區(qū)域放大顯示效果圖,操作過程中,圖形界面無卡頓,其他任務(wù)及操作響應及時,表明這種基于DeltaGUI的顯示方法能實現(xiàn)地圖及雷達信息的顯示功能,經(jīng)過用戶長時間的使用,滿足可靠性和實時性的要求,且采用通用的C++語言實現(xiàn),具有較強的移植性,可以應用在有相同需求的其他項目中。
圖4 電子地圖顯示效果圖
圖5 區(qū)域放大顯示效果圖
本文以某型雷達為背景,講述了在vxworks操作系統(tǒng)下電子地圖的實現(xiàn)方法,并在有限硬件平臺上實現(xiàn)電子地圖的顯示,最后成功應用在某在研型號項目中,提升了嵌入式系統(tǒng)實時性、可靠性、支和人機交互能力。該技術(shù)成果可在嵌入式指揮控制系統(tǒng)、火力控制系統(tǒng)中推廣,具有良好的應用前景。
參考文獻:
[1] 栗明,栗科峰.嵌入式圖形庫Windml中窗口控件的實現(xiàn)[J].數(shù)字技術(shù)與應用,2011(4): 125-126.
[2] 翟艷磊,何祥宇,夏玉杰.嵌入式電子地圖設(shè)計中Mapinfo文件的讀取和顯示[J].現(xiàn)代計算機,2010(2): 122-125.
[3] 李旭升.MiniGUI的研究及在嵌入式車載導航系統(tǒng)中的應用[D].成都:西華大學,2009.
[4] 汪亞雷,余春暄.基于嵌入式Linux的Mapinfo格式地圖顯示[J].嵌入式操作系統(tǒng)應用,2006,22(10-2):185-186.
[5] 趙從欣.基于Mapinfo平臺的Mif/mid文件成圖方法[J].四川測繪,2003:28-32.
[6] 李杰,付夢印,鄧志紅.Mapinfo格式的地圖數(shù)據(jù)在嵌入式導航系統(tǒng)中的應用[J].計算機工程與應用,2003(13):214-217.
[7] 北京科銀京成技術(shù)有限公司.DeltaGUI技術(shù)白皮書3.0[C].2002.