亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux的Qt串口服務(wù)器設(shè)計(jì)

        2016-09-18 08:46:57趙仁濤田曉曉曹慧芳
        山西電子技術(shù) 2016年4期
        關(guān)鍵詞:服務(wù)器端串口嵌入式

        趙仁濤,田曉曉,曹慧芳

        (北方工業(yè)大學(xué) 機(jī)械與材料工程學(xué)院,北京 100144)

        ?

        基于Linux的Qt串口服務(wù)器設(shè)計(jì)

        趙仁濤,田曉曉,曹慧芳

        (北方工業(yè)大學(xué) 機(jī)械與材料工程學(xué)院,北京 100144)

        串口通信廣泛運(yùn)用在工業(yè)自動化,串口與TCP/IP網(wǎng)絡(luò)的結(jié)合能夠?qū)崿F(xiàn)遠(yuǎn)程控制以及數(shù)據(jù)采集等功能。本文基于Linux環(huán)境,利用Qt Create設(shè)計(jì)了串口服務(wù)器,實(shí)現(xiàn)了串口到以太網(wǎng)的數(shù)據(jù)轉(zhuǎn)發(fā)功能,并給出了程序的設(shè)計(jì)要點(diǎn)。最后利用交叉編譯器將其移植到嵌入式系統(tǒng)平臺上。

        Linux;Qt Create;串口;TCP/IP網(wǎng)絡(luò);嵌入式系統(tǒng)

        大多數(shù)工業(yè)設(shè)備都采用串口通信方式,但是串口不具備遠(yuǎn)程數(shù)據(jù)傳輸能力,所以有必要設(shè)計(jì)一種中間軟件將串口通信轉(zhuǎn)化為網(wǎng)絡(luò)通信。既兼顧了工業(yè)設(shè)備的串口通信,又可以通過網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程控制和數(shù)據(jù)傳輸。

        近年來,隨著嵌入式系統(tǒng)的發(fā)展,這種中間設(shè)備的開發(fā)變的簡單,易行。在嵌入式Linux系統(tǒng)中串口通信和網(wǎng)絡(luò)編程都是通過具體的API接口實(shí)現(xiàn),而Qt把有關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)都封裝成類,實(shí)現(xiàn)了很大程度的模塊化,使軟件的開發(fā)變的簡潔,高效,使用開發(fā)十分便利。

        1 串口通信設(shè)計(jì)

        串口是一種常見的通用協(xié)議,也是儀器儀表設(shè)備的通用協(xié)議,串口協(xié)議在工業(yè)中的使用十分廣泛。串口通信十分簡單:按位發(fā)送和接收字節(jié),雖然相比并行通信慢,但是串口可以同時接收和發(fā)送消息。

        1.1串口通信的幾個重要指標(biāo)

        在串口通信中重要的參數(shù)有波特率,數(shù)據(jù)位,停止位,奇偶校驗(yàn)位。對于串口開發(fā)來說,通過串口連接的設(shè)備這些參數(shù)是必須設(shè)置成匹配的。

        1) 波特率:衡量符號傳輸速率的參數(shù),代表每秒傳輸?shù)谋忍財?shù)。

        2) 數(shù)據(jù)位:表示通信中實(shí)際數(shù)據(jù)的位數(shù)。設(shè)置數(shù)據(jù)位參數(shù)時,應(yīng)當(dāng)按照實(shí)際傳送的數(shù)據(jù)類型來選擇相應(yīng)的位數(shù)。

        3) 停止位:用于表示單個包的最后一位,說明該信息包數(shù)據(jù)完成,典型值為1,1.5,2位。在通信的兩臺設(shè)備出現(xiàn)了時鐘不同步的情況下,給設(shè)備一個校正時鐘同步的機(jī)會。

        4) 奇偶校驗(yàn)位:是一種檢錯方式通過設(shè)置校驗(yàn)位,確保傳輸?shù)臄?shù)據(jù)有偶數(shù)個或奇數(shù)個邏輯高位。

        1.2在Linux系統(tǒng)下使用Qt實(shí)現(xiàn)串口通信

        Qt是1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架[1]。Qt采用信號與槽的方式來實(shí)現(xiàn)對象間的通訊,這種設(shè)計(jì)簡化了程序,避免了大量的指針工作,為編寫程序節(jié)省了大量的空間。Qt Create可以拖拽控件進(jìn)行控件布局進(jìn)行界面的設(shè)計(jì)[2]。由于Qt是跨平臺開發(fā)工具的開源項(xiàng)目,所以可以在PC機(jī)上編寫好Qt的應(yīng)用程序,然后通過交叉編譯,生成在開發(fā)板上運(yùn)行的程序。

        由于Qt并沒有特定的串口控制類,如果用Qt編寫串口程序一般使用Stefan Sander和Michal Policht編寫的第三方QextSerialPort類,該類封裝了可移植操作系統(tǒng)接口(POSIX)和Windows系統(tǒng)接口[3]。在posix_qextserialport.cpp,posix_qextserialport.h文件中定義了Posix_QextSerialPort類,qextserialport.cpp和頭文件定義了QextSerialPort類。Posix_QextSerialPort類添加了Linux平臺下操作串口的功能。

        在QextSerialBase類中有一個枚舉變量QueryMode,可以取兩個值Polling和EventDriven。EventDriven是采用事件驅(qū)動處理串口讀取,一旦串口有可讀取的數(shù)據(jù),就會發(fā)出readyRead()信號,在Windows可以為該信號創(chuàng)建槽函數(shù)去讀取串口的消息,但是在Linux下只支持Polling查詢方式。Polling模式查詢是使用輪詢的方法查詢串口,需要開發(fā)人員自己建立定時器來讀取串口數(shù)據(jù)。

        1.3利用Qt Create實(shí)現(xiàn)串口通信

        首先創(chuàng)建工程tcp_serial,將解壓的文件添加到工程中,添加Posix_qextserialport.h頭文件到mainwindow.h文件中,然后添加私有對象:Posix_QextSerialPort *myttyS1;由于 Linux只能使用Polling查詢模式,所以還需要添加定時器QTimer *readTimer;私有對象為讀取串口數(shù)據(jù)發(fā)送超時信號。

        為連接serial按鍵添加私有槽函數(shù)void serial_clicked();為disserial按鍵添加私有槽函數(shù)void disserial_clicked();為讀取串口數(shù)據(jù)添加私有函數(shù)void readmyttyS1()。

        在mainwindow的構(gòu)造函數(shù)中添加設(shè)置串口參數(shù)的代碼(產(chǎn)生serial_clicked信號時完成):

        1) 指定操作的串口對象和Polling查詢模式

        myttyS1 = new

        Posix_QextSerialPort(“/dev/ttyS0”,QextSerial

        Base::Polling);

        2) 打開并設(shè)置串口參數(shù)

        myttyS1->open(QIODevice::ReadWrite);

        3) 打開串口

        myttyS1->setBaudRate(BAUD115200);

        4) 設(shè)置波特率為115200

        myttyS1->setDataBits(DATA_8);

        5) 設(shè)置數(shù)據(jù)位為8

        myttyS1->setParity(PAR_NONE);

        6) 設(shè)置無校驗(yàn)

        myttyS1->setStopBits(STOP_1);

        7) 設(shè)置停止位為1

        disserial_clicked();

        最后,使用myttyS1->close()函數(shù)關(guān)閉串口。

        創(chuàng)建讀取串口的槽函數(shù)

        connect(readTimer,SIGNAL(timeout()),this,SLOT(readmyttyS1()));

        readmyttyS1()函數(shù)利用myttyS1->readAll();語句讀取串口緩沖區(qū)的所有數(shù)據(jù)。如果需要向串口寫數(shù)據(jù)可以使用myttyS1->write();即可向串口寫入數(shù)據(jù)。

        串口工作流程圖如圖1。

        圖1 串口工作流程圖

        通過上面的設(shè)計(jì)可在Linux環(huán)境下完成對串口的讀取功能。

        2 基于TCP/IP的以太網(wǎng)通信設(shè)計(jì)

        基于TCP/IP協(xié)議的以太網(wǎng)應(yīng)用十分廣泛。利用TCP/IP可以進(jìn)行可靠的網(wǎng)絡(luò)通信。TCP/IP實(shí)際上是一組協(xié)議族,分別為傳輸層協(xié)議,網(wǎng)絡(luò)層協(xié)議,每種協(xié)議都提供不同的功能,在網(wǎng)絡(luò)層下的IP協(xié)議提供了基本的命名方法和傳送機(jī)制,通過對數(shù)據(jù)包添加IP協(xié)議頭能夠使該數(shù)據(jù)從一臺因特網(wǎng)主機(jī)往其他主機(jī)發(fā)包(數(shù)據(jù)報)。在傳輸層的TCP協(xié)議是構(gòu)建在IP之上的復(fù)雜協(xié)議,提供了進(jìn)程間可靠的全雙工連接,通過“三次握手”為網(wǎng)絡(luò)傳輸數(shù)據(jù)提供更加可靠安全的服務(wù)。

        2.1Linux網(wǎng)絡(luò)通信

        Linux通過套接字實(shí)現(xiàn)網(wǎng)絡(luò)通信。大多數(shù)現(xiàn)代系統(tǒng)上都實(shí)現(xiàn)了套接字接口,通過套接字接口實(shí)現(xiàn)C/S模型如圖2所示。

        客戶端首先使用Socket()函數(shù)創(chuàng)建一個套接字接口,調(diào)用connect()函數(shù)與服務(wù)器連接就可以通過網(wǎng)絡(luò)接收和發(fā)送數(shù)據(jù)了。當(dāng)完成了接收和發(fā)送數(shù)據(jù)最后關(guān)閉程序。

        服務(wù)器端也是通過使用Socket()函數(shù)創(chuàng)建一個套接字接口,然后使用bind()函數(shù)將網(wǎng)絡(luò)地址和端口號綁定在該套接字接口上,通過使用listen()函數(shù)將創(chuàng)建的主動套接字轉(zhuǎn)化成監(jiān)聽套接字,accept()函數(shù)用來接收客戶端的連接請求,成功時返回一個已連接描述符,通過對已連接描述符的讀寫就可以實(shí)現(xiàn)網(wǎng)絡(luò)通信。完成通信后只要close已連接描述符就可以斷開與服務(wù)器的連接了。

        圖2 服務(wù)器-客戶端模型示意圖

        2.2基于Qt的網(wǎng)絡(luò)通信

        QT中提供了QTcpSocket的類和QTcpServer的類編完成網(wǎng)絡(luò)編程,QTcpSocket用來編寫客戶端程序,QTcpServer類用來編寫服務(wù)器端的程序。

        QTcpSocket用來傳輸數(shù)據(jù)流的,尤其適合連續(xù)的數(shù)據(jù)傳輸。在進(jìn)行數(shù)據(jù)傳輸前,需要建立網(wǎng)絡(luò)連接,通過connectToHost()函數(shù)與服務(wù)器進(jìn)行連接。如果連接成功會返回一個connected()信號。連接成功后就可以進(jìn)行讀寫操作了。當(dāng)有新的數(shù)據(jù)到達(dá)時就會收到readyRead()信號。將該信號與讀取信息的槽函數(shù)相連就可以實(shí)現(xiàn)客戶端的信息接收功能。

        QTcpServer用來建立服務(wù)器。首先進(jìn)行端口的監(jiān)聽,當(dāng)有連接請求時會收到newConnection()信號,關(guān)聯(lián)該信號的槽函數(shù)建立連接。一旦有來自客戶端的數(shù)據(jù)就會發(fā)出readyRead()信號,關(guān)聯(lián)該信號進(jìn)行數(shù)據(jù)的接收或根據(jù)接收的數(shù)據(jù)進(jìn)行其他操作。

        2.3服務(wù)器端實(shí)現(xiàn)

        創(chuàng)建tcp_server工程在mainwindow.h中添加私有對象QTcpServer *tcpServer作為監(jiān)聽套接字,添加私有對象QTcpSocket *serverConnect當(dāng)連接后,將連接交給這個對象,由它完成數(shù)據(jù)傳輸工作。

        添加私有槽函數(shù)void acceptConnection()函數(shù),當(dāng)有新的連接時接受該連接。添加私有槽函數(shù)void startButton_clicked()函數(shù),使tcpServer開始監(jiān)聽。添加私有槽函數(shù)void disconnect_clicked()函數(shù),關(guān)閉tcpServer。

        在構(gòu)造函數(shù)中完成初始化:

        關(guān)聯(lián)newConnection()信號與槽函數(shù)acceptConnection(), connect(&tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));

        acceptConnection()函數(shù)中使用serverConnect=tcpServer.nextPendingConnection()函數(shù)將網(wǎng)絡(luò)連接交給QTcpSocket對象處理。同時在已連接的后設(shè)置readyRead()信號的槽函數(shù)connect(serverConnect,SIGNAL(readyRead()),this,SLOT(getMessage()));

        getMessage()函數(shù)使用serverConnect->readAll()函數(shù)讀取客戶端發(fā)送的數(shù)據(jù)。

        開始和結(jié)束按鍵槽函數(shù)實(shí)現(xiàn)

        void startButton_clicked()函數(shù)使用tcpServer.listen()函數(shù)實(shí)現(xiàn)監(jiān)聽。

        void disconnect_clicked()函數(shù)使用tcpServer.close()函數(shù)關(guān)閉服務(wù)器。

        如果要向客戶端發(fā)送數(shù)據(jù)可以使用

        QTextStream os(serverConnect);

        os<write()發(fā)送數(shù)據(jù)。

        服務(wù)器端的流程圖如圖3。

        圖3 服務(wù)器端工作流程圖

        通過圖3的流程圖與之前的分析。可以創(chuàng)建服務(wù)器端,使其可以監(jiān)聽網(wǎng)絡(luò)連接,當(dāng)有網(wǎng)絡(luò)連接請求時接受連接請求,并進(jìn)行數(shù)據(jù)的接收和發(fā)送。

        3 功能驗(yàn)證

        在虛擬機(jī)的環(huán)境下創(chuàng)建兩個串口設(shè)備,用以進(jìn)行串口通信,連接選項(xiàng)選擇使用命名的管道,管道名都為.pipecom_1。ttyS2設(shè)置成服務(wù)器,ttyS1設(shè)置成客戶端,另一端都為虛擬機(jī)。用于連接的服務(wù)器ip使用的是Linux下的回環(huán)

        ip地址127.0.0.1,端口使用的是8888。這樣串口通信環(huán)境和以太網(wǎng)通信環(huán)境都已經(jīng)建立。下圖為使用Qt編寫客戶端,服務(wù)器的圖形應(yīng)用程序運(yùn)行效果。運(yùn)行服務(wù)器程序和客戶端程序,測試前在服務(wù)器程序上打開串口,使服務(wù)器處于監(jiān)聽狀態(tài),客戶端連接至服務(wù)器。然后打開終端在終端輸入echo “123abc”>/dev/ttyS2就可以在服務(wù)器和客戶端看到下面的效果,服務(wù)器通過串口接收到了”123abc”,通過以太網(wǎng)發(fā)送給了客戶端,然后在客戶端的窗口顯示出來。

        客戶端與服務(wù)器端運(yùn)行效果如圖4所示。

        圖4 運(yùn)行效果圖

        綜上所述該方法可以實(shí)現(xiàn)串口與網(wǎng)口的通信。在實(shí)際情況下嵌入式系統(tǒng)利用其體積小,能耗低等特點(diǎn)在工控領(lǐng)域占據(jù)了越來越重要的位置。通過Qt編寫的程序利用交叉編譯器可以生成在嵌入式平臺上運(yùn)行的程序[4]。在PC機(jī)上編譯Qt/E的庫文件,將Qt/E的庫放在根文件系統(tǒng)后,就可以在嵌入式平臺上運(yùn)行設(shè)計(jì)的服務(wù)器。

        4 結(jié)束語

        本文介紹了在Linux環(huán)境下通過Qt create編程,實(shí)現(xiàn)了讀取串口數(shù)據(jù),并通過以太網(wǎng)轉(zhuǎn)發(fā)串口數(shù)據(jù)的基本功能,并完成了ARM平臺上的程序移植,且在PC機(jī)上運(yùn)行證明本程序可以完成數(shù)據(jù)轉(zhuǎn)發(fā)的功能。

        [1]張新村,嚴(yán)殊.基于ARM的Linux系統(tǒng)下Qt串口助手的設(shè)計(jì)[J].軟件導(dǎo)刊,2011(8):64-66.

        [2]陳靜.基于Ubuntu13.04系統(tǒng)下QT串口通信設(shè)計(jì)[J].電子世界,2014(18):244.

        [3]楊都,賴東鋒,肖煥明,等.基于ARM-Linux-Qt的空調(diào)集中控制系統(tǒng)設(shè)計(jì)[J].日用電器,2015(8):184-186.

        [4]王浩南,劉益成.基于嵌入式Linux系統(tǒng)下的Qt開發(fā)[J].電腦開發(fā)與應(yīng)用,2010(1):11-13.

        [5]梅小龍.基于Linux/QT的嵌入式管理系統(tǒng)的開發(fā)[D].南京:南京信息工程大學(xué),2014.

        Design of Qt Serial Port Server Base on in Linux OS

        Zhao Rentao, Tian Xiaoxiao, Cao Huifang

        (MechanicalEngineeringDepartment,NorthChinaUniversityofTechnology,Beijing100144,China)

        Serial communication is widely utilized in industrial automation, and the remote control and data acquisition can be realized with the combination of serial and TCP/IP network. A serial server is designed via Qt Create under the Linux OS in the thesis to transmit the data information from serial to Ethernet, and the key of the program is presented. Besides, the program is transported to Embedded System by Cross Compiler.

        Linux; Qt Create; serial communication; TCP/IP network; embedded system

        2016-05-10

        趙仁濤(1970- ),男,副教授,博士研究生,主要從事數(shù)據(jù)處理與系統(tǒng)識別。

        1674- 4578(2016)04- 0063- 03

        TP 31

        A

        猜你喜歡
        服務(wù)器端串口嵌入式
        淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
        搭建基于Qt的嵌入式開發(fā)平臺
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時無線通信
        地礦測繪(2015年3期)2015-12-22 06:27:26
        在Windows中安裝OpenVPN
        Altera加入嵌入式視覺聯(lián)盟
        基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
        倍福 CX8091嵌入式控制器
        自動化博覽(2014年4期)2014-02-28 22:31:15
        蜜桃视频中文字幕一区二区三区| 亚洲av第一页国产精品| 91麻豆国产香蕉久久精品| 被暴雨淋湿爆乳少妇正在播放| 午夜视频一区二区三区在线观看| 欧美激情一区二区三区成人| 三级4级全黄60分钟| 娇柔白嫩呻吟人妻尤物| 中文字幕手机在线精品| 少妇性l交大片7724com| 婷婷色中文字幕综合在线| 亚洲欧美日韩国产综合久| 日韩一级精品亚洲一区二区精品| 久久久久99人妻一区二区三区 | 激情内射亚州一区二区三区爱妻| 亚洲精品成人av观看| 少妇人妻av一区二区三区| 国产精品久久久久久久久绿色| 亚洲欧美日韩精品久久亚洲区| 亚洲色图视频在线观看网站| 国产视频一区2区三区| 亚洲 欧美 日韩 国产综合 在线| 亚洲另类精品无码专区| 谁有在线观看av中文| 青青草小视频在线观看| 中文字幕av免费专区| 欧美日韩精品福利在线观看| 国产精品一区又黄又粗又猛又爽| 久久精品国产成人午夜福利| 大肉大捧一进一出好爽视色大师| 精品午夜一区二区三区久久| 国产人妖伦理视频在线观看| 日本另类αv欧美另类aⅴ| 国产天堂在线观看| 国产一区二区毛片视频| 亚洲国产精品18久久久久久| 国产剧情麻豆女教师在线观看 | 日韩人妻系列在线视频| 精品国产一区二区三区三| 久久久天堂国产精品女人| 国产v精品成人免费视频400条|