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

        ?

        Qt/Embedded串口類的設(shè)計(jì)及應(yīng)用

        2010-03-03 03:31:16陳旭紅高文學(xué)
        關(guān)鍵詞:定義信號(hào)設(shè)備

        陳旭紅,高文學(xué)

        (1.湖北汽車工業(yè)學(xué)院,湖北 十堰 442002;2.陜西廣播電影電視局,陜西 延安 716000)

        Qt/Embedded串口類的設(shè)計(jì)及應(yīng)用

        陳旭紅1,高文學(xué)2

        (1.湖北汽車工業(yè)學(xué)院,湖北 十堰 442002;2.陜西廣播電影電視局,陜西 延安 716000)

        針對(duì)Qt/Embedded類中沒有提供串口基礎(chǔ)類的現(xiàn)狀,研究了Qt/Embedded與串口信息交互的方法,并給出了Qt/Embedded串口類的實(shí)現(xiàn)及Qt/Embedded串口類在工業(yè)控制中的應(yīng)用實(shí)例。

        Qt/Embedded;串口;信息交互

        在工業(yè)控制項(xiàng)目當(dāng)中經(jīng)常使用Qt/Embedded類庫(kù)開發(fā)界面控制應(yīng)用程序,作為應(yīng)用控制端一般使用RS232總線與控制設(shè)備進(jìn)行通信,但是在Qt/ Embedded類庫(kù)中沒有提供串口的基礎(chǔ)類,這就需要在項(xiàng)目應(yīng)用中編寫基于Qt/Embedded的串口基礎(chǔ)類。本文對(duì)基于Qt/Embedded的串口基礎(chǔ)類進(jìn)行類定義及應(yīng)用測(cè)試。

        1 Qt/Embedded簡(jiǎn)介[1]

        Qt/Embedded是Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt版本,與X11版本的Qt在最大程度上接口兼容,采用幀緩存(framebuffer)作為底層圖形接口。Qt/Embedded類庫(kù)完全采用C++封裝,并且有著豐富的控件資源以及較好的可移植性,大范圍的Qt/Embedded API可用于多種開發(fā)項(xiàng)目。在工業(yè)控制項(xiàng)目當(dāng)中會(huì)使用大量的串口通信,但是Qt/ Embedded沒有提供與串口硬件的接口。

        Qt/Embedded的底層圖形引擎基于 framebuffer。framebuffer是一種驅(qū)動(dòng)程序接口,它將顯示設(shè)備抽象為幀緩沖區(qū)。該驅(qū)動(dòng)程序的設(shè)備文件一般是/dev/fb0、/dev/fb1等。對(duì)用戶而言,它和/dev下的其他設(shè)備沒有什么區(qū)別,用戶可以把framebuffer看成一塊內(nèi)存,既可以從這塊內(nèi)存中讀取數(shù)據(jù),也可以向其中寫入數(shù)據(jù),而寫操作立即反應(yīng)在屏幕上。Qt/Embedded是 Qt的面向嵌入式應(yīng)用的簡(jiǎn)化版本,為運(yùn)行Qt/Embedded,嵌入式Linux內(nèi)核要支持framebuffer。

        它包括一組完備的GUI類、操作系統(tǒng)封裝、數(shù)據(jù)結(jié)構(gòu)類、功能類和組合類。大部分Qt的應(yīng)用程序可以經(jīng)過簡(jiǎn)單的編譯與重設(shè)窗口大小移植到Qt/ Embedded。Qt/Embedded的實(shí)現(xiàn)結(jié)構(gòu)如圖1所示。

        圖1 Qt/Embedded實(shí)現(xiàn)結(jié)構(gòu)圖

        從Qt/Embedded的結(jié)構(gòu)中可以看出,Qt/Embedded支持鼠標(biāo)、鍵盤、觸摸屏和網(wǎng)絡(luò)等輸入輸出接口,但是不具有串口基礎(chǔ)類。

        在Qt中,對(duì)象間通過信號(hào)和槽的機(jī)制實(shí)現(xiàn)彼此通信。信號(hào)/槽機(jī)制是Qt的核心機(jī)制,是一種高級(jí)接口,主要應(yīng)用于對(duì)象之間的通信。Qt的信號(hào)/槽機(jī)制獨(dú)立于標(biāo)準(zhǔn)的C/C++語(yǔ)言。在Qt中,從QObject或其子類(例如Qwidget)派生的類可擁有自己的信號(hào)和槽。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射出去,從而實(shí)現(xiàn)了信息封裝,以確保對(duì)象被當(dāng)作軟件組件來使用。槽用于接收信號(hào),體現(xiàn)為普通的對(duì)象成員函數(shù)的形式。槽和信號(hào)的連接由程序設(shè)計(jì)者完成,只有當(dāng)設(shè)計(jì)者利用connect()將信號(hào)和槽連接起來后,信號(hào)和槽之間才會(huì)有上述的通信。信號(hào)和槽的機(jī)制使得各個(gè)對(duì)象之間的協(xié)同工作變得十分簡(jiǎn)單,在本串口類設(shè)計(jì)中就使用了Qt的信號(hào)和槽的機(jī)制(見3.3節(jié))。

        2 Qt/Embedded使用串口的方法

        在Qt/Embedded 2.3.10在開發(fā)中使用Linux作為操作系統(tǒng),Linux操作系統(tǒng)對(duì)網(wǎng)絡(luò)和硬件操作都具有很好的支持。

        2.1 使用Qt/Embedded和C語(yǔ)言操作串口

        Qt/Embedded對(duì)網(wǎng)絡(luò)具有良好的支持,而Linux下的C語(yǔ)言對(duì)網(wǎng)絡(luò)和硬件都有很好的支持,因此可以使用C語(yǔ)言建立TCP Server,Qt/Embedded使用網(wǎng)絡(luò)接口與TCP Server連接,通過C語(yǔ)言的串口操作來完成Qt/Embedded對(duì)串口的操作[2]。其操作結(jié)構(gòu)圖如圖2所示。

        此方法比較復(fù)雜,需要定義內(nèi)部通信協(xié)議,故一般不使用這種方法。

        2.2 使用Qt/Embedded直接操作

        Qt/Embedded類庫(kù)完全采用C++封裝,但是支持使用Linux標(biāo)準(zhǔn)C語(yǔ)言類庫(kù),可以在Qt/Embedded應(yīng)用程序中使用Linux標(biāo)準(zhǔn)C語(yǔ)言類庫(kù)對(duì)串口進(jìn)行操作。

        圖2 Qt/Embedded操作結(jié)構(gòu)圖

        3 串口類的設(shè)計(jì)

        C語(yǔ)言對(duì)硬件的操作一般使用阻塞讀取和查詢的方法讀取數(shù)據(jù),而在Qt/Embedded中使用信號(hào)與槽無(wú)阻塞操作。因此要在Qt/Embedded中高效的運(yùn)行程序,必須把對(duì)串口的操作設(shè)計(jì)成無(wú)阻塞操作[3]。在Qt的串口類設(shè)計(jì)中,串口傳輸?shù)牟铄e(cuò)控制由硬件來保證;而緩沖區(qū)的溢出根據(jù)應(yīng)用而定,當(dāng)檢測(cè)到緩沖不足時(shí),按照一定的比例自動(dòng)增大緩沖區(qū),從而避免了緩沖區(qū)溢出。

        3.1 設(shè)計(jì)分析

        要把串口類設(shè)計(jì)成無(wú)阻塞操作的類,就必須像Qt/Embedded中QSocket類一樣提供void QSocket:: readyRead()信號(hào)供應(yīng)用程序使用,以讀取信息。為了類似實(shí)現(xiàn)void QSocket::readyRead()信號(hào),可以借助QSocketNotifier類。在Qt/Embedded 2.3.10版本中QSocketNotifier支持對(duì)所有套接字的回調(diào),QSocketNotifier支持對(duì)設(shè)備的讀、寫和錯(cuò)誤狀態(tài)的回調(diào)。其原型為

        3.2 類的定義

        圖3 QSerialSt定義圖

        為更加方便設(shè)置串口參數(shù),定義了串口參數(shù)結(jié)構(gòu)體QSerialSt,QSerialSt定義如圖3所示。

        QSerial類的結(jié)構(gòu)如圖4所示,串口配置主要由init()函數(shù)傳遞的串口參數(shù)結(jié)構(gòu)體QSerialSt來完成。QSerial類的寫串口可以調(diào)用writeBlock()函數(shù),信息讀取可以使用readyRead()信號(hào)。

        圖4 QSerial類的結(jié)構(gòu)圖

        3.3 類的實(shí)現(xiàn)

        QSerial的構(gòu)造函數(shù)QSerial()對(duì)變量進(jìn)行初始化,析構(gòu)函數(shù)~QSerial()關(guān)閉套接字。串口的初始化主要工作流程圖如圖5所示。

        圖5 串口的初始化主要工作流程圖

        初始化成功后可以產(chǎn)生一個(gè)套接字,并返回一個(gè)正確碼。配置串口的過程主要有以下步驟。

        1)調(diào)用openDev()函數(shù)打開串口設(shè)備,設(shè)備名可以從參數(shù)傳遞,打開設(shè)備成功后進(jìn)行下一步,如果打開設(shè)備失敗返回錯(cuò)誤碼;

        2)調(diào)用setSpeed()函數(shù)設(shè)置串口波特率;

        3)調(diào)用setParity函數(shù)設(shè)備奇偶校驗(yàn),如果設(shè)置成功返回正確碼,如果不成功返回錯(cuò)誤碼。

        信號(hào) readyRead()由槽 dataRead()觸發(fā),而dataRead()連接在QSocketNotifier上,當(dāng)設(shè)備有數(shù)據(jù)可讀時(shí)會(huì)回調(diào)dataRead()函數(shù)讀取數(shù)據(jù)并觸發(fā)信號(hào)readyRead(),通知上層讀取數(shù)據(jù)。代碼如下:

        4 應(yīng) 用

        4.1 使用QSerial類的主要步驟

        1)初始化QSerialSt結(jié)構(gòu)體,設(shè)置串口信息。

        2)調(diào)用init()函數(shù)傳遞初始化好的QSerialSt結(jié)構(gòu)體進(jìn)行串口設(shè)置,檢測(cè)返回值判斷初始化是否成功,并做相應(yīng)的處理。

        3)初始化成功后調(diào)用setNotifier()函數(shù),設(shè)置串口回調(diào)函數(shù)。

        4)連接QSerial類的readyRead()信號(hào),供應(yīng)用類讀取數(shù)據(jù)。

        4.2 QSerial類應(yīng)用示例代碼

        4.3 QSerial類應(yīng)用實(shí)例

        圖6 車載顯示終端主界面

        車載顯示終端中使用QSerial()串口類,完成了顯示終端與下位機(jī)通信的串口通信。圖6是車載顯示終端主界面,可以實(shí)現(xiàn)的工作主要包括:1)刷新數(shù)據(jù)顯示:需要刷新的數(shù)據(jù)包括速度、限速、信號(hào)機(jī)編號(hào)和類型、距信號(hào)機(jī)距離、時(shí)間等;2)刷新狀態(tài)指示顯示:包括當(dāng)前色燈以及屏幕右邊的各種狀態(tài)指示;3)刷新圖形顯示:根據(jù)當(dāng)前的數(shù)據(jù),畫出前方4 km和后方1 km的速度、限速曲線以及平縱斷面和道橋隧等。4)車輛位置顯示:主界面左側(cè)約1/5處有一條垂直分割線,表示此處為當(dāng)前機(jī)車位置。

        5 總 結(jié)

        本文定義的QSerial類具有易于使用、占用較少的CPU資源、接口規(guī)范、串口配置過程簡(jiǎn)單和數(shù)據(jù)讀取容易等特點(diǎn)。QSerial類已在多個(gè)工業(yè)控制項(xiàng)目中使用,經(jīng)過反復(fù)的實(shí)驗(yàn)測(cè)試,QSerial類在Linux 2.6.21內(nèi)核和Qt/Embedded 2.3.10的環(huán)境下能夠長(zhǎng)時(shí)間穩(wěn)定工作。

        [1]QT2.3白皮書[EB/OL].[2010-10-28].http://www.trolltech.com.

        [2]于明儉,陳向陽(yáng),方 漢.LINUX程序設(shè)計(jì)權(quán)威指南[M].北京:機(jī)械工業(yè)出版社,2001.

        [3]袁鵬飛.24小時(shí)學(xué)通qt編程[M].北京:人民郵電出版社,2000.

        Design and Application of Qt/Embedded Serial Port Class

        Chen Xuhong1,Gao Wenxue2
        (1.Hubei Automotive Industries Institute,Shiyan 442002,China;2.Radio Film&TV Bureau of Shaanxi Province,Yan’an 716000,China)

        The information interaction between Qt/Embedded and serial port was studied.The serial port class was realized in Qt/Embedded.An applying example of the serial port class in the industrial control was given.

        Qt/Embedded;serial port;information interaction

        TN316.2

        A

        1008-5483(2010)04-0051-03

        10.3969/j.issn.1008-5483.2010.04.013

        2010-10-28

        陳旭紅(1970-),男,湖北應(yīng)城人,碩士,從事電子技術(shù)方面的研究。

        猜你喜歡
        定義信號(hào)設(shè)備
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        信號(hào)
        鴨綠江(2021年35期)2021-04-19 12:24:18
        完形填空二則
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        基于FPGA的多功能信號(hào)發(fā)生器的設(shè)計(jì)
        電子制作(2018年11期)2018-08-04 03:25:42
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        基于LabVIEW的力加載信號(hào)采集與PID控制
        成功的定義
        山東青年(2016年1期)2016-02-28 14:25:25
        原來他們都是可穿戴設(shè)備
        修辭學(xué)的重大定義
        色呦呦九九七七国产精品| av天堂线上| 精品在线亚洲一区二区三区| 操风骚人妻沉沦中文字幕| 中国女人做爰视频| 国产又黄又爽视频| 日本在线视频二区一区| 亚洲成人中文字幕在线视频| 精品国产一区av天美传媒| 免费毛片在线视频| 亚洲成人免费久久av| 亚洲男人天堂av在线| 日韩黄色大片免费网站| 国产日产精品_国产精品毛片| 麻豆精品传媒一二三区| 亚洲肥老熟妇四十五十路在线| 日中文字幕在线| 亚洲区一区二区三区四| 在线人成视频播放午夜| 国产午夜毛片v一区二区三区| 亚洲av之男人的天堂| 最近亚洲精品中文字幕| 24小时免费在线观看av| 免费拍拍拍网站| 国产精品18久久久久久不卡中国| 亚洲国产精品国自产拍av在线| 亚洲美女毛片在线视频| 无码少妇精品一区二区免费动态 | 亚洲日韩久久综合中文字幕| 中文幕无线码中文字蜜桃| 魔鬼身材极品女神在线| 亚洲av熟女传媒国产一区二区| 久久人妻无码一区二区| 精品高潮呻吟99av无码视频| 国产在线精品亚洲视频在线 | 日本xxxx色视频在线观看| 精品人妻系列无码人妻免费视频| 无遮高潮国产免费观看韩国| 在线播放国产自拍av| 欧美a级情欲片在线观看免费| 亚洲VA欧美VA国产VA综合|