国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于JARI_EGK面向?qū)ο蟮穆晠蕊@控界面軟件開發(fā)方法

2015-02-21 02:15:18徐麗華第七一五研究所杭州310023
聲學(xué)與電子工程 2015年2期

徐麗華(第七一五研究所,杭州,310023)

?

基于JARI_EGK面向?qū)ο蟮穆晠蕊@控界面軟件開發(fā)方法

徐麗華
(第七一五研究所,杭州,310023)

摘要提出一種基于控件技術(shù)的層次化設(shè)計和面向?qū)ο蟮脑O(shè)計方法。把各聲吶功能模塊的公用功能抽象成一個具備通用功能的基類,各聲吶功能模塊在基類的基礎(chǔ)上擴(kuò)展成獨立的功能類,通過組合各功能類的對象,即可完成畫面顯示、各對象獨立管理函數(shù)實現(xiàn)、數(shù)據(jù)刷新、事件響應(yīng)等功能。工程應(yīng)用結(jié)果表明,此方法開發(fā)的軟件在功能和性能方面均滿足聲吶圖形界面的要求。

關(guān)鍵詞聲吶圖形界面;VxWorks;JARI_EGK;面向?qū)ο笤O(shè)計;功能類

聲吶顯控臺是聲吶系統(tǒng)的重要組成部分,是聲吶操作人員人機(jī)交互的主要工具。顯控臺的設(shè)計主要考慮操作響應(yīng)的實時性和人機(jī)界面的友好性。聲吶顯控軟件主要以嵌入式實時系統(tǒng)VxWorks為平臺進(jìn)行開發(fā),該操作系統(tǒng)以其卓越的多任務(wù)處理能力已經(jīng)成為目前軍事領(lǐng)域中使用最廣泛的操作系統(tǒng)。VxWorks對圖形界面開發(fā)支持較弱,界面開發(fā)基于WindML,較為復(fù)雜,并且無控件支持[1]。如果在聲吶多功能顯控臺中直接利用WindML進(jìn)行人機(jī)界面圖形開發(fā),需要程序開發(fā)人員熟悉外部的輸入輸出事件,程序開發(fā)的工作量很大,無法滿足艦艇中聲吶多功能顯控臺不斷提高的用戶需求[2]。本文應(yīng)用VxWorks實時操作系統(tǒng)下基于控件技術(shù)的圖形開發(fā)工具JARI_EGK和面向?qū)ο笤O(shè)計方法,實現(xiàn)了對WindML的封裝和對聲吶主要顯示功能類的封裝,完成了聲吶圖形界面軟件開發(fā),提高了軟件重用性、可擴(kuò)展性和可維護(hù)性。

1 聲吶圖形界面內(nèi)容及特點

根據(jù)聲吶顯控圖形界面的內(nèi)容及特點,聲吶顯示界面一般包含工作參數(shù)顯示、圖形信息顯示、字符信息顯示、設(shè)備狀態(tài)顯示和菜單顯示。主要的顯示內(nèi)容可以歸納為三類,即圖形窗口、圖形信息和文字。圖形窗口顯示包括坐標(biāo)刻度、左右舷標(biāo)記、色標(biāo)塊顯示和光標(biāo)值顯示等;圖形信息顯示包括方位-幅度圖顯示、方位-幅度-歷程圖顯示、方位-距離掃描圖顯示和跟蹤信息的圖形顯示等;文字顯示包括工作參數(shù)顯示、工作狀態(tài)顯示、跟蹤結(jié)果的文字顯示和菜單顯示等。

2 JARI_EGK簡述

2.1層次框架

窗口管理及可視化控件JARI_EGK作為多功能顯控臺的基本軟件配置項,是一款針對嵌入式系統(tǒng)的圖形用戶界面設(shè)計工具,包括豐富的常用控件庫和基于該控件庫的用戶圖形界面設(shè)計工具[3]。JARI_EGK采用與平臺無關(guān)面向?qū)ο蟮腃++設(shè)計,可以實現(xiàn)跨平臺應(yīng)用的用戶圖形界面開發(fā),實現(xiàn)基于事件驅(qū)動的GUI應(yīng)用。針對VxWorks平臺,JARI_EGK在WindML基礎(chǔ)上實現(xiàn)了基本控件集,同時采用WindML窗口管理器,因此基于JARI_EGK開發(fā)的程序可與WindML其它應(yīng)用程序并存。

2.2窗口和控件

JARI_EGK采用了面向?qū)ο蟮脑O(shè)計方法,包含了人機(jī)界面中基本的窗口和控件,它包括四個主要的類:Egk_Widget(控件基類)、Egk_Group(控件組類)、Egk_Window(窗口類)和Egk(全局類)。

Egk_Widget類是JARI_EGK其他所有小窗口類的基類,它包含有控件的基本屬性,如X坐標(biāo)、Y坐標(biāo)、寬度和高度;控件的回調(diào)函數(shù)、顯示、隱藏和是否可見等方法。另外還包括兩個重要的虛函數(shù)virtual void Draw()和virtual void handle(int event),派生類可以重載這兩個函數(shù),分別用來重畫控件和處理控件的消息事件。Egk_Group類是由Egk_Widget類派生出來的,而Egk_Window類是Egk_Group類的子類。

3 面向?qū)ο蟮膽?yīng)用程序設(shè)計

傳統(tǒng)的聲吶圖形顯示程序設(shè)計是采用面向過程的軟件設(shè)計方法,把功能模塊封裝成公共的函數(shù),沒有整體窗口管理概念,代碼的重復(fù)性高,較為復(fù)雜且容易出錯。本文實現(xiàn)了完全基于面向?qū)ο蟮能浖O(shè)計,對于不同的圖形功能模塊進(jìn)行不同的類的定義,在JARI_EGK基礎(chǔ)上進(jìn)行二次封裝,完成聲吶各圖形顯示功能類的封裝。聲吶主要的圖形功能模塊為幅度圖、歷程圖、掃描圖、文字顯示等,一個功能模塊構(gòu)造成一個相應(yīng)的功能類。在類的構(gòu)造函數(shù)中完成內(nèi)存申請、內(nèi)存清空、設(shè)置圖形區(qū)域、設(shè)置圖形顏色等初始化的構(gòu)造,在類的析構(gòu)函數(shù)中完成內(nèi)存的釋放,在類的虛函數(shù)Draw()中可根據(jù)不同的功能模塊來完成類的畫圖。在主程序中發(fā)起一個任務(wù)用于某個功能模塊的畫圖實現(xiàn),一旦檢測到有數(shù)據(jù)刷新,就把數(shù)據(jù)傳入類的數(shù)據(jù)區(qū)保存起來,之后調(diào)用該類的Draw()函數(shù)來完成圖形的重繪,圖形畫圖功能即可完成。下面分節(jié)介紹通用基類的封裝、功能類的派生、窗口和功能類的應(yīng)用。

3.1通用基類的封裝

在JARI_EGK基類Egk_Widget窗口類的基礎(chǔ)上進(jìn)行功能類的派生來完成功能類的封裝。本文設(shè)計一個使用于聲吶顯控臺的通用畫圖窗口類CDrawWin,該類完成聲吶圖形顯示模塊通用功能,包括設(shè)置窗口大小、設(shè)置視角、畫面貼圖、光標(biāo)信息顯示和刻度值顯示等公共功能。從該窗口類派主要函數(shù)及注解如下。

class CDrawWin: public Egk_Widget

{

public:

void SetWin(int ileft,int itop,int iwidth,int iheight)//設(shè)置窗口大小

void SetView(int ipview)//設(shè)置視角,用來完成上下屏切換

void DrawMapBitBlt(int iactivebit)//完成內(nèi)存畫面后往顯存貼圖

void DrawMouseMove(int iActive,int iMouseFlag,int iAre,CPoint Point,CPoint iDispPos,int iMouseBegin,int iMousEnd,CString iText,float fMouseBegin,float fMousEnd,CString fText)//完成光標(biāo)類型,光標(biāo)顯示相對窗口的區(qū)域,光標(biāo)值的計算方式,以及需要傳入的顯示文字等功能

Void DrawScale(int iactive,int iScaleFlg,int iScaleBegin,int iScaleEnd,int iScaleNumb,int iScaleLenth)//完成刻度的顯示,包括類型、起始值、個數(shù)、長度

}

3.2功能類的派生

根據(jù)聲吶的主要顯示內(nèi)容,從通用畫圖窗口類CDrawWin派生出幅度圖類、歷程圖類、掃描圖類、文字顯示類。各功能類分別根據(jù)自己的需要通過Draw()的改寫來完成各自的功能。根據(jù)每一個需要完成的任務(wù),申請一個類的對象,該對象即具備所有該類的資源。在功能類設(shè)計好之后,申請一個功能類的對象,同時對該對象的顯示特點進(jìn)行標(biāo)記,在Draw()函數(shù)中根據(jù)該標(biāo)記完成相應(yīng)的畫圖。有某一功能類需要新的顯示要求時,只要在Draw()函數(shù)內(nèi)添加根據(jù)顯示要求的畫圖方法即可。

根據(jù)不同的類型標(biāo)志來實現(xiàn)不同的幅度圖的顯示。幅度圖根據(jù)類型可分為:直線填充、柱狀填充和包絡(luò)圖,根據(jù)不同的數(shù)據(jù)要求又可以判斷是否需要進(jìn)行幅度縮放顯示。

歷程類主要的實現(xiàn)方法為原畫面整體向下移動一個象素,再灰度化當(dāng)前一行的象素即可。歷程圖上還要實現(xiàn)跟蹤打點并標(biāo)注跟蹤器號。

掃描類主要的實現(xiàn)方法為清空原掃描線,灰度化當(dāng)前行數(shù)據(jù),在上一行畫新的掃描線。掃描類的Draw()函數(shù)可根據(jù)不同的標(biāo)志畫彩色掃描圖和灰度掃描圖。

文字類的畫圖包括標(biāo)題欄信息顯示,跟蹤信息文字顯示等純文字顯示,具體實現(xiàn)方法為直接文字信息輸出。

下面以幅度類為例,描述功能類的派生方法和主要函數(shù)實現(xiàn)方法。

class CWinScope:public CDrawWin

{ //畫幅度圖的子類

public:

void SetData(unsigned char idata[])//通過該函數(shù)傳遞數(shù)據(jù)

Draw()//畫具體各類型的幅度圖

}

void CWinScope:: SetData(unsigned char idata[])

{data=idata;}

void CWinScope:: draw()//幅度圖具體畫面的實現(xiàn)

{

int i = 0; int px = x();int py = y(); int pw = w();

int ph = h();

egk_push_clip(px,py,pw,ph);

egk_backcolor(EGK_BLACK);

egk_rectf(px,py,pw,ph);

egk_color((Egk_Color)EGK_GREEN);

switch (m_nScopeFlag)

{

case 1: //根據(jù)標(biāo)記選擇被動主畫面寬帶幅度圖

for(i = 1; i < pw; i++)

{egk_line(px+i,py+ph–1,px+i,py+ph–data [i]/2);}

//具體被動主畫面寬帶幅度圖畫圖實現(xiàn)

break;

}}

3.3窗口和類的應(yīng)用實例

在軟件開發(fā)時,將整個雙屏顯示器作為一個Egk_Window窗口,將上屏或者下屏顯示器作為Egk_Group控件組。在每個聲吶畫面組中添加JARI_EGK的控件對象或者添加從Egk_Widget控件基類派生的自定義類的控件對象。通過調(diào)用Egk::run()函數(shù)來實現(xiàn)整個聲吶顯控臺人機(jī)界面的圖形刷新。具體的開發(fā)方法流程圖如圖1所示。關(guān)于自定義功能模塊的添加,以聲吶被動波束形成幅度圖及歷程圖為例。軟件流程見圖2,數(shù)據(jù)處理流程圖見圖3。本文給出主要的函數(shù)調(diào)用方法:(1)申請一個幅度類的對象和歷程類的對象,完成對象的初始化,設(shè)置窗口位置,設(shè)置需要畫圖的種類,完成刻度的顯示;(2)對該對象進(jìn)行功能管理,收到未處理的數(shù)據(jù)后,把數(shù)據(jù)傳遞到對象的數(shù)據(jù)區(qū),再根據(jù)對象數(shù)據(jù)區(qū)的數(shù)據(jù)完成畫圖。

具體對象的函數(shù)調(diào)用如下:

winBD_Scope.SetWin(BDScopeLeft,BDScopeTop,BDS copeWide,BDScopeHight);//設(shè)置畫圖位置

winBD_Scope.SetFlag(ScopeFlag1); //根據(jù)需要設(shè)置具體的畫圖方式,此處為畫綠色填充幅度圖。

winBD_Scope.DrawScale(BDDoing,2,0,180,5,5);//設(shè)置刻度

winBD_ScopeProcess.SetWin(BDScopeProcessLeft,BD ScopeProcessTop,BDScopeProcessWide,BDScopeProcessHi ght);//設(shè)置畫圖位置

winBD_ScopeProcess.SetFlag(ScopeProcessFlag1);

//根據(jù)需要設(shè)置具體的畫圖方式

winBD_ScopeProcess.DrawScale(BDDoing,4,0,30,4,5);//設(shè)置左側(cè)垂直刻度,刻度值顯示4個

申請并設(shè)置好被動幅度圖、歷程圖的對象后,即在畫面上完成圖形框架的顯示。在收到數(shù)據(jù)后,進(jìn)行數(shù)據(jù)傳遞,再進(jìn)行畫圖處理即可。

memmove(g_ucBD_ScopeData,orderbuffer[OrBufOut][ 0],BDScopeWide);//接收的信數(shù)據(jù)放置到數(shù)組中

winBD_Scope.SetData(g_ucBD_ScopeData);//數(shù)據(jù)傳遞

winBD_Scope.Draw(BDDoing); //完成作圖

winBD_ScopeProcess.SetData(g_ucBD_ScopeData);//數(shù)據(jù)傳遞

winBD_ScopeProcess.Draw(BDDoing); //完成作圖

以上程序?qū)嵗砻鳎诓捎妹嫦驅(qū)ο蟮脑O(shè)計方法后,通用功能都在基類中實現(xiàn),專用功能都在專用類中實現(xiàn)。

圖1 窗口構(gòu)成流程圖

圖2 被動幅度/歷程圖的構(gòu)建

圖3 被動幅度/歷程圖圖形刷新

3.4面向?qū)ο笤O(shè)計方法的應(yīng)用效果

本文對一些常用的聲吶顯控圖形顯示功能模塊在JARI_EGK平臺的基礎(chǔ)上封裝成類。每個類完成一個功能模塊。當(dāng)需要顯示多個該功能模塊對象時,直接在需要的位置生成該類的對象即可完成圖形的顯示和基本數(shù)據(jù)流的管理。采用功能模塊類的封裝后,圖形軟件就更具有模塊化功能,程序的邏輯和條理也更為清晰,在軟件具體開發(fā)時,只需要完成不同類的實例化,即完成畫面可有機(jī)組合。在收到數(shù)據(jù)或者畫面切換后各自管理圖形刷新,每個模塊的獨立性很好。

4 總結(jié)

本文提出了一種在VxWorks操作系統(tǒng)基礎(chǔ)上,基于JARI_EGK圖形開發(fā)工具和面向?qū)ο蟮穆晠蕊@控界面軟件設(shè)計方法,有效的完成了聲吶復(fù)雜圖形界面的開發(fā)。和以往的面向過程的聲吶顯控軟件相比,該技術(shù)在軟件重用性、可擴(kuò)展性和可維護(hù)性上有較大提高,整個軟件框架結(jié)構(gòu)穩(wěn)定、邏輯清晰,軟件開發(fā)人員只需要關(guān)注軟件的具體實現(xiàn),可避免對紛繁復(fù)雜的內(nèi)部調(diào)度機(jī)制的理解和維護(hù)。該方法在多個工程上運用結(jié)果表明:采用該方法后,軟件架構(gòu)清晰,穩(wěn)定性好,可擴(kuò)展性和可維護(hù)性強(qiáng)。

參考文獻(xiàn):

[1] 周啟平,張揚(yáng),吳瓊. VxWorks開發(fā)指南與Tornado實用手冊[M].北京:中國電力出版社,2004.

[2] 李青松. 基于JARI_EGK圖形開發(fā)系統(tǒng)在聲吶多功能顯控臺中的應(yīng)用[J].聲學(xué)與電子工程,2014,(4):31-34.

[3] 劉東濤,肖峰. 基于VxWorks的人機(jī)界面圖形開發(fā)系統(tǒng)設(shè)計[J]. 指揮控制與仿真,2011,33(4):117-120.

射洪县| 晋中市| 蒙城县| 乳山市| 江阴市| 房山区| 济阳县| 皋兰县| 广丰县| 高台县| 盐山县| 祁门县| 济宁市| 大姚县| 卓尼县| 前郭尔| 陇西县| 本溪| 桦甸市| 鸡西市| 建昌县| 行唐县| 稷山县| 大荔县| 安岳县| 嘉禾县| 淮安市| 棋牌| 博爱县| 凤山市| 庄浪县| 介休市| 南城县| 白玉县| 枞阳县| 陆丰市| 铜梁县| 英吉沙县| 阜城县| 新平| 同德县|