• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      飛行仿真中基于嵌入式Qt的CDU仿真模塊設(shè)計(jì)

      2014-09-22 05:35:32顧宏斌
      關(guān)鍵詞:按鍵上位頁(yè)面

      周 旋,顧宏斌

      (南京航空航天大學(xué)民航學(xué)院,江蘇 南京 211100)

      控制顯示組件(Control and Display Unit)是飛行管理系統(tǒng)中人機(jī)交互的重要部件,是飛行員在飛行訓(xùn)練中使用最多的模塊。飛行員使用CDU完成建立飛行計(jì)劃、修改航路、輸入FMC數(shù)據(jù)、檢索顯示頁(yè)面等飛行管理功能。因此,對(duì)CDU的仿真是整個(gè)飛行模擬系統(tǒng)不可或缺的部分[1]。

      目前為止,在科研領(lǐng)域,對(duì)CDU的仿真主要停留在仿真CDU的按鍵輸入和頁(yè)面顯示功能,而CDU顯示的難點(diǎn),其頁(yè)面的生成,則使用第三方軟件生成[2],或只仿真少部分頁(yè)面[3],無(wú)法滿足實(shí)驗(yàn)和仿真的需要。本文在基于嵌入式Linux的ARM平臺(tái)下,選擇Qt作為GUI開(kāi)發(fā)工具。參考737NG系列的CDU,歸納了頁(yè)面特性,用面向?qū)ο蟮乃枷敕庋b各級(jí)頁(yè)面,將各級(jí)頁(yè)面的信息和邏輯關(guān)系以資源文件的形式的存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中,根據(jù)可修改的數(shù)據(jù)庫(kù)信息生成CDU頁(yè)面,實(shí)現(xiàn)頁(yè)面顯示功能和按鍵事件響應(yīng),簡(jiǎn)化了CDU頁(yè)面的開(kāi)發(fā)復(fù)雜度。并使用標(biāo)準(zhǔn)鍵盤,將標(biāo)準(zhǔn)按鍵映射為CDU按鍵[4],為開(kāi)發(fā)1:1 CDU仿真按鍵做好準(zhǔn)備。經(jīng)測(cè)試,該方案可以方便地生成CDU頁(yè)面,處理按鍵事件,并與上位機(jī)通信。在設(shè)計(jì)新型號(hào)CDU時(shí)只需修改數(shù)據(jù)庫(kù)和新建頁(yè)面變量即可生成新的頁(yè)面,滿足對(duì)不同種CDU快速開(kāi)發(fā)的需要。

      1 飛行仿真中CDU模塊的功能

      CDU是飛行管理計(jì)算機(jī)系統(tǒng)(Flight Management Computer System)的人機(jī)接口,通過(guò)CDU的鍵盤向FMCS輸入飛行計(jì)劃、性能數(shù)據(jù)、修改航路、檢索各種頁(yè)面信息(如導(dǎo)航數(shù)據(jù)、性能數(shù)據(jù)、咨詢信息、故障情況、自檢信息等)[1]。

      在737NG系列飛機(jī)中,CDU負(fù)責(zé)頁(yè)面顯示與發(fā)送按鍵事件。其頁(yè)面的切換與數(shù)據(jù)的處理都是由FMC處理。但是在飛行仿真中,為了使各部分功能模塊化,方便分工合作,充分利用處理性能,將頁(yè)面標(biāo)題生成和顯示,以及對(duì)按鍵事件的處理功能交給CDU仿真模塊,而上位機(jī)只負(fù)責(zé)復(fù)雜的飛行計(jì)劃的仿真。上位機(jī)與CDU仿真模塊通過(guò)UDP/IP協(xié)議通信,CDU仿真模塊將需處理的飛行數(shù)據(jù)發(fā)送給上位機(jī),經(jīng)上位機(jī)處理后發(fā)回,并在CDU仿真模塊中顯示。如圖1所示。

      圖1 CDU仿真模塊的構(gòu)架

      2 CDU仿真模塊設(shè)計(jì)方案

      在飛行管理計(jì)算系統(tǒng)的仿真中,CDU仿真模塊負(fù)責(zé)的是頁(yè)面顯示輸出功能。其顯示功能,就是根據(jù)鍵盤的輸入,改變頁(yè)面信息或者切換頁(yè)面,并將頁(yè)面上的信息傳輸給上位機(jī)的飛行計(jì)劃處理單元。因此,事實(shí)上CDU仿真模塊主要處理的任務(wù)就是根據(jù)外部響應(yīng)切換頁(yè)面。實(shí)際的問(wèn)題就轉(zhuǎn)化為,搭建一個(gè)實(shí)現(xiàn)顯示、按鍵輸入、并與上位機(jī)通信的嵌入式系統(tǒng)。

      本文使用嵌入式Linux操作系統(tǒng)+QtGui來(lái)搭建CDU仿真模塊,Linux內(nèi)核具有可裁剪的特性,可以裁剪不用的部分加快啟動(dòng)時(shí)間[5]。Qt是主流的GUI解決方案,有面向?qū)ο笮詮?qiáng),跨平臺(tái)的特點(diǎn)[6]。由于CDU的頁(yè)面數(shù)量很大,使用SQLite數(shù)據(jù)庫(kù)存儲(chǔ)頁(yè)面初始化信息。SQLite是主要面向嵌入式設(shè)備,擁有ODBC接口的輕量級(jí)數(shù)據(jù)庫(kù)。在Qt中使用QtSQL可以方便地使用SQLite數(shù)據(jù)庫(kù)功能[7]。

      此外由于CDU按鍵功能的特殊性,可以將CDU功能按鈕的使能信息放在數(shù)據(jù)庫(kù)中。事實(shí)上,除了少部分特殊頁(yè)面的特殊功能以外,大部分頁(yè)面的初始化信息全部存儲(chǔ)在數(shù)據(jù)庫(kù)中,只需要更改數(shù)據(jù)庫(kù)信息,就可以改變頁(yè)面的文字信息。

      3 CDU仿真模塊的設(shè)計(jì)

      CDU仿真模塊主要功能有頁(yè)面生成、顯示,按鍵事件響應(yīng)和網(wǎng)絡(luò)通信的功能。在系統(tǒng)啟動(dòng)后,首先讀取數(shù)據(jù)庫(kù),初始化頁(yè)面,然后接收上位機(jī)飛行計(jì)劃相關(guān)信息并顯示,根據(jù)按鍵事件做出插入、復(fù)制數(shù)據(jù)等操作,在完成某些操作后將信息傳輸給上位機(jī)。CDU仿真模塊流程如圖2所示。

      圖2 CDU仿真模塊流程

      圖3 頁(yè)面系統(tǒng)

      3.1 頁(yè)面系統(tǒng)

      搭建CDU仿真模塊的關(guān)鍵在于:如何方便地生成大量的CDU頁(yè)面;如何處理復(fù)雜的頁(yè)面邏輯關(guān)系?使用面向?qū)ο蟮姆椒?,總結(jié)歸納CDU頁(yè)面的特性,歸納的程度越高,就越能簡(jiǎn)化每個(gè)獨(dú)立頁(yè)面所需的代碼。

      (1)頁(yè)面的生成

      真實(shí)CDU的任何頁(yè)面系統(tǒng)都包含三個(gè)部分:頁(yè)面的標(biāo)題信息,頁(yè)面數(shù)據(jù),頁(yè)面切換標(biāo)識(shí)。其中,標(biāo)題信息為小字顯示,頁(yè)面數(shù)據(jù)和頁(yè)面邏輯為大字顯示,如圖3所示。

      飛行仿真中,CDU仿真模塊初始化頁(yè)面標(biāo)題信息和頁(yè)面邏輯,頁(yè)面數(shù)據(jù)由上位機(jī)處理生成并使用UDP傳輸給CDU仿真模塊。在初始化過(guò)程中,把頁(yè)面數(shù)據(jù)初始化為空字符,把它視作頁(yè)面切換標(biāo)識(shí)的子集。實(shí)際所有的頁(yè)面數(shù)據(jù)都由CDU仿真模塊初始化,在生成頁(yè)面時(shí)可以忽略其區(qū)別,在之后在處理頁(yè)面數(shù)據(jù)。

      根據(jù)真實(shí)CDU顯示特性,頁(yè)面文字分為2類:小字體字符,包含頁(yè)面標(biāo)題信息[1];大字體字符,包括頁(yè)面數(shù)據(jù)、頁(yè)面標(biāo)題和頁(yè)面邏輯。

      總結(jié)所有CDU頁(yè)面的特點(diǎn),可以發(fā)現(xiàn)小字體字符的位置不會(huì)變化,大字體字符有2種變化:左右分布或者左中右分布[1]。左右分布其實(shí)是左中右分布的特殊形式,即中間沒(méi)有文字。把每組字符串視為單獨(dú)的對(duì)象,創(chuàng)建繼承QLabel類的QWord類,大字符為 QWordBig,小字體字符為 QWordS-mall。創(chuàng)建繼承QWidget的QCDU類,作為CDU頁(yè)面功能的基類,包含22個(gè)QWordBig類和12個(gè)QWordSmall類。參考真實(shí)CDU的顯示特性,使用Qt的Layout排版,設(shè)置QwordBig分別左右對(duì)齊,中間對(duì)齊,并根據(jù)字符的長(zhǎng)度自動(dòng)調(diào)節(jié)QWordBig的長(zhǎng)度,在填入初始化字符串后,該方案可以模擬所有的CDU頁(yè)面。大字體字符串抽象圖如圖4所示。

      圖4 大字體字符串抽象圖

      (2)頁(yè)面的切換

      頁(yè)面的存儲(chǔ)使用Qt的堆棧功能,頁(yè)面的切換則是使用了SQLite的查詢功能。

      雖然CDU的頁(yè)面數(shù)量較大,但主要存儲(chǔ)的是文字信息,實(shí)際占用的空間并不大。在CDU模塊初始過(guò)程中,實(shí)際是初始化所有的QCDU對(duì)象。將所有的QCDU對(duì)象存儲(chǔ)在QStackWidget堆棧中,每個(gè)對(duì)象獲取唯一的堆棧號(hào),并存儲(chǔ)到數(shù)據(jù)庫(kù)中,通過(guò)選擇堆棧號(hào),切換相應(yīng)頁(yè)面到前臺(tái)。

      真實(shí)CDU中,有3種方式切換頁(yè)面:按下具有標(biāo)準(zhǔn)選擇功能并對(duì)應(yīng)行含有“<”或“>”字符的按鍵;按下功能按鍵;上下翻頁(yè)鍵[1]。頁(yè)面切換功能的實(shí)質(zhì)是將行選鍵對(duì)應(yīng)的字符與頁(yè)面一一對(duì)應(yīng)起來(lái)。為此,在后頁(yè)的QCDU類中增加一組標(biāo)識(shí)字符串,其表示標(biāo)識(shí)為唯一,使之與前頁(yè)字符串一一對(duì)應(yīng)。當(dāng)按下按鍵是,程序根據(jù)行選鍵對(duì)應(yīng)的內(nèi)容,搜索數(shù)據(jù)庫(kù),找到對(duì)應(yīng)的堆棧號(hào),使用QStack-Widget功能切換到指定頁(yè)面。

      如:真實(shí)CDU中,在位置起始頁(yè)(POS INIT)中“ROUTE>”對(duì)應(yīng)航路頁(yè)(RTE)。因此,設(shè)置航路頁(yè)的QCDU類的標(biāo)識(shí)符為“ROUTE”。CDU仿真模塊中,按下“ROUTE>”對(duì)應(yīng)的行選鍵后,系統(tǒng)自動(dòng)除去“>”符號(hào),并在數(shù)據(jù)庫(kù)中搜索“ROUTE”頁(yè)面,搜索到RTE序號(hào)為5,使用QStackWidget類,切換顯示到堆棧號(hào)為5的QCDU頁(yè)面,即RTE,同時(shí)把便簽欄數(shù)據(jù)復(fù)制到RTE中。

      3.2 按鍵事件的處理

      真實(shí)CDU一共有包括行選鍵、功能鍵、數(shù)字字母鍵在內(nèi)的78個(gè)按鍵,仿真與實(shí)物的移植,提高仿真效果,訂制與對(duì)應(yīng)機(jī)型CDU在鍵盤大小,按鍵布局與按鍵功能一致的鍵盤。在程序中將鍵盤的輸入映射為CDU按鍵,重新定義標(biāo)準(zhǔn)鍵盤的按鍵事件,如將F1~F6定義為左功能鍵。

      功能鍵主要有12個(gè)快捷鍵,2個(gè)翻頁(yè)鍵,1個(gè)執(zhí)行鍵組成[1]。按下快捷鍵時(shí)調(diào)用QStackWidget,直接跳轉(zhuǎn)到對(duì)應(yīng)的頁(yè)面。翻頁(yè)鍵功能與之類似,配置QCDU加入堆棧時(shí)按頁(yè)面排列,按下下一頁(yè)按鍵時(shí)候當(dāng)前頁(yè)面序號(hào)+1,即轉(zhuǎn)到下一頁(yè)。按下執(zhí)行鍵時(shí)檢測(cè)上位機(jī)發(fā)送的使能變量,判斷是否能夠執(zhí)行。

      行選鍵是邏輯相對(duì)復(fù)雜的一種,每個(gè)功能鍵總計(jì)有5個(gè)功能,包括3個(gè)標(biāo)準(zhǔn)功能,2個(gè)非標(biāo)準(zhǔn)功能,其中非標(biāo)準(zhǔn)功能不常用[1]。將QCDU類作為基類,實(shí)現(xiàn)3個(gè)標(biāo)準(zhǔn)功能的處理函數(shù),使用虛函數(shù)描述2個(gè)非標(biāo)準(zhǔn)功能,在子類中重寫非標(biāo)準(zhǔn)功能處理函數(shù)。3個(gè)標(biāo)準(zhǔn)功能包括標(biāo)準(zhǔn)選擇功能,標(biāo)準(zhǔn)輸入功能,刪除功能。標(biāo)準(zhǔn)輸入功能和刪除功能實(shí)際是QCDU類中22個(gè)QWord數(shù)據(jù)的交換。對(duì)于標(biāo)準(zhǔn)選擇功能,需要對(duì)QWord中的字符串進(jìn)行判斷,在包含“>”或“<”進(jìn)行頁(yè)面切換,不含則與另兩個(gè)標(biāo)準(zhǔn)功能類似,只進(jìn)行頁(yè)面內(nèi)數(shù)據(jù)的交換。

      雖然每個(gè)行選鍵在程序初始化時(shí)都有5個(gè)功能,但真實(shí)CDU系統(tǒng)中每個(gè)行選鍵都只擁有固定的幾項(xiàng)功能,如起始位置檢索頁(yè),該頁(yè)中行選鍵都具有標(biāo)準(zhǔn)輸入功能,而沒(méi)有標(biāo)準(zhǔn)選擇功能[1]。CDU仿真模塊根據(jù)數(shù)據(jù)庫(kù)中存儲(chǔ)的信息使能行選鍵的功能,只需要修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)設(shè)置就能設(shè)置行選鍵的功能。

      3.3 數(shù)據(jù)庫(kù)的使用

      如果將頁(yè)面數(shù)據(jù)及頁(yè)面邏輯信息都存儲(chǔ)在程序中,不僅會(huì)使程序結(jié)構(gòu)復(fù)雜,且擴(kuò)大了程序的體積。并且由于CDU頁(yè)面較多,當(dāng)需要建立新頁(yè)面時(shí),要將頁(yè)面標(biāo)題數(shù)據(jù)全部輸入,對(duì)于不熟悉程序源代碼的人來(lái)說(shuō)維護(hù)較為麻煩。因此,參照程序本體/資源文件模型,將頁(yè)面中的標(biāo)題數(shù)據(jù)和邏輯信息存儲(chǔ)在資源文件中,在程序本體啟動(dòng)時(shí)讀取資源文件,根據(jù)資源文件初始化。

      資源文件是一種存儲(chǔ)在硬盤中的文件,其中可以包含文字、位圖、音頻等信息。資源文件不需要經(jīng)過(guò)編譯,程序在初始化時(shí)通過(guò)特定的方式讀取資源文件,并存儲(chǔ)在內(nèi)存中。使用資源文件可以減少主程序體積,在替換資源時(shí)不用重新編譯程序,且不影響程序運(yùn)行速度。為了方便資源文件的維護(hù)和擴(kuò)展,使用SQLite數(shù)據(jù)庫(kù)文件格式存儲(chǔ)資源文件。

      資源文件中存儲(chǔ)的數(shù)據(jù)包括4個(gè)部分:

      (1)頁(yè)面標(biāo)識(shí)名稱(title)。對(duì)于每一個(gè)頁(yè)面,使用一個(gè)唯一的字符型常量與其對(duì)應(yīng),稱為頁(yè)面標(biāo)識(shí)。程序中使用該名稱區(qū)分每個(gè)頁(yè)面,確保頁(yè)面變量能從資源文件中正確讀取對(duì)應(yīng)的信息。

      (2)換頁(yè)信息(pagename),該條目與頁(yè)面邏輯有關(guān)。存儲(chǔ)的文本用作檢索名稱,用于搜索

      (3)行選鍵使能信息。決定了行選鍵的功能,為了方便維護(hù),每個(gè)使能功能以可用位置的形式存儲(chǔ)。如在位置起始頁(yè)中,L2,L3,L5,L6,R4,R5 按鍵擁有標(biāo)準(zhǔn)輸入功能,R1,R2,R3,R6擁有標(biāo)準(zhǔn)選擇功能。在數(shù)據(jù)庫(kù)存儲(chǔ)方式為:fselect值為7,8,9,12。fenter值為 2,3,4,5,10,11。

      (4)頁(yè)面顯示信息。即CDU頁(yè)面顯示的信息,參照實(shí)際CDU系統(tǒng)輸入。

      3.4 網(wǎng)絡(luò)通信

      由于嵌入式系統(tǒng)的處理能力較弱,CDU仿真模塊主要處理的是頁(yè)面的生成和按鍵事件的處理,負(fù)責(zé)較復(fù)雜運(yùn)算的FMC的功能由上位機(jī)處理。由于傳輸距離很近,選擇使用UDP/IP通信協(xié)議進(jìn)行數(shù)據(jù)的傳輸。在CDU仿真模塊頁(yè)面初始化完成后,發(fā)送頁(yè)面名稱,請(qǐng)求上位機(jī)發(fā)送相應(yīng)頁(yè)面數(shù)據(jù),根據(jù)機(jī)發(fā)送的信息顯示頁(yè)面數(shù)據(jù)。每當(dāng)進(jìn)行切換頁(yè)面操作時(shí),CDU仿真模塊將頁(yè)面標(biāo)題、頁(yè)面數(shù)據(jù)按順序發(fā)送給上位機(jī)。

      4 實(shí)驗(yàn)與驗(yàn)證

      4.1 功能驗(yàn)證

      打開(kāi)CDU仿真模塊,運(yùn)行上位機(jī),并填入頁(yè)面數(shù)據(jù)。CDU進(jìn)入IDENT(識(shí)別檢索)頁(yè),頁(yè)面的數(shù)據(jù)能完整顯示。按下字母按鍵,便簽欄數(shù)據(jù)改變。按下行選鍵6R,頁(yè)面切換,進(jìn)入POS INIT(位置初始化)頁(yè),所有數(shù)據(jù)正常顯示。按下PageDown,進(jìn)入POS REF頁(yè)。按下行選鍵1L,數(shù)據(jù)被復(fù)制到便簽欄中,如圖5所示。

      圖5 實(shí)物展示

      4.2 增加新頁(yè)面測(cè)試

      在已有頁(yè)面基礎(chǔ)上增加NAV DATA(導(dǎo)航數(shù)據(jù)頁(yè)面)。由于NAV DATA沒(méi)有非標(biāo)準(zhǔn)按鍵功能,直接使用QCdu類建立對(duì)象,插入堆棧。

      QCdu*CduNavdata=new Cdu("NAV DATA");

      insertcdu(CduNavdata);

      數(shù)據(jù)庫(kù)中新建NAV DATA元素見(jiàn)表1。

      表1

      5 結(jié)論

      通過(guò)對(duì)真實(shí)CDU頁(yè)面邏輯的分析,基于嵌入式Qt開(kāi)發(fā)環(huán)境建立了可與上位機(jī)交互的CDU仿真模塊。使用面向?qū)ο蠓抡婕夹g(shù)和數(shù)據(jù)庫(kù)抽象出頁(yè)面顯示特性和頁(yè)面邏輯,簡(jiǎn)化了完整CDU模塊的設(shè)計(jì),為完全模擬CDU模塊打下基礎(chǔ)。使用標(biāo)準(zhǔn)鍵盤模擬按鍵輸入,方便調(diào)試,并具有擴(kuò)展性。實(shí)驗(yàn)結(jié)果表明,該方法能較好地模擬真實(shí)CDU的運(yùn)行,并能減少CDU頁(yè)面開(kāi)發(fā)的開(kāi)發(fā)量,適應(yīng)于各種飛行仿真環(huán)境。

      [1]欽慶生.飛行管理計(jì)算機(jī)系統(tǒng)[M].北京:國(guó)防工業(yè)出版社,1991.

      [2]向明,馬存寶.基于VAPS的FMS CDU實(shí)時(shí)仿真系統(tǒng)開(kāi)發(fā)[J].計(jì)算機(jī)仿真,2006,(8).

      [3]廖蜂,鄭書朋,侯偉欽,等.一種高逼真度的控制顯示組件仿真方法[J].計(jì)算機(jī)工程,2011,(4).

      [4]陳又軍.基于仿真硬件CDU的飛行管理系統(tǒng)訓(xùn)練器擴(kuò)展研究[J].航空維修與工程,2009,(4).

      [5]孫天澤.嵌入式Linux開(kāi)發(fā)技術(shù)[M].北京:航空航天大學(xué)出版社,2011.

      [6]蔡志明,盧傳富,李立夏.精通Qt4編程[M].北京:電子工業(yè)出版社,2008.

      [7]孫磊.基于ARM Linux的嵌入式數(shù)據(jù)庫(kù)SQLite的移植開(kāi)發(fā)[D].昆明:昆明理工大學(xué),2008.

      猜你喜歡
      按鍵上位頁(yè)面
      刷新生活的頁(yè)面
      基于有限狀態(tài)機(jī)的按鍵檢測(cè)程序設(shè)計(jì)
      電子制作(2021年3期)2021-06-16 03:14:26
      特斯拉 風(fēng)云之老阿姨上位
      車迷(2018年12期)2018-07-26 00:42:22
      “三扶”齊上位 決戰(zhàn)必打贏
      基于ZigBee和VC上位機(jī)的教室智能監(jiān)測(cè)管理系統(tǒng)
      一種多方向?qū)Ч獍存I結(jié)構(gòu)設(shè)計(jì)
      電子制作(2016年1期)2016-11-07 08:43:05
      以新思路促推現(xiàn)代農(nóng)業(yè)上位
      按鍵的多種狀態(tài)檢測(cè)及消抖處理方法
      家電科技(2013年4期)2013-07-09 10:55:08
      解析某型號(hào)手機(jī)按鍵檢測(cè)程序的缺陷
      同一Word文檔 縱橫頁(yè)面并存
      信阳市| 筠连县| 海宁市| 郧西县| 金平| 台北县| 沾益县| 峨山| 岳阳市| 杨浦区| 满洲里市| 台北县| 孝义市| 屏山县| 阿瓦提县| 唐河县| 乌恰县| 梁河县| 上虞市| 鲁甸县| 河池市| 南部县| 甘谷县| 德兴市| 昌邑市| 东阿县| 平利县| 泗水县| 黄平县| 丹巴县| 当涂县| 阳春市| 玉环县| 敦煌市| 潼关县| 军事| 松阳县| 新蔡县| 廊坊市| 区。| 成武县|