基于Qt實現USB CDC便攜式設備串口通信客戶端設計
2.2 QT界面設計
本文引用地址:http://www.j9360.com/article/273269.htm QT界面設計是基于C++語言開發的,類似于Windows下VC++的MFC開發,而QT的界面都是功能模塊化的,開發起來更加簡潔和方便。本課題中設計的QT界面,是通過QT界面設計向導搭建界面框架來完成的,界面框架MainWindow被分為四個部分:centralWidget、menuBar、mainToolBar和statusBar,添加需要的元件組件和信息內容到各個部分,之后編寫元件之間的邏輯程序和調用通信接口函數。另外,在設計過程中使用到了類QMainWindow、類QDialog和類QFrame,這三個類是QT界面開發過程中最常用的,它們全部繼承自QWidget[6] ,如圖3所示。
3 QT串口通信的實現
因為在QT中沒有提供串口控制類,所以需要使用一個由第三方提供的QextSerialPort類來實現串口通信。由于QextSerialPort類提供了兩個子類:QextSerialBase類和Posix_QextSerialPort類,分別用于Windows平臺和Linux平臺運行。這里在Linux下使用Posix_QextSerialPort類,該類關系圖如圖3所示。
可以看到,QextSerialPort類繼承自 QT 軟件自帶的QIODevice類,所以該類中的一些函數可以直接調用。其中,Posix_QextSerialPort繼承自QextSerialBase,Posix_QextSerialPort類添加了Linux平臺下操作串口的一些功能。在QextSerialBase類中涉及到一個枚舉變量QueryMode,QueryMode指的是讀取串口的方式,它提供兩個值:查詢方式Polling和事件驅動方式EventDriven[7] 。其中,事件驅動方式EventDriven利用事件處理串口的讀取,一旦有數據到來,就會發出readyRead信號,這樣可以關聯該信號來讀取串口的數據。在此方式下,串口的讀寫是異步的,調用讀寫函數會立即返回,就不會凍結調用線程。而查詢方式Polling則不同,讀寫函數是同步執行的,信號在這種模式下無法工作,而且有些操作也無法實現,然而這種模式下的開銷較小。這樣就需要建立定時器來讀取串口的數據。本文介紹的就是用Polling方式來進行串口通信,因為linux下串口通信僅支持此種模式。
3.2 Polling方式串口通信的實現過程
由于Polling方式進行串口通信需要設置一個內部定時器,通過QT自有的信號與槽機制,將定時器超時信號與觸發函數關聯,每到定時器設定的時間后,串口就讀取一次數據或者發送一次用戶數據,這里以讀操作為例進行說明,關鍵代碼及注釋如下:
#define TIME_OUT 10 //TIME_OUT是串口讀延時
#define TIMER_INTERVAL 200 //讀取串口緩存的延時200ms
void MainWindow::startInit() //初始化
{ …
timerdly = TIMER_INTERVAL; //初始化讀取定時器間隔
timer = new QTimer(this); //設置讀取計時器
connect(timer, SIGNAL(timeout()), this, SLOT(readMyCom())); //信號和槽函數關聯,延時10ms,進行讀串口操作
}
void MainWindow::on_Open_triggered() //打開串口
{ …
myCom = new Posix_QextSerialPort(“/dev/ACM0″, QextSerialBase::Polling); //這里采用Polling方式,設備為CDC類下的ACM0
timer->start(timerdly); //開啟讀取定時器
myCom->setTimeout(TIME_OUT); //設置延時
}
具體串口通信的流程圖如圖4所示。
3.3 QT串口通信在Linux下的實現
在熟知QT下串口通信的原理后,在QT軟件中建立工程,通過調用QextSerialBase和Posix_QextSerialPort兩個類,利用Textbrowser、Label和Button等元件函數來實現QT界面的編寫,在PC機上調試Debug版本,調試成功后,可以發布Release版本,運行效果如圖5、6所示。至此,上位機Linux系統的圖形界面就設計完成了,也可根據自己的需要和使用習慣來設計圖形用戶界面,以達到最大的美觀效果和便捷性。
4 結語
文章介紹了實現USB CDC類設備通信實現和制作QT串口通信界面的方法。該方法簡單,可靠,易學,并且成本低廉。同時,本驅動軟件在Linux 2.6內核版本下通過了專業的測試和驗證,并應用到公達數碼的POS58和POS80等型號的打印機產品中,該公司使用本驅動軟件的打印機產品已廣泛地應用在餐飲行業及其他領域。另一方面,由于Linux系統和QT軟件均具有較強的可移植性,可以將本界面程序移植到手持設備端,這樣將會有更加廣闊的市場前景。
參考文獻:
[1]李英偉,王成儒,練秋生,等.USB2.0原理與工程開發(第二版)[M].北京:國防工業出版社,2007
[2]張弘.USB接口設計[M].西安:西安電子科技大學出版社,2002
[3]郝瑩,孫宏軍.基于CDC協議的儀表通用USB接口設計[C]. 第25屆中國控制與決策會議論文集,2013.05
[4]吳明琪,馬潮.嵌入式系統的USB虛擬串口設計[J].單片機與嵌入式系統應用,2005.(04):62-63+66
[5]www.usb.org,USB Class Definitions for Communication Devices[J], Revision 1.2 2007
[6]霍亞飛.QT Creator 快速入門[M].北京:北京航空航天大學出版社,2012
[7]劉依晗,丑武勝,董明杰.基于QT/E串口通信的手持監控器[M].現代電子技術,2013,36(20):110-112
[8]霍亞飛.Qt及Qt Quick開發實戰精解[M].北京:北京航空航天大學出版社,2012
[9]溫卡特斯瓦蘭 著,宋寶華 等譯.精通Linux設備驅動程序開發[M].北京:人民郵電出版社,2010
[10]Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini. Linux Device Drivers[J], 3rd Edition.O'Reilly,2005.02
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)linux相關文章:linux教程
c++相關文章:c++教程
數字通信相關文章:數字通信原理
通信相關文章:通信原理
評論