<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          2.2 界面設(shè)計

          本文引用地址:http://www.ex-cimer.com/article/273269.htm

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

          3 QT的實現(xiàn)

          3.1 的原理

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

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

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

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

            #define TIME_OUT 10 //TIME_OUT是串口讀延時

            #define TIMER_INTERVAL 200 //讀取串口緩存的延時200ms

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

            { …

            timerdly = TIMER_INTERVAL; //初始化讀取定時器間隔

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

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

            }

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

            { …

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

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

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

            }

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

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

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


          4 結(jié)語

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

          參考文獻:

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

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

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

            [4]吳明琪,馬潮.嵌入式系統(tǒng)的USB虛擬串口設(shè)計[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ā)實戰(zhàn)精解[M].北京:北京航空航天大學(xué)出版社,2012

            [9]溫卡特斯瓦蘭 著,宋寶華 等譯.精通Linux設(shè)備驅(qū)動程序開發(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 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();