999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于QNX的嵌入式操控訓練系統軟件設計

2014-06-30 17:42:06王立偉胡大斌肖劍波
現代電子技術 2014年12期

王立偉 胡大斌 肖劍波

摘 要: QNX操作系統具有可靠性高、實時性強的特點和強大的圖形界面功能,基于其開發的水下航行器嵌入式操控訓練系統,解決了系統的實時性需求,還能方便地開發出友好的人機界面。簡要介紹了QNX操作系統的特點和映像文件配置的一般方法,基于PhAB開發了嵌入式操控訓練系統的操控界面,根據系統的模塊劃分對主程序進行了設計,系統程序運行穩定,滿足訓練要求,對其他嵌入式訓練系統軟件設計具有一定的借鑒意義。

關鍵詞: QNX; 圖形界面; 建模; 嵌入式訓練系統

中圖分類號: TN964?34 文獻標識碼: 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 引 言

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

1 QNX概述

QNX是由加拿大QSSL公司開發的一款嵌入式實時操作系統,具有實時性強、多任務、分布式、可擴展的特點和強大的圖形界面開發功能,廣泛應用于軍事、航空航天、醫療設備、車載系統、高端網絡系統和自動化等領域[1]。獨特的中斷處理方式,快速的上下文切換和基于優先級驅動的搶占調度方式,保證了其強大的實時性能。QNX的內核僅執行四種最基本的功能,使得系統具有良好的可靠性,而高度的可裁剪性也讓其在嵌入式開發方面具有得天獨厚的優勢。此外,QNX還具有良好的可移植性和自保護機制,符合POSIX標準,這些都使得其在嵌入式實時領域得到了越來越廣泛的應用。

2 系統軟件設計

2.1 QNX系統映像文件的配置

映像文件包括操作系統,可執行程序和任何與程序相關的數據文件,是嵌入式系統開發的基礎,為系統軟件設計提供了平臺。根據系統的實際需求制作合適的操作系統映像文件,可以充分發揮嵌入式系統小巧的特點,在節省內存資源的同時也保證了系統的整體性能。具體說來就是根據自己所選擇的CPU類型和應用程序所需要的操作系統模塊支持來定制系統,在保證既定功能的基礎上裁剪掉與實現功能無關的文件,實現系統的最小化。

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

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

startup?bios

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

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

啟動腳本是在進程管理啟動后一系列將要被執行命令的序列,用于在引導腳本執行完后運行驅動程序和用戶程序,通常格式如下:

[+script] .script={

command line

}

文件列表是指系統程序和用戶程序執行所必須的文件列表和一些共享庫,通過[type=link]重新定位它們的位置。由于本文所設計的嵌入式操控訓練系統以C語言為開發語言,所有的驅動至少需要一個標準C共享庫:

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

libc.so #標準C共享庫

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

2.2 應用程序設計

2.2.1 模塊化設計

嵌入式操控訓練系統不僅要實現對水下航行器的操縱和訓練等功能,還應能處理系統內部和外部的各種輸入輸出信號讀寫、計算和通信。根據系統的功能,將其分為以下模塊:

(1) 系統控制模塊:管理系統運行狀態、數據通信等。

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

(3) 運動模型模塊:模擬水下航行器的運動狀態,根據六自由度方程解算出當前的狀態參數值。

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

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

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

除上述模塊外,還包括數據采集卡控制模塊、接口控制模塊和通信模塊。通過采用模塊化設計方法,降低了軟件結構的復雜性,方便了軟件設計,降低了開發難度。軟件系統的模塊結構如圖1所示。

2.2.2 界面設計

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

Photon microGUI采用了與QNX微內核相同的結構,圖形窗口的構建是通過微內核和一組共操作的進程來實現的,使得窗口系統占用的空間少而可靠性高。Photon自帶的PhAB開發工具采用所見即所得的開發模式,可以自動生成主要的C和C++代碼來完成工程的用戶界面,大大提高編程效率。本文采用PhAB開發工具進行界面設計。

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

目標代碼生成后,用戶可以利用QNX Momentics IDE軟件編寫相應的初始化函數、回調函數和其他函數。本文所設計的界面需要實現對深度、航向和水下航行器運行狀態等動態數據的實時顯示,下面以界面中顯示航向的動態碼盤繪制為例介紹程序設計的一般方法。

動態碼盤的繪制采用的是具有自動重繪功能的PtRaw控件,回調函數包括:

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

(2) 定時器函數:int timer_refresh( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )。負責定時調用清除函數或發送事件,從而引發繪圖函數根據新數據自動重繪。

繪圖函數通過設置PtRaw控件的Pt_ARG_RAW_

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

繪制動態碼盤就是要不斷的調用繪圖函數進行重繪,然而繪圖函數不能被直接調用,只能通過銷毀PtRaw控件畫布的方式來達到重繪的目的。滿足以下兩個條件之一即可以銷毀畫布:

(1) PtRaw控件實現時;

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

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

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

按照上述方法繪制航向、方向舵、舯水平舵、艉升降舵碼盤和水下航行器狀態顯示畫面,編寫回調函數,系統初始化函數,即可完成系統的界面設計。

2.2.3 主程序設計

為避免代碼的重復編譯,提高程序執行效率,本文以界面程序中已設定的回調函數為基礎對系統主程序進行了設計,減小了編程工作量。根據嵌入式訓練系統的功能要求,進行的程序設計如下:

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

(2) 舵機模型程序設計。目前,通常采用的舵機數學模型[6]為:

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

式中:[δ]為實際舵角;[δe]為指令舵角;[TE]為舵機時間常數;[KE]為舵機的控制增益。考慮到舵機的實際情況,在模型中加入舵角及轉舵速度限制,模型程序如下:

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; //舵機模型,TE取2.5,KE取1

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

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

if (deter

主站蜘蛛池模板: 曰AV在线无码| 亚洲妓女综合网995久久| 亚洲天堂在线视频| 亚洲永久色| 97久久超碰极品视觉盛宴| 国产激情无码一区二区免费| 日a本亚洲中文在线观看| 欧美一级大片在线观看| 亚洲Va中文字幕久久一区| 欧美高清视频一区二区三区| 国产精品亚洲а∨天堂免下载| 欧洲欧美人成免费全部视频 | 国产成人精品综合| 午夜毛片免费观看视频 | 国产一级做美女做受视频| 性欧美久久| 久草性视频| 色屁屁一区二区三区视频国产| 亚洲高清中文字幕| 国产精品无码AV片在线观看播放| 日日噜噜夜夜狠狠视频| 国产亚洲欧美另类一区二区| 久久无码av三级| 成人av专区精品无码国产 | 欧美日本视频在线观看| 亚洲精品另类| 99久久国产综合精品2023| av尤物免费在线观看| 国产精品福利一区二区久久| 午夜精品一区二区蜜桃| 免费可以看的无遮挡av无码| 亚洲伊人久久精品影院| 亚洲最大情网站在线观看| 国产精品久久国产精麻豆99网站| 美女无遮挡免费视频网站| 天天综合网亚洲网站| 91毛片网| 国产97区一区二区三区无码| 深爱婷婷激情网| 在线观看免费国产| 国产91线观看| 国产白浆视频| 天天激情综合| 亚洲欧美日韩另类在线一| 香蕉蕉亚亚洲aav综合| 美女毛片在线| 中文字幕中文字字幕码一二区| 亚洲国产综合精品一区| 亚洲欧美人成电影在线观看| 国产在线观看高清不卡| 免费观看亚洲人成网站| 亚洲精品大秀视频| 曰AV在线无码| 日本一区二区三区精品国产| 全裸无码专区| 国产午夜精品一区二区三区软件| 欧美一区福利| a亚洲视频| 自慰网址在线观看| 精品综合久久久久久97超人该| 成年女人a毛片免费视频| 国产精品一区二区无码免费看片| 国产粉嫩粉嫩的18在线播放91| 99精品在线看| 黄片在线永久| 亚洲AⅤ永久无码精品毛片| 久久美女精品| 9cao视频精品| 一级毛片免费观看久| 中文无码日韩精品| 91免费在线看| 亚洲精品在线观看91| 国产一区免费在线观看| 亚洲乱码在线播放| 色婷婷国产精品视频| 精品偷拍一区二区| 高清不卡一区二区三区香蕉| 亚洲国产中文在线二区三区免| 日韩欧美中文亚洲高清在线| 天天综合天天综合| 91福利免费视频| 国产成人1024精品|