王立偉 劉常波 胡坤 張建華 李建輝
摘 要: 為了解決船舶嵌入式操縱訓練系統(tǒng)軟件設計中出現(xiàn)的數(shù)據顯示滯后、界面卡頓和系統(tǒng)死機問題,引入基于QNX操作系統(tǒng)的多線程技術進行系統(tǒng)軟件程序改進設計。通過仿真實驗對系統(tǒng)功能和實時性能進行了檢驗,結果表明:系統(tǒng)軟件可以模擬船舶運動,實現(xiàn)訓練功能;多線程程序改進設計有效解決了數(shù)據顯示滯后、界面卡頓和死機問題,系統(tǒng)能夠完成對模型的實時解算和狀態(tài)參數(shù)的實時顯示,數(shù)據更新時間在2 ms內,滿足實時性要求。
關鍵詞: QNX; 多線程技術; 嵌入式訓練系統(tǒng); 程序設計
中圖分類號: TN967.7?34 文獻標識碼: A 文章編號: 1004?373X(2017)20?0091?04
Abstract: In order to resolve the problems of data display delay, interface buffering, and system crash during software design of the embedded training system for ship maneuvering, the QNX OS?based multithreading technology is imported for design improvement of system software program. The simulation experiment was carried out to detect the function and real?time performance of the system. The results show that the system software can simulate ship motion and realize the training function, the design improvement of multithreading program effectively resolves the problems of data display delay, interface buffering and system crash, the system can accomplish real?time resolution of the model and real?time display of status parameters, and the data update interval (no more than 2 ms) can meet the real?time requirement.
Keywords: QNX; multithreading technology; embedded training system; program design
0 引 言
船舶操縱系統(tǒng)是借助操縱裝置改變或保持船舶的速度、姿態(tài)以及方向的系統(tǒng),在船舶生命力及航行安全中占有極為重要的地位[1]。嵌入式操縱訓練系統(tǒng)通過在原有操縱系統(tǒng)中加入嵌入式訓練模塊,將模擬訓練與實裝訓練結合起來,有效地解決了傳統(tǒng)訓練方式不能同時兼顧訓練真實性和訓練實用性的問題,具有逼真、高效和低費用的特點,已成為各國關注的焦點[2]。
在船舶嵌入式操縱訓練系統(tǒng)軟件設計中,由于模型解算計算量大、系統(tǒng)資源有限,系統(tǒng)軟件經常會在某些特定條件下(如航速過大或轉舵角度過大時)出現(xiàn)數(shù)據顯示滯后、卡頓甚至系統(tǒng)死機現(xiàn)象。為了充分利用系統(tǒng)有限的資源,提高實時性能,實現(xiàn)訓練功能,本文對某船舶嵌入式操縱訓練系統(tǒng)進行了多線程程序改進設計。
1 QNX操作系統(tǒng)與多線程技術
QNX實時操作系統(tǒng)由加拿大QNX公司設計開發(fā),特點是多任務、多用戶、實時性強、擴展性好、可嵌入,目前已廣泛應用于自動化、醫(yī)療機械、軍事、通信、航空航天領域[3]。獨特的中斷處理方式,快速的上下文切換和基于優(yōu)先級驅動的搶占調度方式,保證了其強大的實時性能。同時,QNX還具有良好的可移植性和自保護機制,符合 POSIX 標準, 這些都使得其在嵌入式實時領域得到了越來越廣泛的應用[4]。
多線程技術(Multithreading Technology)是一種讓多個線程并發(fā)執(zhí)行的技術,這種并發(fā)執(zhí)行可從硬件或軟件上來實現(xiàn)。它可以有效地提高資源利用率,使程序設計變得簡單,程序響應更快[5]。QNX是一種支持多任務、多用戶的分布式實時操作系統(tǒng),支持多線程技術,符合POSIX線程標準[6]。QNX系統(tǒng)基于優(yōu)先級的進程調度策略和快速上下文切換等特點,使得其在多線程應用方面具有得天獨厚的優(yōu)勢,它已經在數(shù)據采集、實時監(jiān)控和測試等對實時性要求十分苛刻的領域得到了成功應用[7]。
2 船舶嵌入式操縱訓練系統(tǒng)多線程軟件設計
2.1 QNX多線程庫函數(shù)
與其他系統(tǒng)不同,QNX操作系統(tǒng)并沒有提供單獨的線程庫,而是在C語言函數(shù)庫中包含了與線程相關的API函數(shù),在程序編寫時,通過添加
2.2 QNX線程的同步與互斥機制
線程間的同步是指相互合作的線程在某個確定點上協(xié)調工作,只有多個線程均到達此點,才進行下一步的工作。線程間的互斥是指對共享資源的約束訪問,同一時刻只允許某個線程訪問臨界資源 [9]。為了阻止線程間的競爭,QNX操作系統(tǒng)提供了多種同步和互斥機制,確保了某個時刻只有單個線程可以訪問共享內存[10],表2為QNX系統(tǒng)同步互斥機制及相關實現(xiàn)函數(shù)。
2.3 船舶嵌入式操縱訓練系統(tǒng)多線程程序設計
本文設計的船舶嵌入式操縱訓練系統(tǒng)基于QNX系統(tǒng)開發(fā),使用PhAB開發(fā)工具進行系統(tǒng)圖形界面設計,利用QNX Momentics IDE軟件進行系統(tǒng)主程序設計,操縱訓練系統(tǒng)的基本結構如圖1所示,可以實現(xiàn)操控數(shù)據的采集、運動模型的解算以及模擬訓練管理等功能,繁多的任務要求使得系統(tǒng)的實時性問題凸顯。在各類任務中,仿真模型的解算占用資源多、耗時明顯,若不采用措施對計算機資源進行合理配置,則不能在規(guī)定的時間內完成仿真模型解算,滿足不了系統(tǒng)實時性要求。
為了解決系統(tǒng)的實時性問題,引入QNX的多線程技術,將各個任務劃分到多個不同線程中。在仿真系統(tǒng)中,多個線程并發(fā)執(zhí)行,可使系統(tǒng)同一時間內完成的任務更多,提高了系統(tǒng)的響應速度和執(zhí)行效率。QNX系統(tǒng)提供了單進程多線程和多進程多線程兩種體系,可以根據不同的需要選擇相適應的程序結構。
根據船舶嵌入式操縱訓練系統(tǒng)的功能需要,本文采用了單進程多線程結構對系統(tǒng)軟件進行了優(yōu)化設計,將系統(tǒng)任務分散到不同的線程來完成,主要包括人機交互線程、界面顯示線程、仿真模型線程、監(jiān)控線程和訓練管理線程,圖2為多線程軟件實現(xiàn)流程。嵌入式訓練系統(tǒng)軟件在單進程多線程結構設計下以獨立進程的方式運行,系統(tǒng)調用進程后,由進程管理模塊為相應的進程分配地址空間,進而調用所有的任務線程。進程中的主線程創(chuàng)建其余各任務線程,并根據優(yōu)先級的大小選擇線程的執(zhí)行順序。多線程程序編寫實例如下所示:
3 仿真實驗驗證
為了檢驗系統(tǒng)功能,本文進行了仿真實驗驗證,包括操縱實驗和系統(tǒng)實時性檢測。
3.1 操縱實驗
操縱實驗主要用于驗證嵌入式操縱訓練系統(tǒng)中實驗的運動模型程序、舵機模型程序、自動控制程序及模型解算程序是否能正常運行,系統(tǒng)能否為受訓者提供一個符合船舶運動規(guī)律的訓練環(huán)境。實驗方法為,將系統(tǒng)轉換到訓練模式,通過模擬操作面板上的相應按鈕設置舵角和航向值,由訓練機根據舵角值及其他各類參數(shù)完成模型的解算,解算出的狀態(tài)參數(shù)由監(jiān)控界面進行實時顯示并保存,最后使用Matlab軟件進行數(shù)據繪圖分析。操縱實驗包括以下內容:
3.1.1 對方向舵的響應
在航速[UC]=10 kn,方向舵[δr]=20°時,系統(tǒng)的航向和回轉軌跡線如圖3所示。由圖中可以看出,在操作方向舵時,航向隨操舵時間的增加而不斷的變化,船舶作回轉運動。
3.1.2 對航向自動控制的響應
設定初始航向為0°,指令航向為30°,航速[UC]=10 kn,檢驗系統(tǒng)對航向的自動控制功能,此時系統(tǒng)方向舵舵角和航向的響應曲線如圖4所示。
由圖4可知,方向舵舵角經歷了一個隨時間逐步增加的過程,與實際舵機的工作規(guī)律一致,同時航向PID控制器能通過對方向舵的控制實現(xiàn)航向的自動控制。
3.2 系統(tǒng)實時性檢測
系統(tǒng)實時性檢測主要用于檢驗監(jiān)控界面是否能實時顯示船舶運動狀態(tài),系統(tǒng)能否實時完成模型狀態(tài)參數(shù)解算,系統(tǒng)數(shù)據能否及時更新等。實驗方法為,將嵌入式訓練系統(tǒng)軟件程序導入裝有QNX 6.3.2系統(tǒng)的VP9嵌入式單板機中,記錄系統(tǒng)更新數(shù)據的時間點,記錄并分析系統(tǒng)更新數(shù)據所花費的時間,同時觀察系統(tǒng)監(jiān)控界面是否會出現(xiàn)卡頓現(xiàn)象。圖5為6 000 ms內的系統(tǒng)實時性測試數(shù)據,分析可知系統(tǒng)的數(shù)據更新時間在2 ms內,滿足了實時要求。同時,在實驗過程中系統(tǒng)監(jiān)控界面能實時顯示更新各狀態(tài)參數(shù),未出現(xiàn)界面卡頓現(xiàn)象。
4 結 語
本文研究了多線程技術在某船舶嵌入式操縱訓練系統(tǒng)軟件設計中的應用,通過仿真實驗,對系統(tǒng)的功能及實時性能進行了驗證。仿真結果表明,所設計的船舶嵌入式操縱訓練系統(tǒng)軟件能通過設置舵角值以及進行模型解算來模擬船舶運動。同時能夠實現(xiàn)對航向的自動控制,符合船舶的實際運動規(guī)律,可以實現(xiàn)訓練功能?;赒NX系統(tǒng)的多線程程序改進設計,有效解決了原系統(tǒng)中數(shù)據顯示滯后、卡頓及死機現(xiàn)象,通過對資源的合理配置,系統(tǒng)數(shù)據更新的時間在2 ms內,能夠完成對模型的實時解算和實時顯示,即使在較大的轉舵角度和高航速等程序計算量很大的情況下,系統(tǒng)也未出現(xiàn)死機和畫面卡頓現(xiàn)象,系統(tǒng)程序運行有效、可靠,滿足了船舶嵌入式操作訓練系統(tǒng)的實時性要求。
參考文獻
[1] 梁霄,李巍.船舶操縱性與耐波性[M].大連:大連海事大學出版社,2012:4?10.
[2] 王立偉,胡大斌,肖劍波,等.船舶機動控制嵌入式訓練系統(tǒng)方案設計研究[J].艦船科學技術,2015,37(8):188?189.
[3] 蔣正林,楊斌.基于QNX的雙足機器人視覺姿態(tài)平衡研究[J].成都信息工程學院學報,2014,29(2):141?142.
[4] 王立偉,胡大斌,肖劍波.基于QNX的嵌入式操控訓練系統(tǒng)軟件設計[J].現(xiàn)代電子技術,2014,37(12):15?18.
[5] 陳杰.基于多線程的電能質量擾動識別系統(tǒng)設計[D].哈爾濱:哈爾濱理工大學,2014:11?12.
[6] QNX Software System Ltd. Processes and threads [EB/OL]. [2016?09?19]. http://www.qnx.com/developers/docs/6.4.0/neutrino/getting_started/s1_procs.html.
[7] 王瑩.深海探測裝備的監(jiān)控界面開發(fā)[D].杭州:杭州電子科技大學,2015:11?12.
[8] 程品.四足仿生機器人控制系統(tǒng)的研究與設計[D].武漢:華中科技大學,2014:20?22.
[9] 李慧明.多線程技術在實時測量系統(tǒng)中的應用[J].電腦編程技巧與維護,2016,1(1):12?13.
[10] 李存.QNX Neutrino實時操作系統(tǒng)性能分析[J].微型電腦應用,2014,30(3):36?37.