版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Linux下的串口通信)摘要:I/O終端現(xiàn)在有著非常廣泛的使用,使用時也是相當(dāng)?shù)膹?fù)雜,其中的串口通信應(yīng)用在各個領(lǐng)域,尤其是在嵌入式設(shè)備的開發(fā)和通信過程中獲得了廣泛的應(yīng)用,在本文中選擇使用了RS-485串行通信協(xié)議,并且在Linux的環(huán)境下,使用POSIX編程標(biāo)準(zhǔn),編寫了可以在Linux環(huán)境下運行的RS-485串口通信程序,并且給出了一個使用RS-485串口通信的應(yīng)用。關(guān)鍵詞:Linux;串口;RS-485TheserialcommunicationinlinuxAbstract:I/Oterminalsnowhaveaverywiderangeofuse,isalsoquitecomplextouse,inwhichserialcommunicationapplicationsinvariousfields,especiallyinthedevelopmentofembeddeddevicesandcommunicationprocesshasbeenwidelyused,inthisarticlechosetousetheRS-485Serialcommunicationprotocol,andintheLinuxenvironment,UsingPOSIXprogrammingStandard,theRS-485serialcommunicationprogramwhichcanruninLinuxenvironmentiswritten,andanapplicationusingRS-485serialcommunicationisgiven.KeyWords:Linux;serial;rs4851引言1.1串口通信的研究背景隨著計算機的不斷普及以及工業(yè)領(lǐng)域等一些其他行業(yè)的不斷發(fā)展,其中使用最多的通信功能就變得越來越重要,其中在遠距離通信時,由于布線簡單,需要使用的傳輸數(shù)據(jù)的用線也很少,成本比較低,經(jīng)常采用串行通信。而在近距離通信時,運用串行通信更加普遍,比如我們?nèi)粘=?jīng)常使用的打印機,磁盤等使用了串行通信,尤其在工業(yè)領(lǐng)域?qū)υO(shè)備的實時控制和數(shù)據(jù)管理方面,經(jīng)常采用多臺微機組成一個分布式控制系統(tǒng),而每個從機之間使用的通信方式就是串行通信了。而且使用串行通信技術(shù)不僅可以組成一個一個的控制系統(tǒng),還會使得組成控制系統(tǒng)的從站的硬件的設(shè)計變得簡單化,具有更高的可靠性,從而降低開發(fā)成本。,1.2常見的串口通信總線在選擇使用串行通信總線時,一般會從以下的一些角度去考慮使用哪種串行總線協(xié)議:(1)數(shù)據(jù)傳輸速率;(2)數(shù)據(jù)位傳輸順序,先傳輸最高位或者最低位;(3)片選方式,通過硬件片選輸入或者軟件協(xié)議;(4)外設(shè)與微控制器的同步方式,通過一根硬件時鐘線或者通過內(nèi)嵌于數(shù)據(jù)流中的時鐘信息;(5)數(shù)據(jù)是在單根線上傳輸,即在“高”和“低”之間轉(zhuǎn)換;還是在一對差分信號線上傳輸,即兩根線按相反的方向同時轉(zhuǎn)換電壓;(6)是否使用匹配電阻實現(xiàn)阻抗匹配,一般差分信號傳輸兩端需要匹配電阻,而單端信號不需要匹配電阻。根據(jù)不同的使用需要就要選用不同的串行通信方式,如圖1-1是常用的一些串行通信總線的對比。除了圖1-1所示的一些串行通信總線協(xié)議,還由其他的一些串行通信總線協(xié)議,比如現(xiàn)在也經(jīng)常使用的高速串行接口如USB3.0/3.1,ThunderBolt等協(xié)議,還有在現(xiàn)在日常中使用的串行通信總線中速度最快的光纜,但是在使用中并不是傳輸速度越快的越好,在傳輸速度提升上去的同時,一定還伴隨著其他的消耗,比如布線更加復(fù)雜,使用的器材更加昂貴等等,所以在自己的設(shè)計中選擇最適合的才是最好的。圖1-1常用串行通信總線對比1.3RS-485標(biāo)準(zhǔn)的發(fā)展RS-485標(biāo)準(zhǔn)是在RS-232標(biāo)準(zhǔn)上發(fā)展來的,在1969年,美國電子工業(yè)協(xié)會(EIA)把RS-232C(簡稱為RS-232)定義為串行通信的電氣標(biāo)準(zhǔn),這個通信標(biāo)準(zhǔn)對電氣特性等一些參數(shù)給出了標(biāo)準(zhǔn)數(shù)據(jù),RS-232通信標(biāo)準(zhǔn)適合數(shù)據(jù)的發(fā)送速率在0-20000bit/s內(nèi),之后因為RS-232標(biāo)準(zhǔn)在之后的使用中發(fā)現(xiàn)了一些缺陷,所以在之后美國電子工業(yè)協(xié)會(EIA)又定義了RS-422標(biāo)準(zhǔn)和RS-485標(biāo)準(zhǔn)。RS-422標(biāo)準(zhǔn)的出現(xiàn)解決了一些問題,首先是傳輸信號的速度提高到了10Mbit/s,布線的長度也提升到了4000英尺(在傳輸速度低于100kbit/s時),并且RS-422還擴展了從站的個數(shù),在總線上最多可以連接10個數(shù)據(jù)接收器,但是RS-422只能單向的發(fā)送,為了解決這個問題,EIA又在1983年在RS-422標(biāo)準(zhǔn)基礎(chǔ)上制定了RS-485標(biāo)準(zhǔn),RS-485標(biāo)準(zhǔn)的出現(xiàn),使得在一個總線上可以有多個主站同時發(fā)送消息而不會產(chǎn)生沖突,提高了數(shù)據(jù)的發(fā)送能力,在RS-485總線上最多同時可以連接128個從站接收器,這樣做就提高了總線的布線范圍,使得數(shù)據(jù)的交互變得更加快速。RS(recommendedstandard)的意思為這是EIA官方提供推薦使用的標(biāo)準(zhǔn)協(xié)議,233,422,485是一種用于識別的標(biāo)號,C代表這是最新的修改標(biāo)準(zhǔn),以前使用過A,B作為后綴,這些通信標(biāo)準(zhǔn)都對連接信號線的信號功能,邏輯電平的定義,機械特性做出定義。2RS-485串口通信的實現(xiàn)方式2.1什么是串口通信串口通信是串行通信中的一種,串行通信是指在通信的時候,只需要使用一根數(shù)據(jù)線發(fā)送數(shù)據(jù)位,依次一個一個的傳輸,每個數(shù)據(jù)位的發(fā)送都是占用著固定時間,這樣我們在系統(tǒng)之間使用幾根數(shù)據(jù)線就可以通信了,特別適用于嵌入式設(shè)備的信息傳輸。串行通信可分為同步通信和異步通信,而串口通信就屬于異步通信,同步通信和異步通信之間的最大的區(qū)別就是發(fā)送時鐘和接受時鐘是否需要一致。串口通信的概念十分簡單易懂,通信設(shè)備兩端的接口通過一根信號線連接,數(shù)據(jù)信號線上依次傳輸在如圖2-1所示,雖然這會導(dǎo)致通信速度會比并行通信慢,但是它能保障數(shù)據(jù)的準(zhǔn)確性,比較適合遠距離通信,用串口通信設(shè)備總線的最大長度理論上可達1200米,比如傳輸ASCLL字符時,可以使用發(fā)送線,接收線,地線三根線進行通信,由于是異步通信,所以在發(fā)送的時候也可以接收總線上的數(shù)據(jù),當(dāng)用串口通信的時候,數(shù)據(jù)交互的兩個設(shè)備之間波特率,數(shù)據(jù)位,停止位,和奇偶校驗這些參數(shù)必須相同,否則協(xié)議的差距,導(dǎo)致數(shù)據(jù)無法數(shù)據(jù)解析,從而使得通信失敗。圖2-1串口通信示意圖下面就是波特率,數(shù)據(jù)位,停止位,奇偶校驗的概念:(1)波特率:這是衡量單位時間內(nèi)發(fā)送數(shù)據(jù)位的個數(shù),也就是發(fā)送的速率,比如每秒鐘發(fā)送2400碼元,而每個碼元上又有8個bit位這時候的波特率就是2400Bud,轉(zhuǎn)化為比特率就是2400*8=19200bps。一般在傳輸過程中調(diào)制速率是要比波特率大的,比如在曼徹斯特編碼當(dāng)中,傳輸速率波特率是和傳輸距離成一個反比關(guān)系的,一般距離很近時就采用比較高的波特率,而傳輸距離短時,就需要波特率比較小了,這是為了傳輸數(shù)據(jù)的準(zhǔn)確性而考慮的,兩個端口之間傳輸數(shù)據(jù)時波特率一定要相同。(2)數(shù)據(jù)位:這是攜帶真實需要傳輸?shù)奈粩?shù)的參數(shù),一個數(shù)據(jù)包被發(fā)送出去,并不是所有的數(shù)據(jù)位都是攜帶數(shù)據(jù)的,一般在在串口通信中,數(shù)據(jù)位的設(shè)置是6位,7位,8位,這取決你想要發(fā)送什么樣的數(shù)據(jù),在使用串口通信時,需要上位機軟件來定義到底需要多少位數(shù)據(jù)位,來定義自己的通信協(xié)議。(3)停止位:這是存在于每個數(shù)據(jù)包的最后一個數(shù)據(jù)位,一般在串口通信時這個數(shù)據(jù)是1,1.5或者2,停止位不僅代表著一個數(shù)據(jù)包的停止,還可以同步兩個設(shè)備的時鐘,由于數(shù)據(jù)在數(shù)據(jù)線上傳輸時定時傳輸?shù)?,而兩個通信設(shè)備都有自己的定時時鐘,很可能在傳輸數(shù)據(jù)中兩個通信設(shè)備的時鐘不一致,這時候就需要停止位來提供時鐘同步的校驗。停止位越多,可以容忍的時間的差距越大,當(dāng)然,這樣做的結(jié)果就是會導(dǎo)致數(shù)據(jù)的傳輸變慢。(4)奇偶校驗:串口通信提供了一些校驗方法,一般這一位校驗位在數(shù)據(jù)位的后一位,用這一位來確保數(shù)據(jù)的準(zhǔn)確性,校驗并不會真正的檢查數(shù)據(jù),校驗位只是提供一個狀態(tài)位,用來提醒通信雙方在數(shù)據(jù)的傳輸過程中是否會因為噪聲干擾導(dǎo)致數(shù)據(jù)丟失或者數(shù)據(jù)傳輸不同步2.2通信串口協(xié)議的選擇(RS-485)2.2.1RS-485協(xié)議的定義RS-485是一種典型的串行通信的標(biāo)準(zhǔn),這是是一種硬件層的協(xié)議,它定義了電壓,阻抗等等,之解決了數(shù)據(jù)如何傳輸?shù)膯栴},比如兩個設(shè)備之間需要互相通信,設(shè)備一需要向設(shè)備二發(fā)送一個數(shù)據(jù)0x65,0x65的二進制為01100101,要把8個二進制數(shù)發(fā)送給設(shè)備二,它主要解決了0怎么傳,1怎么傳的問題,這就是硬件層需要的解決問題。所以RS-485的電氣特性定義了兩根線之間的電壓為+(2-6V)表示邏輯“1”,-(2-6V)表示邏輯“0”,而且這個電平是和TTL電平是相互兼容的,可以和TTL電弧相互連接如圖2-2所示。2.2.2RS-485協(xié)議的特點(1)RS-485標(biāo)準(zhǔn)定義了其數(shù)據(jù)在信號線上可以以10Mbps的速度傳輸(2)RS-485的接口采用了差分雙絞線傳輸,可以最大程度上減少外界噪聲的干擾。(3)RS-485的最大的布線的距離為4000英尺,但是這個數(shù)據(jù)因為現(xiàn)實生活與理論的差距,實際操作中最大的傳輸距離極限也就只有1200m,RS-485總線上最多可以連接128個從站接口,即可以連接多個從站進行數(shù)據(jù)的交互,這樣使用者就可以使用RS-485總線建立分布式結(jié)構(gòu)網(wǎng)絡(luò)。因為RS-485在數(shù)據(jù)傳輸時一般只是用兩根線,所以RS-485采用差分雙絞線傳輸,由兩根數(shù)據(jù)線連接起來的RS-485數(shù)據(jù)網(wǎng)絡(luò)是半雙工通信網(wǎng)絡(luò)。圖2-2RS-485通信原理2.2.3差分傳輸法與RS-232串口協(xié)議不同,RS-485的數(shù)據(jù)傳輸采用了差分雙絞線傳輸。和以前的傳輸方法不同,兩根信號線傳輸成為了差分傳輸法的標(biāo)識特點,兩根信號線上傳輸?shù)男盘栂辔槐舜讼喾矗穹舜讼嗤?,這樣的信號就叫差分信號。在接收端只要判斷兩根信號線之間的電壓差值就可以判斷邏輯狀態(tài)了。使用差分信號傳輸,會有以下的幾個好處,第一個好處就是可以控制相對的基準(zhǔn)電壓,很容易就可以識別小的信號,在一根地線,一根信號線傳輸?shù)牡南到y(tǒng)里,是相對于地線做基準(zhǔn)的,依賴的是“地”相同性,但是在長距離的傳輸中,“地”就會產(chǎn)生差異性,從而導(dǎo)致產(chǎn)生誤差,而差分信號的傳輸是用兩根信號線電壓的差值來比較的,長距離的傳輸對兩根信號線的影響是相同的,所以可以保證信號傳輸?shù)恼_性。差分信號傳輸?shù)牡诙€好處是兩根信號線傳輸數(shù)據(jù)時,對于外部的電磁干擾具有抵抗性,因為電磁信號是影響兩根信號線,既然差分傳輸使用兩根信號線的電壓差值來發(fā)送信號值,這樣就可以忽視掉電磁信號的干擾了。差分信號的第三個個好處就是在只有一個電源的信號傳輸?shù)南到y(tǒng)中,為了能夠處理兩極的信號,必須要建立一個虛擬的地,用比虛地高的電壓來表示正極信號,而用比虛地高的電壓來表示負極信號,但是在差分信號的傳輸中,就沒有必要使用虛地了,也就不需要依賴虛地的穩(wěn)定性了。有好處一定會有一定的壞處,使用差分信號傳輸時,需要占用的布線的面積比較大,如果在電路板上布線,而布線面積比較小時,就沒法使用了。2.3本文使用的RS-485通信模塊本文選用的RS-485串口通信模塊的設(shè)計如圖2-4所示,在RS-485串口通信模塊中,主站時一個運行著Linux操作系統(tǒng)的PC主機,通過USB轉(zhuǎn)RS-485轉(zhuǎn)化器與從站模塊,一個電池數(shù)據(jù)采集模塊庫侖計相連,從而構(gòu)成一個串口通信模塊,只需要主站定時的向從站模塊發(fā)送獲取數(shù)據(jù)的命令,從站模塊就會將采集的數(shù)據(jù)通過RS-485串口發(fā)送給主站,主站通過通信協(xié)議解析后就可以得到電池的參數(shù)。圖2-4RS-485串口通信模塊本文所使用的USB轉(zhuǎn)RS-485轉(zhuǎn)換器如圖2-5所示,USB轉(zhuǎn)RS-485轉(zhuǎn)換器讓沒有串口的計算機主機可以連接帶有串口的從站模塊,在當(dāng)今的的上位機設(shè)備上,USB接口是必不可少的通信接口,相比串口,USB接口支持熱插拔,傳輸數(shù)據(jù)的速度快,即插即用等一系列優(yōu)點,由于現(xiàn)在的很多主板并沒有提供串口接口,尤其是對于計算機而言,所有就有廠商提供了一系列產(chǎn)品來解決這些問題。圖2-5USB轉(zhuǎn)RS-485串口實物圖從站的庫倫計模塊如圖2-6所示,從站庫侖計模塊是一個采集電池電量參數(shù)的模塊,它的基本原理就是通過電路傳感器計算單位時間內(nèi)流入和流出干路電荷的數(shù)量,然后獲得的數(shù)據(jù)做積分后進行累加或者累減,最后計算出電池的當(dāng)前電量。庫侖計的基本原理就是這樣。圖2.3-3從站庫侖計模塊實物圖3Linux下的RS-485串口通信編程3.1Linux下軟件開發(fā)環(huán)境(1)操作系統(tǒng):串口通信的設(shè)計軟件的編寫和運行環(huán)境是ubuntu16.04版本,如圖3-1所示圖3-1ubuntu16.04操作系統(tǒng)(2)編輯器:編輯器是選用Vscode(VisualStudioCode)是由微軟研發(fā)的一個跨平臺的代碼編輯器,支持很多的插件。(3)編譯器編譯器是選用的GCCC/C++編譯器,這是由GNU開發(fā)的編程語言編譯器,它支持多種編程語言的編譯,現(xiàn)在改名為GNU編譯器套件在編譯一個test.c程序時,使用的操作如下gcctest.c-oa.out就可以生成一個a.out的可執(zhí)行程序了。(4)代碼管理多文件的文件管理使用了Makefile文件,使用了GNU中的make工具,make是一個命令工具,它能解釋Makefile文件中的指令。在一個寫好的Makefile文件目錄下,只要使用make命令,就可以編譯多文件了,從而不需要手動輸入那么多的編譯命令了。3.2Linux下的設(shè)備文件在Linux編程環(huán)境下,要想使用RS-485串口通信,首先需要打開RS-485串口描述文件,再對打開的RS-485串口描述文件返回的句柄配置波特率,數(shù)據(jù)位,停止位,奇偶校驗等一些參數(shù),最后就可以使用該文件句柄進行通信了,發(fā)送數(shù)據(jù)時需要調(diào)用write()函數(shù),接收數(shù)據(jù)時需要調(diào)用read()函數(shù),具體流程如圖3-2所示。圖3-2Linux下RS-485串口編程流程圖第一步要打開的RS-485串口描述文件是Linux環(huán)境下獨有的,在Linux下所有的外設(shè)接口等硬件設(shè)備都被虛擬成了一個設(shè)備文件,統(tǒng)一的由Linux內(nèi)核提供對外的接口函數(shù),讓應(yīng)用者去調(diào)用這些接口函數(shù)從而達到操作外設(shè)的目的,而這些設(shè)備文件被保存到了/dev目錄下了,每個設(shè)備文件都有兩個編號,其中一個是主設(shè)備號,它代表著不同類型的設(shè)備,還有一個次設(shè)備號,它表示同一類型而又不同的設(shè)備,主設(shè)備號和次設(shè)備號就可以確定一個設(shè)備了。這些設(shè)備文件分為字符設(shè)備文件和塊設(shè)備文件,字符設(shè)備文件是面向流設(shè)備,RS-485串口設(shè)備文件就是流設(shè)備文件,每次讀取數(shù)據(jù)時需要依次讀取,而不能隨機讀取某個地方的數(shù)據(jù),而塊設(shè)備可以隨機讀取設(shè)備內(nèi)存中的數(shù)據(jù)。而在Linux下RS-485串口的設(shè)備文件的命名規(guī)則是使用“ttyS”和設(shè)備號組成的。在Linux環(huán)境下RS-485串口設(shè)備和Windows的RS-485串口之間的關(guān)系如圖3-3和3-4所示。圖3-3Linux下輸入RS-485串口與WindowsRS-485串口的對應(yīng)關(guān)系圖圖3-4Linux下輸出RS-485串口與WindowsRS-485串口對應(yīng)關(guān)系圖有了RS-485串口設(shè)備的描述文件,我們就可以使用Linux內(nèi)核提供的Intopen(constchar*pathname,intflags)函數(shù)來打開文件來操作設(shè)備文件,其中的參數(shù)“pathname”就是RS-485串口設(shè)備文件的所在路徑,注意需要填寫絕對路徑,第二個參數(shù)”flag”是要以什么方式打開文件,它有著許多標(biāo)志,如果要詳細了解,該函數(shù)定義在<sys/types.h>頭文件中,可以去查找,這里我就不再贅述了,當(dāng)調(diào)用open()函數(shù)打開設(shè)備文件成功后,就會返回一個設(shè)備句柄,如圖3-5和3-6所示,返回的句柄為3,這個句柄可以以供后續(xù)的RS-485串口的操作使用。圖3-5打開設(shè)備文件調(diào)用的open()函數(shù)圖3-6open()函數(shù)運行結(jié)果注意在該函數(shù)中,我所打開的設(shè)備文件名并不是“/dev/ttySx”,而是“/dev/ttyUSB0”,這是由于我使用的是USB轉(zhuǎn)RS-485串口轉(zhuǎn)換器連接的pc機,而不是RS-485串口直接連接pc機,設(shè)備文件名改變了,所以我在open()函數(shù)中填寫的路徑名為“/dev/ttyUSB0”。3.3Linux的RS-485串口參數(shù)的配置在Linux下RS-485串口的參數(shù)的配置主要有以下一些參數(shù),波特率(Baudrate),數(shù)據(jù)位(Bits),停止位(Stops),校驗方式(Parity),除了這些參數(shù)之外,還有很多參數(shù)可以配置,這里我只是把我的程序里的一些參數(shù)做一些說明,Linux下的RS-485串口參數(shù)主要是在termios結(jié)構(gòu)體中,要想對RS-485串口參數(shù)進行配置,必須要對這個結(jié)構(gòu)體比較熟悉,該結(jié)構(gòu)體體在<termios.h>頭文件中定義,該結(jié)構(gòu)體的定義如圖3-8所示:圖3-8termios結(jié)構(gòu)體參數(shù)圖termios結(jié)構(gòu)體中的著5個參數(shù)中的c_iflag參數(shù)管理著終端的輸入方式,c_oflag管理終端的輸出方式,c_cflag是管理著控制方式的標(biāo)志,如波特率,數(shù)據(jù)位,停止位等參數(shù)就是由該參數(shù)控制,c_lflag管理著是否有數(shù)據(jù)到來,若有數(shù)據(jù),則發(fā)送給應(yīng)用程序,c_cc參數(shù)定義了一系列控制參數(shù)的標(biāo)志位,此外,在Linux環(huán)境下還提供了一些函數(shù)去配置串口屬性,如圖3-9所示。圖3-9RS-485串口配置函數(shù)表在打開RS-485串口設(shè)備文件獲取了設(shè)備句柄后,首先要定義一個termios類型的結(jié)構(gòu)體變量,再調(diào)用tcgetattr()函數(shù)獲得終端的相關(guān)參數(shù),然后再調(diào)用cfsetispeed()函數(shù)和cfsetospeed()函數(shù)設(shè)置RS-485串口的輸入和輸出的波特率,然后再對定義的termios類型的結(jié)構(gòu)體變量中的c_cflag的變量做設(shè)置,設(shè)置完成后需要tcsetattr()函數(shù)設(shè)置終端的相關(guān)參數(shù),這樣對RS-485串口設(shè)備文件的參數(shù)設(shè)置就完成了,再我的程序中設(shè)置流程如圖3-10到3-15所示,其中RS-485串口參數(shù)配置為波特率位9600,8個數(shù)據(jù)位,1個停止位,沒有校驗位。圖3-10獲取終端的相關(guān)參數(shù)圖3-11設(shè)置RS-485串口的波特率圖3-12設(shè)置RS-485串口的數(shù)據(jù)位(8位)圖3-13設(shè)置RS-485串口的校驗位(無校驗位)圖3-14設(shè)置RS-485串口的停止位圖3-15設(shè)置終端的相關(guān)參數(shù)3.4Linux下RS-485串口通信軟件實現(xiàn)在本文中使用的程序如圖3-16所示,首先程序的開始會去打開RS-485串口設(shè)備文件和配置RS-485串口參數(shù),之后會開啟一個新的線程去周期的與從站庫侖計模塊通信獲取電池的參數(shù),然后將參數(shù)存儲,在主線程中則會去連接Mosquitto服務(wù)器發(fā)布相應(yīng)的主題消息。圖3-16軟件流程圖通信時參照從站庫侖計模塊的通信協(xié)議,開始進行RS-485串口通信獲取電池參數(shù),如圖3-17和3-18所是是庫侖計通信模塊的通信協(xié)議中的一種:圖3-17庫侖計通信模塊讀取參數(shù)命令圖3-18接收庫侖計模塊的返回數(shù)據(jù)按照上述通信協(xié)議,首先開始要組成發(fā)送的數(shù)據(jù)包,第一步填寫數(shù)據(jù)包的包頭,然后再填寫功能碼,之后在填寫首先發(fā)送數(shù)據(jù),最后計算校驗值,這樣一個獲取電池參數(shù)的數(shù)據(jù)包就拼湊完成了,然后就是調(diào)用write()函數(shù)發(fā)送數(shù)據(jù)包給從站,然后檢查返回值如圖3-20所示,流程如圖3-19所示。圖3-19RS-485串口數(shù)據(jù)發(fā)送模塊圖3-20調(diào)用write()函數(shù)返回結(jié)果之后就是接收數(shù)據(jù)的處理了,首先調(diào)用read()函數(shù)去接收從站返回的數(shù)據(jù),查看返回值如圖3-22所示,接收到數(shù)據(jù)后首先要檢查數(shù)據(jù)包的包頭是否正確,然后再檢驗校驗和是否正確,然后再根據(jù)不同的功能碼對數(shù)據(jù)包做不同的解析,最后將解析出來的數(shù)據(jù)存儲。其流程圖如3-21所示:圖3-21RS-485串口數(shù)據(jù)接收模塊圖3-22read()函數(shù)調(diào)用返回結(jié)果如上圖的設(shè)計模塊的驗證以及返回結(jié)果所示,發(fā)送讀取參數(shù)的數(shù)據(jù)包給從站模塊,收到了相應(yīng)的數(shù)據(jù)包回復(fù),成功的與從站模塊通過RS-485串口進行通信。4RS-485串口通信的應(yīng)用4.1MQTT協(xié)議為實現(xiàn)在手持終端上能夠?qū)崟r的查看通過RS-485串口通信獲得的電池參數(shù),現(xiàn)在使用了MQTT協(xié)議,MQTT(MessageQueuingTelemetryTransport)協(xié)議是專門為硬件性能比較差以及網(wǎng)絡(luò)要求比較差的情況下而設(shè)計的一款輕量級的協(xié)議。它是基于tcp/ip協(xié)議的上層協(xié)議。MQTT主要有三個概念,Publish(發(fā)布),Subscribe(訂閱),Broker(服務(wù)器),MQTT協(xié)議提供一對多的消息發(fā)布,只要一端的客戶端發(fā)布了一個消息,只要另一個客戶端訂閱相關(guān)的消息即可接受到相應(yīng)的數(shù)據(jù),通過MQTT協(xié)議,現(xiàn)在已經(jīng)出現(xiàn)了許多種編程語言編寫的服務(wù)端,而本文使用的是Linux環(huán)境下利用C語言編寫的一款消息代理軟件Mosquitt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動小學(xué)語文教學(xué)模式創(chuàng)新的改革方案
- 獸用生物制品行業(yè)重點企業(yè)競爭力評估與市場布局
- 救災(zāi)物資協(xié)同管理方案
- 分布式光伏發(fā)電系統(tǒng)建設(shè)可行性研究
- 飛錘支架課程設(shè)計
- 2024年專利許可使用合同
- 跑酷游戲課程設(shè)計
- 油氣儲運設(shè)備安裝工程合同
- 水利環(huán)保工程建設(shè)項目合同
- 2024論國際合同中當(dāng)事人意思自治的限度
- 光譜內(nèi)鏡技術(shù)用于喉癌預(yù)后預(yù)測
- 《成人有創(chuàng)機械通氣氣道內(nèi)吸引技術(shù)操作》標(biāo)準(zhǔn)解讀
- 2024至2030年中國氣管插管市場前景及融資戰(zhàn)略咨詢報告
- 國家開放大學(xué)(廣西)《云計算及應(yīng)用》作業(yè)1-5參考答案
- 《研學(xué)旅行基地運營與管理》課件-4.3.2研學(xué)基地住宿設(shè)施服務(wù)的管理
- 2020海灣GST-HX-240B火災(zāi)聲光警報器安裝使用說明書
- 2024年秋新北師大版七年級上冊數(shù)學(xué)教學(xué)課件 4.2.1 角
- 礦山開采規(guī)劃與設(shè)計考核試卷
- PFMEA課件培訓(xùn)學(xué)習(xí)
- 《馬克思主義發(fā)展史》題集
- 2024-2030年中國CVD和和ALD前體行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
評論
0/150
提交評論