羅文
(四川九洲空管科技有限責(zé)任公司,綿陽 621000)
?
基于WindML的導(dǎo)航儀顯控軟件界面設(shè)計(jì)與實(shí)現(xiàn)
羅文
(四川九洲空管科技有限責(zé)任公司,綿陽 621000)
針對(duì)導(dǎo)航儀顯控軟件外部接口多、實(shí)時(shí)性要求高、人機(jī)交互操作頻繁的特點(diǎn),在VxWorks平臺(tái)下利用其自帶的基礎(chǔ)圖形庫(WindML),采用圖形雙緩沖防閃爍等技術(shù), 解決了顯控軟件人機(jī)交互頻繁、實(shí)時(shí)性要求高的問題。經(jīng)測試,軟件可靠性高,界面友好,具有導(dǎo)航的各項(xiàng)基本功能。
導(dǎo)航軟件;VxWorks;WindML
本文設(shè)計(jì)的導(dǎo)航儀軟件是一種集北斗、GPS、格洛納斯(GLONASS)三種導(dǎo)航模式于一體的導(dǎo)航軟件。在海上航行中,如果沒有導(dǎo)航儀支持,航行者很容易迷失方向。從最開始的羅盤,以地球磁場指示方向,到現(xiàn)在以衛(wèi)星信號(hào)作為導(dǎo)航。目前,美國、俄羅斯各自已獨(dú)立開發(fā)出兩套免費(fèi)的導(dǎo)航系統(tǒng),因此開發(fā)基于北斗衛(wèi)星導(dǎo)航系統(tǒng)的導(dǎo)航軟件意義重大。
在航行中,為減小導(dǎo)航儀的尺寸和降低功耗,顯控軟件運(yùn)行在嵌入式平臺(tái)下。嵌入式系統(tǒng)采用VxWorks.VxWorks以其良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的開發(fā)環(huán)境在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。本文在VxWorks嵌入式平臺(tái)下采用圖形雙緩沖防閃爍等技術(shù), 解決了顯控軟件人機(jī)交互頻繁、實(shí)時(shí)性要求高的問題,基本滿足航海導(dǎo)航儀的要求。
根據(jù)導(dǎo)航儀功能的需求,顯控軟件分為衛(wèi)星狀態(tài)、導(dǎo)航頁面、系統(tǒng)設(shè)置三個(gè)功能模塊,每個(gè)功能模塊下包含幾個(gè)主界面,如圖1所示。
圖1 顯控軟件整體功能示意圖
綜合信息頁面為開機(jī)主界面,每個(gè)主界面中又包含多個(gè)子界面,如衛(wèi)星狀態(tài)信息主界面包含BD衛(wèi)星信息、GPS衛(wèi)星信息、GLO衛(wèi)星信息等子界面。主界面和子界面構(gòu)成了軟件的框架。
1.1導(dǎo)航軟件外部接口
軟件外部接口如圖2所示,顯控軟件通過串口與主板上的導(dǎo)航板相連,實(shí)現(xiàn)顯控軟件與導(dǎo)航板之間的數(shù)據(jù)通信(接收、發(fā)送)和數(shù)據(jù)解算、處理,得到位置、速度、衛(wèi)星信息等數(shù)據(jù),并將這些信息轉(zhuǎn)發(fā)至終端顯示器顯示,顯控軟件可通過串口將用戶需求信息發(fā)送給外部系統(tǒng),另外,也可將面板的按鍵信息發(fā)送至后臺(tái),對(duì)導(dǎo)航板進(jìn)行操控。
圖2 軟件外部接口示意圖
1.2軟件架構(gòu)設(shè)計(jì)
顯控軟件功能復(fù)雜,頁面較多,其軟件架構(gòu)設(shè)計(jì)示意圖如圖3所示,顯控軟件首先對(duì)串口進(jìn)行輪詢,讀取導(dǎo)航板數(shù)據(jù)并解碼,然后將解碼后的數(shù)據(jù)存儲(chǔ)在緩沖區(qū)消息隊(duì)列并傳送至終端;同時(shí),終端按鍵監(jiān)聽任務(wù)一直處于阻塞狀態(tài),當(dāng)監(jiān)聽到用戶的按鍵響應(yīng)后時(shí),通過串口將指令發(fā)送給導(dǎo)航板,對(duì)導(dǎo)航板的工作狀態(tài)進(jìn)行操控。
圖3 軟件架構(gòu)設(shè)計(jì)示意圖
顯控軟件還可以將節(jié)點(diǎn)的位置、速度等數(shù)據(jù)通過主板上的串口發(fā)送至外部系統(tǒng),也可將外部系統(tǒng)的指令通過串口轉(zhuǎn)發(fā)至導(dǎo)航板,對(duì)導(dǎo)航板進(jìn)行操控。
WindML為VxWorks自帶的基礎(chǔ)圖形庫,支持基于嵌入式系統(tǒng)的多媒體應(yīng)用程序,軟件獨(dú)立性和可移植性較好[1]。
WindML包括軟件開發(fā)工具包(SDK)、設(shè)備驅(qū)動(dòng)程序開發(fā)包(DDK)兩個(gè)組件,SDK組件提供了完整的可供用戶調(diào)用的API函數(shù)集,可用來開發(fā)應(yīng)用程序,包括圖形、輸入處理、多媒體、字體和內(nèi)存管理。DDK 組件提供了一個(gè)全面的驅(qū)動(dòng)程序參考庫[2],包括API函數(shù)庫和硬件配置。WindML的層次結(jié)構(gòu)如圖4所示。其中應(yīng)用程序?yàn)轱@控軟件的主體,包括導(dǎo)航算法、任務(wù)調(diào)度、接口數(shù)據(jù)處理等,輸出設(shè)備包括終端顯示器、與導(dǎo)航板和外部相連的串口設(shè)備等,輸入設(shè)備包括終端控制按鍵等。
圖4 WindML層次結(jié)構(gòu)圖
2.1漢字顯示技術(shù)
由于WindML 不支持漢字的顯示,為實(shí)現(xiàn)漢字的顯示,需根據(jù) WindML 的字符輸出原理創(chuàng)建漢字字庫。
利用WindML的字體API 函數(shù)集,調(diào)用字體驅(qū)動(dòng)來顯示文字。字體API 函數(shù)與字體驅(qū)動(dòng)之間的接口靈活,支持各種字體。如向量字體[3],可以通過增加字體引擎,修改字體驅(qū)動(dòng)來實(shí)現(xiàn)向量字體的顯示。
WindML 支持雙字節(jié)編碼,用于漢字的點(diǎn)陣存儲(chǔ)、點(diǎn)陣獲取、點(diǎn)陣顯示,漢字碼到漢字的顯示可通過 WindML 的雙字節(jié)顯示函數(shù)實(shí)現(xiàn)。這種方法使 WindML 的其他上層組件很方便地實(shí)現(xiàn)漢字顯示[4]。實(shí)現(xiàn)的大體過程如下
1) 通過獲取顯示設(shè)備標(biāo)識(shí)
pRegistryData=uglRegistryFind (UGL-DISPLAY-TYPE, 0, 0, 0);
devId=(UGL-DEVICE-ID)pRegistryData->id;
2) 獲取字體驅(qū)動(dòng)
pRegistryData=uglRegistryFind (UGL-FONT-ENGINE-TYPE, 0, 0, 0);
fontDrvId=(UGL-FONT-DRIVER-ID)pRegistryData->id;
3) 設(shè)置字體
在tornado安裝目錄下的WIND-BASE/target/h/ugl/config/uglConfig.h文件描述了整個(gè)系統(tǒng)能使用的字符集。
uglFontFindString(fontDrvId, "pixelSize=12", &fontDef);
font=uglFontCreate(fontDrvId, &fontDef);
4) 顯示字體
gc=uglGcCreate(devId);
uglTextDraw(gc, x, y,-1, message).
2.2中文輸入法
為方便用戶輸入操作,能夠快速地輸入漢字。輸入法具有拼音組合自動(dòng)識(shí)別功能,不需要用戶在一個(gè)個(gè)字母間進(jìn)行切換,如圖5所示。
圖5 中文輸入法邏輯流程圖
當(dāng)用戶在字體編輯框中輸入字母“BD”時(shí),就會(huì)根據(jù)拼音搜尋可能的組合,“笨蛋”、“百度”、“北斗”、“部隊(duì)”等,這些組合素材以文件的形式保存在Hanzi0.c,Hanzi1.c和Hanzi2.c文件中。由于所有的拼音組合在編輯框內(nèi)沒法全部展示,就通過分篇顯示,在編輯框中展示的效果就是“1. 笨蛋 2. 百度 3. 北斗 4. 部隊(duì)”,還有分篇符“上一篇”,“下一篇”。
根據(jù)輸入拼音,查找可能的漢字組合
int Hanzifind(const char *msg, char neirong[][15], int start, int maxnum)/*msg由用戶選擇的拼音組合,根據(jù)數(shù)字找到。neirong:返回找到漢字內(nèi)容,start 對(duì)應(yīng)上例中序號(hào)為1的 “笨蛋”, maxnum為本篇的最大組合長度*/
{
hanzitmp=HanzifindCollection(msg[0]);/*在Hanzi0.c,Hanzi1.c和Hanzi2.c中搜索首字母開頭的數(shù)組,如上面例子中的首字母“B”,*/
for(i=0; 1;i++)
{
if(hanzitmp[i].num==0) break;/*搜索完畢或者拼音組合為空 */
if(Hanzipincmp(msg, &(hanzitmp[i]))==OK)/*漢字拼音比較函數(shù) */
{
/*將搜索到的組合保存至neirong */
}
}
return num;/*返回拼音組合的個(gè)數(shù) */
2.3圖形雙緩沖防閃爍技術(shù)
由于導(dǎo)航儀顯控軟件功能多,圖形操作計(jì)算量大,需要多次訪問存放在消息隊(duì)列(msgRecUpdateQ)中的緩沖數(shù)據(jù)才能寫入完整的圖形數(shù)據(jù)。對(duì)于衛(wèi)星狀態(tài)信息等數(shù)據(jù)量大的頁面,如果采用通用的方法繪制頁面,看到的效果可能是一部分一部分地顯示出來,畫面閃爍抖動(dòng)都很大。考慮到此情況,本文采用雙緩沖技術(shù),該技術(shù)使中間結(jié)果存放在另一個(gè)緩沖區(qū)中,所有的計(jì)算結(jié)束時(shí),該緩沖區(qū)已經(jīng)存儲(chǔ)了完整的圖形后,再將該緩沖區(qū)的圖形數(shù)據(jù)一次性復(fù)制到顯示緩沖區(qū)[5]。
以衛(wèi)星狀態(tài)信息為例,背景圖和底部的頁面切換欄是不變的,發(fā)生變化的是當(dāng)前的各衛(wèi)星位置信息,因此繪制當(dāng)前頁面時(shí),先在后臺(tái)處理,處理完成后,將后臺(tái)的處理結(jié)果復(fù)制到前端。這樣就完成界面的整體顯示,而不會(huì)出現(xiàn)閃爍抖動(dòng)。
先進(jìn)行雙緩沖設(shè)置,初始化兩個(gè)內(nèi)存區(qū)域
UGL-PAGE-ID page[2];
page[0]=UGL-PAGE-ZERO-ID;
page[1]=uglPageCreate(devId);/*創(chuàng)建雙緩沖*/
page[0]為前端頁面,page[1]為后臺(tái)處理頁面
uglPageDrawSet(devId, page[0]);
page[0]、page[1]前后臺(tái)交替處理,完成頁面繪制。
int flag=0;/*頁面切換控制變量 */
while(1)
{
ClearScreen(gc);
…
if(flag==0)/*page[0]在前臺(tái)顯示*/
{
uglPageVisibleSet(devId,page[0]);
uglPageDrawSet(devId,page[1]);
flag=1;/*0,1交替賦值,實(shí)現(xiàn)前臺(tái)、后臺(tái)頁面切換 */
}
Else/*page[1]在前臺(tái)顯示*/
{
uglPageVisibleSet(devId,page[1]);
uglPageDrawSet(devId,page[0]);
flag=0;
}
本文采用WindML圖形設(shè)計(jì)技術(shù),設(shè)計(jì)了一款基于WindML的導(dǎo)航儀顯控軟件。在華力創(chuàng)通的HWA-GNSS-8000多體制衛(wèi)星導(dǎo)航信號(hào)模擬器模擬的高動(dòng)態(tài)場景下,軟件持續(xù)穩(wěn)定運(yùn)行時(shí)間大于720小時(shí)。軟件界面友好如圖6所示,基本實(shí)現(xiàn)航點(diǎn)航線管理、航線規(guī)劃、衛(wèi)星星座圖等功能??赏茝V應(yīng)用于其他導(dǎo)航定位終端軟件的設(shè)計(jì)。
圖6 顯控軟件定位主界面
我國北斗導(dǎo)航終端設(shè)備、技術(shù)與國際先進(jìn)水平還存在一定的差距,如終端設(shè)備體積較大,產(chǎn)品價(jià)格比GPS偏高,定位精度不夠高,基于網(wǎng)絡(luò)化的位置服務(wù)應(yīng)用還不夠廣,伴隨著導(dǎo)航系統(tǒng)的發(fā)展,北斗導(dǎo)航終端設(shè)備與技術(shù)未來的發(fā)展趨勢為:
1) 小型化:為滿足航海導(dǎo)航的需求,導(dǎo)航儀的體積小,功耗低,導(dǎo)航軟件運(yùn)行的嵌入式平臺(tái)也將升級(jí)換代,顯控軟件的設(shè)計(jì)將更高效。
2) 實(shí)時(shí)監(jiān)控和網(wǎng)絡(luò)化位置查詢:利用北斗導(dǎo)航系統(tǒng),可以把當(dāng)前位置上報(bào)給監(jiān)控中心,同時(shí)可以在地圖上實(shí)時(shí)查看其他船只的位置信息。
3) 構(gòu)建北斗“位置云”平臺(tái),位置云是一種基于 3S 技術(shù)、IT 技術(shù)、網(wǎng)絡(luò)與通信技術(shù)的綜合體系,網(wǎng)絡(luò)中各節(jié)點(diǎn)可以實(shí)時(shí)共享位置信息,利用云計(jì)算的架構(gòu)和特點(diǎn),為用戶終端提供基于位置的相關(guān)服務(wù)。
[1]陳智育, 溫彥軍, 陳琪. VxWorks 程序開發(fā)實(shí)踐[M]. 北京: 人民郵電出版社, 2004.
[2]Wind River System Inc. WindML 3.0 API Reference[R].2002.[3]黃秀珍, 何加銘, 邰曉英. 基于FreeType嵌入式矢量字體引擎的研究[J]. 寧波大學(xué)學(xué)報(bào), 2010,23(4): 56-60.
[4]梁小琴,王峰. WindML 漢字顯示技術(shù)[J]. 應(yīng)用天地. 2008(2):51-53.
[5]周代發(fā).基于VxWorks的移動(dòng)終端組合導(dǎo)航系統(tǒng)的研究與設(shè)計(jì)[D]. 西安:西安電子科技大學(xué) 2014.
Interface Design of Display& Control Software of Navigation Systems Based on WindML
LUO Wen
(JiuzhouATCTechnologyCo.,Ltd,Mianyang621000,China)
Display& Control software of Navigation systems has the features of many external interfaces, highly real-time, frequent human-computer interaction,to solve the problem of the high frequency and high real-time, this paper adopts screen double buffering anti flicker, and other technologies. The test has proved the reliability of the software and the interface of the software is friendly with good function.
Navigation software; VxWorks; WindML
10.13442/j.gnss.1008-9268.2016.04.020
2016-01-22
TN967.1
A
1008-9268(2016)04-0094-05
羅文(1981-)男,湖南漢壽人,碩士,工程師,現(xiàn)從事實(shí)時(shí)嵌入式軟件開發(fā)工作。
聯(lián)系人: 羅文 E-mail:30983638@163.com