亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于QNX的嵌入式操控訓(xùn)練系統(tǒng)軟件設(shè)計(jì)

        2014-06-30 17:42:06王立偉胡大斌肖劍波
        現(xiàn)代電子技術(shù) 2014年12期
        關(guān)鍵詞:圖形界面建模

        王立偉 胡大斌 肖劍波

        摘 要: QNX操作系統(tǒng)具有可靠性高、實(shí)時(shí)性強(qiáng)的特點(diǎn)和強(qiáng)大的圖形界面功能,基于其開發(fā)的水下航行器嵌入式操控訓(xùn)練系統(tǒng),解決了系統(tǒng)的實(shí)時(shí)性需求,還能方便地開發(fā)出友好的人機(jī)界面。簡(jiǎn)要介紹了QNX操作系統(tǒng)的特點(diǎn)和映像文件配置的一般方法,基于PhAB開發(fā)了嵌入式操控訓(xùn)練系統(tǒng)的操控界面,根據(jù)系統(tǒng)的模塊劃分對(duì)主程序進(jìn)行了設(shè)計(jì),系統(tǒng)程序運(yùn)行穩(wěn)定,滿足訓(xùn)練要求,對(duì)其他嵌入式訓(xùn)練系統(tǒng)軟件設(shè)計(jì)具有一定的借鑒意義。

        關(guān)鍵詞: QNX; 圖形界面; 建模; 嵌入式訓(xùn)練系統(tǒng)

        中圖分類號(hào): TN964?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)12?0015?04

        Abstract: QNX, an operating system with strong development function of graphic interface, has the characteristics of high real?time performance and reliability. The embedded control training system for underwater vehicle developed on the basis of QNX can meet real?time requirement of the system and can develop friendly man?machine interface conveniently. The characteristics of QNX and the general ways to configure mapping files are briefly introduced. The control interface of the embedded control training system based on PhAB was developed. The main program was designed according to the sort of modules. The embedded control training system can fulfill the requirements of training, and runs steadily, which can be used as a reference to the software design of other embedded training systems.

        Keywords: QNX; GUI; modeling; embedded training system

        0 引 言

        操縱控制系統(tǒng)是水下航行器的指揮中樞,用于控制操縱設(shè)備來改變或保持運(yùn)動(dòng)速度、姿態(tài)和深度,其可靠性和實(shí)時(shí)性決定了水下航行的安全。嵌入式操控訓(xùn)練系統(tǒng)在原有操控系統(tǒng)的基礎(chǔ)上加裝了訓(xùn)練模塊,集操縱控制和訓(xùn)練功能于一身,提高了訓(xùn)練效率,降低了訓(xùn)練成本,但也對(duì)系統(tǒng)性能提出了更高的要求。QNX操作系統(tǒng)作為一款主流的嵌入式實(shí)時(shí)操作系統(tǒng),可靠性高,實(shí)時(shí)性強(qiáng),圖形界面開發(fā)功能強(qiáng)大,基于其開發(fā)的水下航行器嵌入式操控訓(xùn)練系統(tǒng)即能滿足實(shí)時(shí)性方面的要求,又具有友好的人機(jī)交互界面。

        1 QNX概述

        QNX是由加拿大QSSL公司開發(fā)的一款嵌入式實(shí)時(shí)操作系統(tǒng),具有實(shí)時(shí)性強(qiáng)、多任務(wù)、分布式、可擴(kuò)展的特點(diǎn)和強(qiáng)大的圖形界面開發(fā)功能,廣泛應(yīng)用于軍事、航空航天、醫(yī)療設(shè)備、車載系統(tǒng)、高端網(wǎng)絡(luò)系統(tǒng)和自動(dòng)化等領(lǐng)域[1]。獨(dú)特的中斷處理方式,快速的上下文切換和基于優(yōu)先級(jí)驅(qū)動(dòng)的搶占調(diào)度方式,保證了其強(qiáng)大的實(shí)時(shí)性能。QNX的內(nèi)核僅執(zhí)行四種最基本的功能,使得系統(tǒng)具有良好的可靠性,而高度的可裁剪性也讓其在嵌入式開發(fā)方面具有得天獨(dú)厚的優(yōu)勢(shì)。此外,QNX還具有良好的可移植性和自保護(hù)機(jī)制,符合POSIX標(biāo)準(zhǔn),這些都使得其在嵌入式實(shí)時(shí)領(lǐng)域得到了越來越廣泛的應(yīng)用。

        2 系統(tǒng)軟件設(shè)計(jì)

        2.1 QNX系統(tǒng)映像文件的配置

        映像文件包括操作系統(tǒng),可執(zhí)行程序和任何與程序相關(guān)的數(shù)據(jù)文件,是嵌入式系統(tǒng)開發(fā)的基礎(chǔ),為系統(tǒng)軟件設(shè)計(jì)提供了平臺(tái)。根據(jù)系統(tǒng)的實(shí)際需求制作合適的操作系統(tǒng)映像文件,可以充分發(fā)揮嵌入式系統(tǒng)小巧的特點(diǎn),在節(jié)省內(nèi)存資源的同時(shí)也保證了系統(tǒng)的整體性能。具體說來就是根據(jù)自己所選擇的CPU類型和應(yīng)用程序所需要的操作系統(tǒng)模塊支持來定制系統(tǒng),在保證既定功能的基礎(chǔ)上裁剪掉與實(shí)現(xiàn)功能無關(guān)的文件,實(shí)現(xiàn)系統(tǒng)的最小化。

        在建立映像文件之前必須編輯生成一個(gè)QNX的buildfile文件,buildfile文件一般由bootstrap script(啟動(dòng)引導(dǎo)腳本)、startup script(啟動(dòng)腳本)、file list(文件列表)三部分組成[2]。啟動(dòng)引導(dǎo)腳本用于指明CPU的啟動(dòng)方式,配置與CPU相適應(yīng)的微內(nèi)核。對(duì)于x86及其兼容的嵌入式計(jì)算機(jī),通常格式如下:

        [virtual=x86,bios +compress] .bootstrap = {

        startup?bios

        PATH=/proc/boot:/bin LD_LIBRARY_PATH=/proc/boot:/lib:/dll procnto}

        其中x86為處理器類型,對(duì)于其他類型的CPU可根據(jù)參考手冊(cè)進(jìn)行相應(yīng)的替換;bios +compress指通過bios啟動(dòng),并壓縮鏡像文件; “PATH=/proc/boot” 確定了PATH環(huán)境變量;“procnto” 是微內(nèi)核和進(jìn)程管理器。

        啟動(dòng)腳本是在進(jìn)程管理啟動(dòng)后一系列將要被執(zhí)行命令的序列,用于在引導(dǎo)腳本執(zhí)行完后運(yùn)行驅(qū)動(dòng)程序和用戶程序,通常格式如下:

        [+script] .script={

        command line

        }

        文件列表是指系統(tǒng)程序和用戶程序執(zhí)行所必須的文件列表和一些共享庫,通過[type=link]重新定位它們的位置。由于本文所設(shè)計(jì)的嵌入式操控訓(xùn)練系統(tǒng)以C語言為開發(fā)語言,所有的驅(qū)動(dòng)至少需要一個(gè)標(biāo)準(zhǔn)C共享庫:

        [type=link] /usr /lib/ldqnx.so.2=/proc/boot/libc.so

        libc.so #標(biāo)準(zhǔn)C共享庫

        完成buildfile文件的編譯后,使用mkifs命令即可生成鏡像文件.ifs。例如:mkifs ControlSystem.build ControlSystem.ifs。通過objdump命令,可以檢查鏡像文件是否包含了全部所需文件。然后將鏡像文件嵌入到目標(biāo)機(jī)中,運(yùn)行后即可看到用戶定制的嵌入式操作系統(tǒng)。

        2.2 應(yīng)用程序設(shè)計(jì)

        2.2.1 模塊化設(shè)計(jì)

        嵌入式操控訓(xùn)練系統(tǒng)不僅要實(shí)現(xiàn)對(duì)水下航行器的操縱和訓(xùn)練等功能,還應(yīng)能處理系統(tǒng)內(nèi)部和外部的各種輸入輸出信號(hào)讀寫、計(jì)算和通信。根據(jù)系統(tǒng)的功能,將其分為以下模塊:

        (1) 系統(tǒng)控制模塊:管理系統(tǒng)運(yùn)行狀態(tài)、數(shù)據(jù)通信等。

        (2) 界面程序模塊:顯示深度、航向和縱傾的設(shè)定值;顯示深度、航向、縱傾、橫傾的當(dāng)前值;顯示方向舵、舯水平舵和艉升降舵當(dāng)前的舵角值。

        (3) 運(yùn)動(dòng)模型模塊:模擬水下航行器的運(yùn)動(dòng)狀態(tài),根據(jù)六自由度方程解算出當(dāng)前的狀態(tài)參數(shù)值。

        (4) 舵機(jī)模型模塊:模擬舵機(jī),輸出舵角值。

        (5) 航向、深度、縱傾控制模塊:自動(dòng)和遙控工況下航向、深度、縱傾的保持和改變。

        (6) 工作模式轉(zhuǎn)換模塊:完成訓(xùn)練模式和操控模式的快速安全切換。

        除上述模塊外,還包括數(shù)據(jù)采集卡控制模塊、接口控制模塊和通信模塊。通過采用模塊化設(shè)計(jì)方法,降低了軟件結(jié)構(gòu)的復(fù)雜性,方便了軟件設(shè)計(jì),降低了開發(fā)難度。軟件系統(tǒng)的模塊結(jié)構(gòu)如圖1所示。

        2.2.2 界面設(shè)計(jì)

        QNX為用戶提供了三種開發(fā)圖形的方法,即GF(Graphics Framework),Adobe Flash,Photon microGUI[3]。利用GF進(jìn)行圖形界面開發(fā)具有小巧、高速的優(yōu)點(diǎn),能有效和最大限度地利用顯示硬件,但缺少像Photon中的可直接使用的控件,而且也沒有特別的編程工具,開發(fā)難度較大。利用Adobe Flash開發(fā)的圖形界面不依賴于操作系統(tǒng),僅需支持Flash就可以使用。用戶通過FLASHDEVELOP軟件編寫的圖形界面更加絢麗,但其在嵌入式設(shè)備上的性能還有待提高。

        Photon microGUI采用了與QNX微內(nèi)核相同的結(jié)構(gòu),圖形窗口的構(gòu)建是通過微內(nèi)核和一組共操作的進(jìn)程來實(shí)現(xiàn)的,使得窗口系統(tǒng)占用的空間少而可靠性高。Photon自帶的PhAB開發(fā)工具采用所見即所得的開發(fā)模式,可以自動(dòng)生成主要的C和C++代碼來完成工程的用戶界面,大大提高編程效率。本文采用PhAB開發(fā)工具進(jìn)行界面設(shè)計(jì)。

        PhAB提供了76個(gè)控件類,用戶可以直接將需要的控件拖到繪圖窗口,設(shè)定大小,在Resources窗口中設(shè)置各類屬性,在Callbacks中選擇回調(diào)函數(shù)的類型和設(shè)置函數(shù)名稱,之后選擇Build下的Genrate UI命令即可生成目標(biāo)代碼。

        目標(biāo)代碼生成后,用戶可以利用QNX Momentics IDE軟件編寫相應(yīng)的初始化函數(shù)、回調(diào)函數(shù)和其他函數(shù)。本文所設(shè)計(jì)的界面需要實(shí)現(xiàn)對(duì)深度、航向和水下航行器運(yùn)行狀態(tài)等動(dòng)態(tài)數(shù)據(jù)的實(shí)時(shí)顯示,下面以界面中顯示航向的動(dòng)態(tài)碼盤繪制為例介紹程序設(shè)計(jì)的一般方法。

        動(dòng)態(tài)碼盤的繪制采用的是具有自動(dòng)重繪功能的PtRaw控件,回調(diào)函數(shù)包括:

        (1) 繪圖函數(shù):void course_draw( PtWidget_t *widget, PhTile_t *damage )。負(fù)責(zé)繪制柱形碼盤。

        (2) 定時(shí)器函數(shù):int timer_refresh( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )。負(fù)責(zé)定時(shí)調(diào)用清除函數(shù)或發(fā)送事件,從而引發(fā)繪圖函數(shù)根據(jù)新數(shù)據(jù)自動(dòng)重繪。

        繪圖函數(shù)通過設(shè)置PtRaw控件的Pt_ARG_RAW_

        DRAW_F資源進(jìn)行定義。函數(shù)定義中的*widget是指向PtRaw控件的指針,指針為ABW_加上控件的變量名,*damage是指向碎片的指針,用于程序識(shí)別PtRaw控件畫布中被銷毀的部分。

        繪制動(dòng)態(tài)碼盤就是要不斷的調(diào)用繪圖函數(shù)進(jìn)行重繪,然而繪圖函數(shù)不能被直接調(diào)用,只能通過銷毀PtRaw控件畫布的方式來達(dá)到重繪的目的。滿足以下兩個(gè)條件之一即可以銷毀畫布:

        (1) PtRaw控件實(shí)現(xiàn)時(shí);

        (2) 覆蓋在畫布上的區(qū)域被移走或銷毀。

        前者可以用PtClearWidget()和PtReRealizeWidget()函數(shù)來實(shí)現(xiàn)。PtClearWidget()函數(shù)用來銷毀一個(gè)容器控件中的子控件,通過在定時(shí)器函數(shù)中調(diào)用該函數(shù)可以將PtRaw容器控件中使用的PtLine子控件繪制的碼盤擦除,再利用PtReRealizeWidget()函數(shù)使PtRaw控件實(shí)現(xiàn),從而調(diào)用繪圖函數(shù),重繪頻率取決于定時(shí)器的Timer Repeat值。

        Photon事件空間由若干個(gè)平面組成[4],如圖2所示,事件在某個(gè)平面生成并在事件空間中移動(dòng)。比如,繪畫事件從Application平面向Graphics平面移動(dòng);輸入事件從Pointer/Keyboard平面向Root平面移動(dòng)。為實(shí)現(xiàn)PtRaw控件畫布銷毀的第二個(gè)條件,可以在Photon事件空間中創(chuàng)建一個(gè)平面并使其發(fā)生一個(gè)矩形的Ph_EV_EXPOSE事件,在它向Root平面穿梭的過程中移走了Application平面上的區(qū)域,使得PtRaw控件自動(dòng)調(diào)用繪圖函數(shù)實(shí)現(xiàn)重繪。

        按照上述方法繪制航向、方向舵、舯水平舵、艉升降舵碼盤和水下航行器狀態(tài)顯示畫面,編寫回調(diào)函數(shù),系統(tǒng)初始化函數(shù),即可完成系統(tǒng)的界面設(shè)計(jì)。

        2.2.3 主程序設(shè)計(jì)

        為避免代碼的重復(fù)編譯,提高程序執(zhí)行效率,本文以界面程序中已設(shè)定的回調(diào)函數(shù)為基礎(chǔ)對(duì)系統(tǒng)主程序進(jìn)行了設(shè)計(jì),減小了編程工作量。根據(jù)嵌入式訓(xùn)練系統(tǒng)的功能要求,進(jìn)行的程序設(shè)計(jì)如下:

        (1) 六自由度運(yùn)動(dòng)模型程序設(shè)計(jì)。由于運(yùn)動(dòng)模型的精度直接關(guān)系到嵌入式訓(xùn)練系統(tǒng)的訓(xùn)練效果,本文采用了國(guó)際通用的六自由度空間運(yùn)動(dòng)方程[5],包括軸向力方程、側(cè)向力方程、垂向力方程、橫搖力矩方程、縱傾力矩方程、偏航力矩方程和輔助方程,利用數(shù)學(xué)方法將方程化為[u=f1]的形式,通過積分解算程序解算出狀態(tài)向量[u,v,w,p,q,r,φ,θ,ψ,ξ,η,ζ],這些積分值再與方向舵、舯水平舵、艉升降舵的舵角一起作為六自由度模型新的初始條件參與下一時(shí)刻狀態(tài)向量的求解。

        (2) 舵機(jī)模型程序設(shè)計(jì)。目前,通常采用的舵機(jī)數(shù)學(xué)模型[6]為:

        [TEδ=KE(δe-δ)]

        式中:[δ]為實(shí)際舵角;[δe]為指令舵角;[TE]為舵機(jī)時(shí)間常數(shù);[KE]為舵機(jī)的控制增益??紤]到舵機(jī)的實(shí)際情況,在模型中加入舵角及轉(zhuǎn)舵速度限制,模型程序如下:

        double rudder_model(double angle,double angle_given,double angle_limit)

        { double diff,deter;

        int i;

        for (i=0;i<100;i++)

        {

        diff= angle_given ?angle;

        deter=0.4*diff; //舵機(jī)模型,TE取2.5,KE取1

        if(deter>3.14/90) deter=3.14/90;

        //轉(zhuǎn)舵速度限制..3(°)/s

        if (deter

        猜你喜歡
        圖形界面建模
        基于OpenCV圖像處理軟件的設(shè)計(jì)
        Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
        聯(lián)想等效,拓展建?!浴皫щ娦∏蛟诘刃?chǎng)中做圓周運(yùn)動(dòng)”為例
        縝密審題,準(zhǔn)確建模,學(xué)以致用
        基于PSS/E的風(fēng)電場(chǎng)建模與動(dòng)態(tài)分析
        電子制作(2018年17期)2018-09-28 01:56:44
        不對(duì)稱半橋變換器的建模與仿真
        用VMRun快速置備千臺(tái)虛擬機(jī)
        重看圖形界面“扁平化”與“擬物化”之爭(zhēng)——關(guān)于設(shè)計(jì)思維的探討
        IDEF3和DSM在拆裝過程建模中的應(yīng)用
        三元組輻射場(chǎng)的建模與仿真
        色偷偷色噜噜狠狠网站30根| 日本一区二区三区在线播放| 日韩视频午夜在线观看| 人妻少妇偷人精品免费看| 亚洲熟女乱色综合亚洲av| 人妻丰满多毛熟妇免费区| 男女羞羞的视频免费网站| 人妻免费一区二区三区免费| 亚洲精品午夜无码专区| 亚洲国产精品线路久久| 国产一区二区三区蜜桃av| 亚洲久悠悠色悠在线播放| 护士人妻hd中文字幕| 国产中文aⅴ在线| 美腿丝袜一区在线观看| 漂亮人妻洗澡被公强 日日躁| 日本老熟妇毛茸茸| 亚洲VA欧美VA国产VA综合| 日产一区二区三区的精品| 国产成a人亚洲精品无码樱花| 国产成人一区二区三区在线观看| 久久青草亚洲AV无码麻豆| 久久久精品人妻一区亚美研究所| 欧美在线观看www| 国产一区二区精品人妖系列在线| 国产农村熟妇videos| 欧美三级不卡视频| 亚洲中文无码精品久久不卡| 日本一区二区三级免费| 久久久中文久久久无码| 國产一二三内射在线看片| 新久久久高清黄色国产| 中文字幕亚洲熟女av| 白又丰满大屁股bbbbb| 不卡无毒免费毛片视频观看| 三级国产高清在线观看| 奇米影视第四色首页| 999国产精品视频| 亚洲蜜臀av一区二区三区漫画| 999国产精品999久久久久久| 天堂网www在线资源|