摘 要: 為實現基于嵌入式Linux系統的ARM11手持監控器與下位機之間的串口通信,在基于ARM1176JZF?S核的ARM11開發板上移植Linux操作系統,搭建嵌入式QT應用平臺。利用QT可視化的圖形界面及豐富的圖形庫,設計并制作手持監控器圖形界面。根據Linux下串口通信的應用層協議,最終實現了下位機的運動狀態數據在QT界面上的實時顯示。該方法簡單、可靠、便于實際工程應用,解除了PC機對下位機進行遠程數據監控攜帶不方便的問題。由于Linux系統和QT都有較強的可移植性,該方法在遠程手持監控設備中將有廣泛的應用前景。
關鍵詞: 嵌入式; Linux; 手持監控器; QT; 串口通信
中圖分類號: TN919?34; TP393.04 文獻標識碼: A 文章編號: 1004?373X(2013)20?0110?03
0 引 言
近年來,隨著電子、材料、計算機等一些高新技術的出現,水下機器人的研制有了迅猛的發展,已經出現海底實驗、考察、施工、打撈與救助等多種用途與類型的水下機器人[1]。本課題來源于國家“863計劃”——核反應堆專用機器人技術與應用。因為核電站反應堆水池特殊復雜的環境,必須要對核電站的水下機器人進行遠程監控。目前國內外已經有多種對水下機器人監控的岸上控制箱,但大都體積龐大,不方便攜帶。本文的目標是設計制作一個手持式監控器,可以方便的攜帶,并能夠顯示出水下機器人的各個運動狀態參數。
Linux操作系統,具有免費、安全、可靠、運行穩定等特點,具有跨平臺的特性,移植性非常好,并且它開放源代碼的優點使得系統成本非常低[1],適合于向ARM11開發板上移植。配以具有跨平臺特性并含有豐富圖形庫的QT軟件,使得本手持式遠程監控器的設計簡單,成本低廉,非常適合于工業應用[1]。
1 硬件平臺的選擇及系統移植
1.1 核心處理器的選擇
因為需要實時的顯示水下機器人的運動狀態信息,所以選用ARM(Advanced RISC Machines)處理器核心板來實現功能。ARM處理器具有體積小、低功耗、低成本、高性能的優點,非常適合用于嵌入式手持設備。基于ARM1176JZF?S核來設計的ARM11處理器具有豐富的接口、較高的處理速度,同時能擴展出各種總線接口,包括數據總線、地址總線和控制總線,以及串口、USB接口、以太網接口等,可以方便的與其他模塊進行連接[1],可以非常輕松的滿足我們手控器對QT串口通信的需求,如圖1所示。
1.2 操作系統的移植與交叉編譯器的安裝
1.2.1 Linux操作系統的移植
Linux操作系統是跨平臺、開放源代碼的,并且內核小、可剪裁、功耗低、功能易擴展,開發及運行效率高,因此我們在ARM11開發板上移植了版本號為2.6.38的嵌入式Linux操作系統[1]。
1.2.2 交叉編譯器的安裝
為了使宿主機上程序能夠順利的在目標機上運行,需要對開發板安裝交叉編譯工具鏈。在此安裝的交叉編譯器版本為Arm?Linux?Gcc4.5.1,它默認采用armv6指令集,支持硬浮點運算。安裝好交叉編譯器后,在宿主機PC電腦上編寫的程序可以順利的在目標機開發板上運行,這為后續工作搭建好了平臺。
2 QT軟件介紹及其移植
2.1 QT軟件簡介
QT是一個跨平臺的C++圖形用戶界面庫,由挪威TrollTech公司1995年出品,QT具有優秀的跨平臺特性,相同的代碼可以在任何支持的平臺上編譯與運行,而不需要修改源代碼。同時,QT具有良好的封裝機制,模塊化程度非常高,可重用性較好,其獨特的信號/槽機制,使得各個元件之間的協同工作非常簡單[1]。而QT/Embedded是專門面向嵌入式系統的QT版本,專門為小型設備提供了圖形用戶界面的應用框架和窗口系統,具有極好的跨平臺特性,非常適合于手持監控器的開發。QT/Embedded的實現機構如下[1]。
2.2 QT到開發板的移植
本文的目的是在嵌入式硬件平臺ARM11上實現QT/E的圖形用戶界面,來實現讀取下位機傳來的串口數據。所以首先需要在PC機上安裝好QT并交叉編譯成為針對arm平臺的embedded版本[1],并將其移植到ARM11開發板上,至此,在PC機Linux系統上編寫的QT運行程序,便可以在開發板上運行了,在此安裝的QT版本為4.7,如圖2所示。
3 串口通信的實現
3.1 Linux下串口通信的原理
因為在QT中沒有特定的串口控制類,所以在此引用一個由第三方編寫的qextSerialPort類來實現串口通信。該類包含2個類,QextSerialBase類和Posix_QextSerialPort類,這兩個類的關系圖如圖3所示。
可以看到,兩個類都是繼承自QT軟件自帶的QIODevice類,所以該類中的一些函數可以直接調用。其中,類QextSerialBase繼承自QIODevice類,它提供了操作串口所必需的一些變量和函數等,而Posix_QextSerialPort繼承自QextSerialBase,Posix_QextSerialPort類添加了Linux平臺下操作串口的一些功能。
在QextSerialBase類中涉及到了一個枚舉變量QueryMode,它包括兩個值,一個是事件驅動方式EventDriven,另一個是查詢方式Polling。在事件驅動方式中,串口的讀寫是異步的,不會凍結調用線程。而查詢方式讀寫函數是同步執行的,信號不能工作在這種模式下,而且有些功能也無法實現,但是這種模式下開銷較小,我們可以自己建立定時器來讀取串口的數據,并顯示在QT的圖形用戶界面上。本文介紹的就是用Polling方式來進行串口通信,因為手持監控器只需要顯示下位機的運動狀態參數,所以只需要讀取下位機發來的數據即可。
3.2 Polling方式串口通信的實現過程
因為查詢方式進行串口通信需要設置一個定時器,并通過QT特有的信號/槽機制,將定時器超時信號與槽函數關聯,每到定時器設定的值后就讀取一次串口的數據,實現串口通信的流程圖如圖4所示。
3.3 串口通信在ARM11開發板上的實現
在熟知QT下串口通信的原理后[1],在QT軟件中建立工程,通過調用QextSerialBase和Posix_QextSerialPort兩個類,利用textbrowser和label來實現QT界面的編寫[1],在PC機上模擬運行成功后,對該程序進行交叉編譯,生成了能夠在ARM11開發板上運行的可執行程序,并將其燒寫到開發板上,通過命令終端運行,使其成為?qws(服務器程序),并進行實際測利用下位機水下機器人對手持監控器發送數據,顯示效果如圖5所示。至此,手持監控器圖形界面就設計完成了,也可根據自己需要接受并顯示的參數來設計圖形用戶界面,以達到最大的美觀效果。
4 結 語
文章介紹了一種新穎的遠程手持監控器制作方法。以ARM?Linux嵌入式系統為基本平臺,利用同樣具有跨平臺特性的QT軟件來實現界面的設計與數據的讀取。該方法簡單,可靠,易學,并且成本低廉,可以快速的繪制漂亮的圖形界面,為以后手持式的遠程監控設備奠定了基礎,可以擺脫大型監控設備攜帶不方便的束縛。由于開源的Linux系統和QT軟件都具有較強的可移植性,該方法在遠程手持監控設備中將會有更廣泛的應用前景。
參考文獻
[1] 郭晶.潛水器用遠程遙控系統研究[D].大連:大連海事大學,2010.
[2] 謝偉.嵌入式Linux系統工程師標準培訓教材:基礎篇[M].北京:清華大學出版社,2011.
[3] 陳章龍.嵌入式技術與系統:Intel XScale結構與開發[M].北京:北京航空航天大學出版社,2003.
[4] 郭巧云,許雪梅,李岸.基于ARM11的無線視頻監控系統的設計[J].計算機測量與控制,2010,18(8):1?2.
[5] GUO Guang?ming. Design of embedded remote video monitoring system based on S3C2410A [J]. Science and Technology Management Research, 2010, 263(14): 233?235.
[6] 吳子平,徐愛鈞.基于Qt/Embedded的嵌入式GUI的研究與構建[J].電腦開發與應用,2012,25(1):1?2.
[7] 華晶,賈晶,何火嬌.基于Qt/Embedded的嵌入式GUI在ARM上的移植[J].計算機與現代化,2009(10):20?22.
[8] HUAI Wei?hua, ZHANG Yu?jie, TIAN Ze. The TTY device driver of the embedded linux operating system [J]. Computer Applications, 2009, 28(1): 42?44.
[9] 唐浩,代少生.Qt/Embedded在S3C2440平臺上的移植與開發[J]. 電視技術,2010(34):9?11.
[10] BLANCHETTE Jasmin, SUMMERFIELD Mark. C++ GUI Programming with Qt4 [M]. 2版.北京:電子工業出版社,2008.