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

?

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

2014-06-30 17:42王立偉胡大斌肖劍波
現(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ī)界面。簡要介紹了QNX操作系統(tǒng)的特點(diǎn)和映像文件配置的一般方法,基于PhAB開發(fā)了嵌入式操控訓(xùn)練系統(tǒng)的操控界面,根據(jù)系統(tǒng)的模塊劃分對主程序進(jìn)行了設(shè)計(jì),系統(tǒng)程序運(yùn)行穩(wěn)定,滿足訓(xùn)練要求,對其他嵌入式訓(xùn)練系統(tǒng)軟件設(shè)計(jì)具有一定的借鑒意義。

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

中圖分類號: TN964?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 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)動速度、姿態(tài)和深度,其可靠性和實(shí)時(shí)性決定了水下航行的安全。嵌入式操控訓(xùn)練系統(tǒng)在原有操控系統(tǒng)的基礎(chǔ)上加裝了訓(xùn)練模塊,集操縱控制和訓(xùn)練功能于一身,提高了訓(xùn)練效率,降低了訓(xùn)練成本,但也對系統(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)和自動化等領(lǐng)域[1]。獨(dú)特的中斷處理方式,快速的上下文切換和基于優(yōu)先級驅(qū)動的搶占調(diào)度方式,保證了其強(qiáng)大的實(shí)時(shí)性能。QNX的內(nèi)核僅執(zhí)行四種最基本的功能,使得系統(tǒng)具有良好的可靠性,而高度的可裁剪性也讓其在嵌入式開發(fā)方面具有得天獨(dú)厚的優(yōu)勢。此外,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ì)提供了平臺。根據(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ǎo)腳本)、startup script(啟動腳本)、file list(文件列表)三部分組成[2]。啟動引導(dǎo)腳本用于指明CPU的啟動方式,配置與CPU相適應(yīng)的微內(nèi)核。對于x86及其兼容的嵌入式計(jì)算機(jī),通常格式如下:

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

startup?bios

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

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

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

[+script] .script={

command line

}

文件列表是指系統(tǒng)程序和用戶程序執(zhí)行所必須的文件列表和一些共享庫,通過[type=link]重新定位它們的位置。由于本文所設(shè)計(jì)的嵌入式操控訓(xùn)練系統(tǒng)以C語言為開發(fā)語言,所有的驅(qū)動至少需要一個(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)對水下航行器的操縱和訓(xùn)練等功能,還應(yīng)能處理系統(tǒng)內(nèi)部和外部的各種輸入輸出信號讀寫、計(jì)算和通信。根據(jù)系統(tǒng)的功能,將其分為以下模塊:

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

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

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

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

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

(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ā)模式,可以自動生成主要的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)對深度、航向和水下航行器運(yùn)行狀態(tài)等動態(tài)數(shù)據(jù)的實(shí)時(shí)顯示,下面以界面中顯示航向的動態(tài)碼盤繪制為例介紹程序設(shè)計(jì)的一般方法。

動態(tài)碼盤的繪制采用的是具有自動重繪功能的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ù)自動重繪。

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

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

繪制動態(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è)平面生成并在事件空間中移動。比如,繪畫事件從Application平面向Graphics平面移動;輸入事件從Pointer/Keyboard平面向Root平面移動。為實(shí)現(xiàn)PtRaw控件畫布銷毀的第二個(gè)條件,可以在Photon事件空間中創(chuàng)建一個(gè)平面并使其發(fā)生一個(gè)矩形的Ph_EV_EXPOSE事件,在它向Root平面穿梭的過程中移走了Application平面上的區(qū)域,使得PtRaw控件自動調(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ǔ)對系統(tǒng)主程序進(jìn)行了設(shè)計(jì),減小了編程工作量。根據(jù)嵌入式訓(xùn)練系統(tǒng)的功能要求,進(jìn)行的程序設(shè)計(jì)如下:

(1) 六自由度運(yùn)動模型程序設(shè)計(jì)。由于運(yùn)動模型的精度直接關(guān)系到嵌入式訓(xùn)練系統(tǒng)的訓(xùn)練效果,本文采用了國際通用的六自由度空間運(yùn)動方程[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

猜你喜歡
圖形界面建模
Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
聯(lián)想等效,拓展建模——以“帶電小球在等效場中做圓周運(yùn)動”為例
縝密審題,準(zhǔn)確建模,學(xué)以致用
基于PSS/E的風(fēng)電場建模與動態(tài)分析
不對稱半橋變換器的建模與仿真
用VMRun快速置備千臺虛擬機(jī)
重看圖形界面“扁平化”與“擬物化”之爭——關(guān)于設(shè)計(jì)思維的探討
VxWorks系統(tǒng)下基于WindML的窗口化圖形界面設(shè)計(jì)
IDEF3和DSM在拆裝過程建模中的應(yīng)用
三元組輻射場的建模與仿真
盐源县| 绥化市| 兖州市| 东源县| 阿拉善右旗| 厦门市| 托克逊县| 汝州市| 土默特右旗| 金沙县| 故城县| 桦南县| 新乡县| 攀枝花市| 黔西| 民和| 三河市| 琼海市| 万源市| 临高县| 齐河县| 金华市| 营口市| 北宁市| 乐东| 苍山县| 嫩江县| 清徐县| 汨罗市| 奉贤区| 凤庆县| 绥滨县| 哈巴河县| 天津市| 剑阁县| 饶河县| 凌云县| 内江市| 临高县| 石屏县| 四川省|