新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于Qt實(shí)現(xiàn)USB CDC便攜式設(shè)備串口通信客戶端設(shè)計(jì)

基于Qt實(shí)現(xiàn)USB CDC便攜式設(shè)備串口通信客戶端設(shè)計(jì)

作者:張熹 時(shí)間:2015-05-14 來源:電子產(chǎn)品世界 收藏
編者按:為實(shí)現(xiàn)上位機(jī)Linux系統(tǒng)的Qt應(yīng)用程序與下位機(jī)USB CDC便攜式設(shè)備之間的串口通信,本課題采用USB CDC類協(xié)議,并根據(jù)協(xié)議在Linux下編寫設(shè)備驅(qū)動(dòng)程序,同時(shí),搭建Linux-QT應(yīng)用平臺(tái)利用QT可視化的圖形界面及豐富的圖形庫,設(shè)計(jì)并制作上位機(jī)應(yīng)用程序圖形界面,并根據(jù)Linux下串口通信的應(yīng)用層協(xié)議,最終實(shí)現(xiàn)了在QT界面上實(shí)時(shí)顯示便攜式設(shè)備的數(shù)據(jù)、狀態(tài)和控制便攜式設(shè)備。該方法簡單、可靠、便于實(shí)際工程應(yīng)用,解決了安裝有Linux操作系統(tǒng)的上位機(jī)用戶與便攜式設(shè)備通信不方便的問題。因此,本課題對(duì)USB

2.2 界面設(shè)計(jì)

本文引用地址:http://butianyuan.cn/article/273269.htm

  界面設(shè)計(jì)是基于C++語言開發(fā)的,類似于Windows下VC++的MFC開發(fā),而的界面都是功能模塊化的,開發(fā)起來更加簡潔和方便。本課題中設(shè)計(jì)的QT界面,是通過QT界面設(shè)計(jì)向?qū)Т罱ń缑婵蚣軄硗瓿傻?,界面框架MainWindow被分為四個(gè)部分:centralWidget、menuBar、mainToolBar和statusBar,添加需要的元件組件和信息內(nèi)容到各個(gè)部分,之后編寫元件之間的邏輯程序和調(diào)用通信接口函數(shù)。另外,在設(shè)計(jì)過程中使用到了類QMainWindow、類QDialog和類QFrame,這三個(gè)類是QT界面開發(fā)過程中最常用的,它們?nèi)坷^承自QWidget[6] ,如圖3所示。

3 QT的實(shí)現(xiàn)

3.1 的原理

  因?yàn)樵赒T中沒有提供串口控制類,所以需要使用一個(gè)由第三方提供的QextSerialPort類來實(shí)現(xiàn)。由于QextSerialPort類提供了兩個(gè)子類:QextSerialBase類和Posix_QextSerialPort類,分別用于Windows平臺(tái)和平臺(tái)運(yùn)行。這里在下使用Posix_QextSerialPort類,該類關(guān)系圖如圖3所示。

  可以看到,QextSerialPort類繼承自 QT 軟件自帶的QIODevice類,所以該類中的一些函數(shù)可以直接調(diào)用。其中,Posix_QextSerialPort繼承自QextSerialBase,Posix_QextSerialPort類添加了Linux平臺(tái)下操作串口的一些功能。在QextSerialBase類中涉及到一個(gè)枚舉變量QueryMode,QueryMode指的是讀取串口的方式,它提供兩個(gè)值:查詢方式Polling和事件驅(qū)動(dòng)方式EventDriven[7] 。其中,事件驅(qū)動(dòng)方式EventDriven利用事件處理串口的讀取,一旦有數(shù)據(jù)到來,就會(huì)發(fā)出readyRead信號(hào),這樣可以關(guān)聯(lián)該信號(hào)來讀取串口的數(shù)據(jù)。在此方式下,串口的讀寫是異步的,調(diào)用讀寫函數(shù)會(huì)立即返回,就不會(huì)凍結(jié)調(diào)用線程。而查詢方式Polling則不同,讀寫函數(shù)是同步執(zhí)行的,信號(hào)在這種模式下無法工作,而且有些操作也無法實(shí)現(xiàn),然而這種模式下的開銷較小。這樣就需要建立定時(shí)器來讀取串口的數(shù)據(jù)。本文介紹的就是用Polling方式來進(jìn)行串口通信,因?yàn)閘inux下串口通信僅支持此種模式。

3.2 Polling方式串口通信的實(shí)現(xiàn)過程

  由于Polling方式進(jìn)行串口通信需要設(shè)置一個(gè)內(nèi)部定時(shí)器,通過QT自有的信號(hào)與槽機(jī)制,將定時(shí)器超時(shí)信號(hào)與觸發(fā)函數(shù)關(guān)聯(lián),每到定時(shí)器設(shè)定的時(shí)間后,串口就讀取一次數(shù)據(jù)或者發(fā)送一次用戶數(shù)據(jù),這里以讀操作為例進(jìn)行說明,關(guān)鍵代碼及注釋如下:

  #define TIME_OUT 10 //TIME_OUT是串口讀延時(shí)

  #define TIMER_INTERVAL 200 //讀取串口緩存的延時(shí)200ms

  void MainWindow::startInit() //初始化

  { …

  timerdly = TIMER_INTERVAL; //初始化讀取定時(shí)器間隔

  timer = new QTimer(this); //設(shè)置讀取計(jì)時(shí)器

  connect(timer, SIGNAL(timeout()), this, SLOT(readMyCom())); //信號(hào)和槽函數(shù)關(guān)聯(lián),延時(shí)10ms,進(jìn)行讀串口操作

  }

  void MainWindow::on_Open_triggered() //打開串口

  { …

  myCom = new Posix_QextSerialPort(“/dev/ACM0″, QextSerialBase::Polling); //這里采用Polling方式,設(shè)備為類下的ACM0

  timer->start(timerdly); //開啟讀取定時(shí)器

  myCom->setTimeout(TIME_OUT); //設(shè)置延時(shí)

  }

  具體串口通信的流程圖如圖4所示。

3.3 QT串口通信在Linux下的實(shí)現(xiàn)

  在熟知QT下串口通信的原理后,在QT軟件中建立工程,通過調(diào)用QextSerialBase和Posix_QextSerialPort兩個(gè)類,利用Textbrowser、Label和Button等元件函數(shù)來實(shí)現(xiàn)QT界面的編寫,在PC機(jī)上調(diào)試Debug版本,調(diào)試成功后,可以發(fā)布Release版本,運(yùn)行效果如圖5、6所示。至此,上位機(jī)Linux系統(tǒng)的圖形界面就設(shè)計(jì)完成了,也可根據(jù)自己的需要和使用習(xí)慣來設(shè)計(jì)圖形用戶界面,以達(dá)到最大的美觀效果和便捷性。


4 結(jié)語

  文章介紹了實(shí)現(xiàn)USB 類設(shè)備通信實(shí)現(xiàn)和制作QT串口通信界面的方法。該方法簡單,可靠,易學(xué),并且成本低廉。同時(shí),本驅(qū)動(dòng)軟件在Linux 2.6內(nèi)核版本下通過了專業(yè)的測試和驗(yàn)證,并應(yīng)用到公達(dá)數(shù)碼的POS58和POS80等型號(hào)的打印機(jī)產(chǎn)品中,該公司使用本驅(qū)動(dòng)軟件的打印機(jī)產(chǎn)品已廣泛地應(yīng)用在餐飲行業(yè)及其他領(lǐng)域。另一方面,由于Linux系統(tǒng)和QT軟件均具有較強(qiáng)的可移植性,可以將本界面程序移植到手持設(shè)備端,這樣將會(huì)有更加廣闊的市場前景。

參考文獻(xiàn):

  [1]李英偉,王成儒,練秋生,等.USB2.0原理與工程開發(fā)(第二版)[M].北京:國防工業(yè)出版社,2007

  [2]張弘.USB接口設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2002

  [3]郝瑩,孫宏軍.基于協(xié)議的儀表通用USB接口設(shè)計(jì)[C]. 第25屆中國控制與決策會(huì)議論文集,2013.05

  [4]吳明琪,馬潮.嵌入式系統(tǒng)的USB虛擬串口設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005.(04):62-63+66

  [5]www.usb.org,USB Class Definitions for Communication Devices[J], Revision 1.2 2007

  [6]霍亞飛.QT Creator 快速入門[M].北京:北京航空航天大學(xué)出版社,2012

  [7]劉依晗,丑武勝,董明杰.基于QT/E串口通信的手持監(jiān)控器[M].現(xiàn)代電子技術(shù),2013,36(20):110-112

  [8]霍亞飛.Qt及Qt Quick開發(fā)實(shí)戰(zhàn)精解[M].北京:北京航空航天大學(xué)出版社,2012

  [9]溫卡特斯瓦蘭 著,宋寶華 等譯.精通Linux設(shè)備驅(qū)動(dòng)程序開發(fā)[M].北京:人民郵電出版社,2010

  [10]Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini. Linux Device Drivers[J], 3rd Edition.O'Reilly,2005.02

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關(guān)文章:linux教程


c++相關(guān)文章:c++教程


數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理



上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉