王立偉 劉常波 胡坤 張建華 李建輝
摘 要: 為了解決船舶嵌入式操縱訓(xùn)練系統(tǒng)軟件設(shè)計中出現(xiàn)的數(shù)據(jù)顯示滯后、界面卡頓和系統(tǒng)死機問題,引入基于QNX操作系統(tǒng)的多線程技術(shù)進(jìn)行系統(tǒng)軟件程序改進(jìn)設(shè)計。通過仿真實驗對系統(tǒng)功能和實時性能進(jìn)行了檢驗,結(jié)果表明:系統(tǒng)軟件可以模擬船舶運動,實現(xiàn)訓(xùn)練功能;多線程程序改進(jìn)設(shè)計有效解決了數(shù)據(jù)顯示滯后、界面卡頓和死機問題,系統(tǒng)能夠完成對模型的實時解算和狀態(tài)參數(shù)的實時顯示,數(shù)據(jù)更新時間在2 ms內(nèi),滿足實時性要求。
關(guān)鍵詞: QNX; 多線程技術(shù); 嵌入式訓(xùn)練系統(tǒng); 程序設(shè)計
中圖分類號: TN967.7?34 文獻(xiàn)標(biāo)識碼: 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]。嵌入式操縱訓(xùn)練系統(tǒng)通過在原有操縱系統(tǒng)中加入嵌入式訓(xùn)練模塊,將模擬訓(xùn)練與實裝訓(xùn)練結(jié)合起來,有效地解決了傳統(tǒng)訓(xùn)練方式不能同時兼顧訓(xùn)練真實性和訓(xùn)練實用性的問題,具有逼真、高效和低費用的特點,已成為各國關(guān)注的焦點[2]。
在船舶嵌入式操縱訓(xùn)練系統(tǒng)軟件設(shè)計中,由于模型解算計算量大、系統(tǒng)資源有限,系統(tǒng)軟件經(jīng)常會在某些特定條件下(如航速過大或轉(zhuǎn)舵角度過大時)出現(xiàn)數(shù)據(jù)顯示滯后、卡頓甚至系統(tǒng)死機現(xiàn)象。為了充分利用系統(tǒng)有限的資源,提高實時性能,實現(xiàn)訓(xùn)練功能,本文對某船舶嵌入式操縱訓(xùn)練系統(tǒng)進(jìn)行了多線程程序改進(jìn)設(shè)計。
1 QNX操作系統(tǒng)與多線程技術(shù)
QNX實時操作系統(tǒng)由加拿大QNX公司設(shè)計開發(fā),特點是多任務(wù)、多用戶、實時性強、擴(kuò)展性好、可嵌入,目前已廣泛應(yīng)用于自動化、醫(yī)療機械、軍事、通信、航空航天領(lǐng)域[3]。獨特的中斷處理方式,快速的上下文切換和基于優(yōu)先級驅(qū)動的搶占調(diào)度方式,保證了其強大的實時性能。同時,QNX還具有良好的可移植性和自保護(hù)機制,符合 POSIX 標(biāo)準(zhǔn), 這些都使得其在嵌入式實時領(lǐng)域得到了越來越廣泛的應(yīng)用[4]。
多線程技術(shù)(Multithreading Technology)是一種讓多個線程并發(fā)執(zhí)行的技術(shù),這種并發(fā)執(zhí)行可從硬件或軟件上來實現(xiàn)。它可以有效地提高資源利用率,使程序設(shè)計變得簡單,程序響應(yīng)更快[5]。QNX是一種支持多任務(wù)、多用戶的分布式實時操作系統(tǒng),支持多線程技術(shù),符合POSIX線程標(biāo)準(zhǔn)[6]。QNX系統(tǒng)基于優(yōu)先級的進(jìn)程調(diào)度策略和快速上下文切換等特點,使得其在多線程應(yīng)用方面具有得天獨厚的優(yōu)勢,它已經(jīng)在數(shù)據(jù)采集、實時監(jiān)控和測試等對實時性要求十分苛刻的領(lǐng)域得到了成功應(yīng)用[7]。
2 船舶嵌入式操縱訓(xùn)練系統(tǒng)多線程軟件設(shè)計
2.1 QNX多線程庫函數(shù)
與其他系統(tǒng)不同,QNX操作系統(tǒng)并沒有提供單獨的線程庫,而是在C語言函數(shù)庫中包含了與線程相關(guān)的API函數(shù),在程序編寫時,通過添加
2.2 QNX線程的同步與互斥機制
線程間的同步是指相互合作的線程在某個確定點上協(xié)調(diào)工作,只有多個線程均到達(dá)此點,才進(jìn)行下一步的工作。線程間的互斥是指對共享資源的約束訪問,同一時刻只允許某個線程訪問臨界資源 [9]。為了阻止線程間的競爭,QNX操作系統(tǒng)提供了多種同步和互斥機制,確保了某個時刻只有單個線程可以訪問共享內(nèi)存[10],表2為QNX系統(tǒng)同步互斥機制及相關(guān)實現(xiàn)函數(shù)。
2.3 船舶嵌入式操縱訓(xùn)練系統(tǒng)多線程程序設(shè)計
本文設(shè)計的船舶嵌入式操縱訓(xùn)練系統(tǒng)基于QNX系統(tǒng)開發(fā),使用PhAB開發(fā)工具進(jìn)行系統(tǒng)圖形界面設(shè)計,利用QNX Momentics IDE軟件進(jìn)行系統(tǒng)主程序設(shè)計,操縱訓(xùn)練系統(tǒng)的基本結(jié)構(gòu)如圖1所示,可以實現(xiàn)操控數(shù)據(jù)的采集、運動模型的解算以及模擬訓(xùn)練管理等功能,繁多的任務(wù)要求使得系統(tǒng)的實時性問題凸顯。在各類任務(wù)中,仿真模型的解算占用資源多、耗時明顯,若不采用措施對計算機資源進(jìn)行合理配置,則不能在規(guī)定的時間內(nèi)完成仿真模型解算,滿足不了系統(tǒng)實時性要求。
為了解決系統(tǒng)的實時性問題,引入QNX的多線程技術(shù),將各個任務(wù)劃分到多個不同線程中。在仿真系統(tǒng)中,多個線程并發(fā)執(zhí)行,可使系統(tǒng)同一時間內(nèi)完成的任務(wù)更多,提高了系統(tǒng)的響應(yīng)速度和執(zhí)行效率。QNX系統(tǒng)提供了單進(jìn)程多線程和多進(jìn)程多線程兩種體系,可以根據(jù)不同的需要選擇相適應(yīng)的程序結(jié)構(gòu)。
根據(jù)船舶嵌入式操縱訓(xùn)練系統(tǒng)的功能需要,本文采用了單進(jìn)程多線程結(jié)構(gòu)對系統(tǒng)軟件進(jìn)行了優(yōu)化設(shè)計,將系統(tǒng)任務(wù)分散到不同的線程來完成,主要包括人機交互線程、界面顯示線程、仿真模型線程、監(jiān)控線程和訓(xùn)練管理線程,圖2為多線程軟件實現(xiàn)流程。嵌入式訓(xùn)練系統(tǒng)軟件在單進(jìn)程多線程結(jié)構(gòu)設(shè)計下以獨立進(jìn)程的方式運行,系統(tǒng)調(diào)用進(jìn)程后,由進(jìn)程管理模塊為相應(yīng)的進(jìn)程分配地址空間,進(jìn)而調(diào)用所有的任務(wù)線程。進(jìn)程中的主線程創(chuàng)建其余各任務(wù)線程,并根據(jù)優(yōu)先級的大小選擇線程的執(zhí)行順序。多線程程序編寫實例如下所示:
3 仿真實驗驗證
為了檢驗系統(tǒng)功能,本文進(jìn)行了仿真實驗驗證,包括操縱實驗和系統(tǒng)實時性檢測。
3.1 操縱實驗
操縱實驗主要用于驗證嵌入式操縱訓(xùn)練系統(tǒng)中實驗的運動模型程序、舵機模型程序、自動控制程序及模型解算程序是否能正常運行,系統(tǒng)能否為受訓(xùn)者提供一個符合船舶運動規(guī)律的訓(xùn)練環(huán)境。實驗方法為,將系統(tǒng)轉(zhuǎn)換到訓(xùn)練模式,通過模擬操作面板上的相應(yīng)按鈕設(shè)置舵角和航向值,由訓(xùn)練機根據(jù)舵角值及其他各類參數(shù)完成模型的解算,解算出的狀態(tài)參數(shù)由監(jiān)控界面進(jìn)行實時顯示并保存,最后使用Matlab軟件進(jìn)行數(shù)據(jù)繪圖分析。操縱實驗包括以下內(nèi)容:
3.1.1 對方向舵的響應(yīng)
在航速[UC]=10 kn,方向舵[δr]=20°時,系統(tǒng)的航向和回轉(zhuǎn)軌跡線如圖3所示。由圖中可以看出,在操作方向舵時,航向隨操舵時間的增加而不斷的變化,船舶作回轉(zhuǎn)運動。
3.1.2 對航向自動控制的響應(yīng)
設(shè)定初始航向為0°,指令航向為30°,航速[UC]=10 kn,檢驗系統(tǒng)對航向的自動控制功能,此時系統(tǒng)方向舵舵角和航向的響應(yīng)曲線如圖4所示。
由圖4可知,方向舵舵角經(jīng)歷了一個隨時間逐步增加的過程,與實際舵機的工作規(guī)律一致,同時航向PID控制器能通過對方向舵的控制實現(xiàn)航向的自動控制。
3.2 系統(tǒng)實時性檢測
系統(tǒng)實時性檢測主要用于檢驗監(jiān)控界面是否能實時顯示船舶運動狀態(tài),系統(tǒng)能否實時完成模型狀態(tài)參數(shù)解算,系統(tǒng)數(shù)據(jù)能否及時更新等。實驗方法為,將嵌入式訓(xùn)練系統(tǒng)軟件程序?qū)胙b有QNX 6.3.2系統(tǒng)的VP9嵌入式單板機中,記錄系統(tǒng)更新數(shù)據(jù)的時間點,記錄并分析系統(tǒng)更新數(shù)據(jù)所花費的時間,同時觀察系統(tǒng)監(jiān)控界面是否會出現(xiàn)卡頓現(xiàn)象。圖5為6 000 ms內(nèi)的系統(tǒng)實時性測試數(shù)據(jù),分析可知系統(tǒng)的數(shù)據(jù)更新時間在2 ms內(nèi),滿足了實時要求。同時,在實驗過程中系統(tǒng)監(jiān)控界面能實時顯示更新各狀態(tài)參數(shù),未出現(xiàn)界面卡頓現(xiàn)象。
4 結(jié) 語
本文研究了多線程技術(shù)在某船舶嵌入式操縱訓(xùn)練系統(tǒng)軟件設(shè)計中的應(yīng)用,通過仿真實驗,對系統(tǒng)的功能及實時性能進(jìn)行了驗證。仿真結(jié)果表明,所設(shè)計的船舶嵌入式操縱訓(xùn)練系統(tǒng)軟件能通過設(shè)置舵角值以及進(jìn)行模型解算來模擬船舶運動。同時能夠?qū)崿F(xiàn)對航向的自動控制,符合船舶的實際運動規(guī)律,可以實現(xiàn)訓(xùn)練功能?;赒NX系統(tǒng)的多線程程序改進(jìn)設(shè)計,有效解決了原系統(tǒng)中數(shù)據(jù)顯示滯后、卡頓及死機現(xiàn)象,通過對資源的合理配置,系統(tǒng)數(shù)據(jù)更新的時間在2 ms內(nèi),能夠完成對模型的實時解算和實時顯示,即使在較大的轉(zhuǎn)舵角度和高航速等程序計算量很大的情況下,系統(tǒng)也未出現(xiàn)死機和畫面卡頓現(xiàn)象,系統(tǒng)程序運行有效、可靠,滿足了船舶嵌入式操作訓(xùn)練系統(tǒng)的實時性要求。
參考文獻(xiàn)
[1] 梁霄,李巍.船舶操縱性與耐波性[M].大連:大連海事大學(xué)出版社,2012:4?10.
[2] 王立偉,胡大斌,肖劍波,等.船舶機動控制嵌入式訓(xùn)練系統(tǒng)方案設(shè)計研究[J].艦船科學(xué)技術(shù),2015,37(8):188?189.
[3] 蔣正林,楊斌.基于QNX的雙足機器人視覺姿態(tài)平衡研究[J].成都信息工程學(xué)院學(xué)報,2014,29(2):141?142.
[4] 王立偉,胡大斌,肖劍波.基于QNX的嵌入式操控訓(xùn)練系統(tǒng)軟件設(shè)計[J].現(xiàn)代電子技術(shù),2014,37(12):15?18.
[5] 陳杰.基于多線程的電能質(zhì)量擾動識別系統(tǒng)設(shè)計[D].哈爾濱:哈爾濱理工大學(xué),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].杭州:杭州電子科技大學(xué),2015:11?12.
[8] 程品.四足仿生機器人控制系統(tǒng)的研究與設(shè)計[D].武漢:華中科技大學(xué),2014:20?22.
[9] 李慧明.多線程技術(shù)在實時測量系統(tǒng)中的應(yīng)用[J].電腦編程技巧與維護(hù),2016,1(1):12?13.
[10] 李存.QNX Neutrino實時操作系統(tǒng)性能分析[J].微型電腦應(yīng)用,2014,30(3):36?37.