<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 一種高效的串行通信協(xié)議的制定及實(shí)現

一種高效的串行通信協(xié)議的制定及實(shí)現

作者: 時(shí)間:2017-06-12 來(lái)源:網(wǎng)絡(luò ) 收藏

1 介紹

是將數據分成若干二進(jìn)制位(bit),然后通過(guò)一條線(xiàn)路或一個(gè)通信信道,按照規定的規程逐位依次進(jìn)行傳輸,實(shí)現計算機與計算機或計算機與外部設備之間的通信(數據交換)。具有占用硬件資源少、可大幅度降低通信線(xiàn)路成本、簡(jiǎn)化通信設備、應用靈活、易維護等諸多優(yōu)點(diǎn),在工業(yè)控制、電力通信、智能儀表等領(lǐng)域得到了廣泛應用[1]。

EIA-RS232、EIA-RS485、電流環(huán)、CAN等串行通信方式是通信領(lǐng)域中應用廣泛的串行接口。EIA-RS232是全雙工的通信模式,可保證短距離點(diǎn)對點(diǎn)的高速傳輸,EIA-RS485實(shí)現了較長(cháng)距離下的多點(diǎn)互聯(lián)通信。CAN屬于現場(chǎng)總線(xiàn)的范疇,采用了多主機制,改善了在集散控制系統下的主從通信模式[2]。隨著(zhù)應用需求的復雜化,對串行通信的性能、的提升需求越來(lái)越明顯。如何制定一套切實(shí)可行、簡(jiǎn)單易用,又能大幅度提高串行;如何在PC端、嵌入式系統端構建一個(gè)高效的串行數據處理的應用程序,是串行中等待解決的問(wèn)題。本文將以加油站信息管理系統為例,介紹串行的制定以及高效通信數據處理的實(shí)現。


2 串行通信協(xié)議的設計

2.1 系統總體結構

加油站信息管理系統的結構如圖1所示,每臺加油機為一個(gè)應用節點(diǎn)(即圖1中的控制點(diǎn)),通過(guò)半雙工RS-485總線(xiàn)連接至通信控制器,在RS-485網(wǎng)絡(luò )中,通信控制器為主機(Master),各加油機為從機(Slave),構成一個(gè)主從通信的網(wǎng)絡(luò )架構。在多種串行接口標準中,RS-485接口結構簡(jiǎn)單、通信速率高、傳輸距離遠、使用傳輸線(xiàn)較少,長(cháng)距離通信較經(jīng)濟,在集散式控制裝置中得到了廣泛應用。RS-485采用差分電平傳輸,只需2根信號線(xiàn),即可以方便地增加控制節點(diǎn)數目[3]。

本文引用地址:http://dyxdggzs.com/article/201706/353208.htm


通信控制器通過(guò)全雙工RS-232總線(xiàn)與管理PC進(jìn)行數據交互,管理PC和通信控制器層面的數據交互,保證了實(shí)時(shí)性和高效性,采用互為主機的通信方式,以此構成集散控制系統[4]。

2.2 通信協(xié)議格式的定義

2.2.1 協(xié)議幀格式

(1)主機(Master)下發(fā)數據幀格式

起始標志數據(5AH+A5H)+長(cháng)度(從命令字開(kāi)始到校驗和為止的字節數)+命令字HIGH+命令字LOW+機號+參數+一個(gè)字節校驗和(從命令字開(kāi)始到校驗碼前一個(gè)字節的邏輯“異或”和)。

(2)從機(Slave)上傳數據幀格式

起始標志數據(9BH+B9H)+長(cháng)度(從命令字開(kāi)始到校驗和為止的字節數)+命令字HIGH+命令字LOW+機號+參數+一個(gè)字節校驗和(從命令字開(kāi)始到校驗碼前一個(gè)字節的邏輯“異或”和)[5-6]。

2.2.2 協(xié)議幀解釋

起始標志數據:采用1個(gè)字節或多字節作為幀起始標志,該部分的字節定義應盡量與幀數據的其他部分完全不一樣。接收方在接收數據時(shí)總是先尋找幀頭。幀頭的排他性將有利于提高各通信節點(diǎn)的接收效率。

長(cháng)度:應盡量采用短幀,以避免各種干擾因素對的影響??筛鶕?shí)際應用情況,在“長(cháng)度”后增加“長(cháng)度反碼”或“長(cháng)度補碼”等校驗數據對長(cháng)度進(jìn)行更為嚴格的校驗。

命令字:根據實(shí)際通信應用需求,可應用1~2字節的通信命令字。

機號:該幀所需接收方的地址識別號,可根據實(shí)際應用需求對其進(jìn)行修改,如增加源地址、目的地址等。
參數:該幀的應用數據,針對不同的應用,考慮到數據的安全性,可對該部分的數據進(jìn)行加密處理。
校驗和:該幀的數據校驗,可根據應用需求選擇不同的校驗方式。


3 高效串行通信方式的實(shí)現

3.1 PC端軟件發(fā)送數據的處理機制

PC端的軟件首先判斷最高優(yōu)先級的命令字是否需要發(fā)送,如果需要,則進(jìn)入該命令字的發(fā)送流程;如果沒(méi)有,接著(zhù)判斷次高級優(yōu)先級的命令字是否需要發(fā)送,如果需要,則進(jìn)入發(fā)送流程。根據命令字的優(yōu)先級由高到低的順序依次判斷要發(fā)送的命令字,當沒(méi)有通信數據命令字發(fā)送時(shí),PC端軟件將發(fā)送輪詢(xún)命令字。此外,在發(fā)送完一幀數據后,PC端軟件會(huì )開(kāi)啟接收超時(shí)定時(shí)器T,如果PC端軟件在超時(shí)時(shí)間內收到應答命令數據幀則進(jìn)入相應數據處理流程,同時(shí)關(guān)閉接收超時(shí)定時(shí)器T;如果系統定時(shí)時(shí)間內未收到應答命令數據幀,則重新發(fā)送該命令字的幀數據,并記錄發(fā)送該命令字的次數,當發(fā)送命令字的幀超過(guò)10次未收到相應應答命令,即視為該命令字和控制點(diǎn)的通信失敗,將通信流程重新調整到輪詢(xún)命令字狀態(tài)下。

3.2 PC端軟件接收數據的處理機制

在PC軟件端的接收程序部分,按字節來(lái)處理接收到的每幀數據,而不是按幀來(lái)處理。為此,應用程序將串口的接收中斷的響應字節閾值設為1,即當接收緩沖區有多于1個(gè)數據便進(jìn)入接收數據處理流程。

當開(kāi)始接收一幀數據時(shí),首先找到幀頭,其次應根據接收數據緩沖區中的有效數據長(cháng)度和幀長(cháng)度的關(guān)系來(lái)分類(lèi)處理。因為Windows對串口的封裝(開(kāi)發(fā)平臺為VC++6.0),使得應用程序無(wú)法來(lái)設定軟件,根據接收數據緩沖區的數據閾值來(lái)響應串行中斷。所以在通信過(guò)程中當PC產(chǎn)生串行中斷時(shí),應根據串行中斷當前數據接收緩沖區的有效數據長(cháng)度來(lái)做分類(lèi)處理[7]。

首先,把接收緩沖區ReceBuffer[M]的數據取出來(lái),放到待處理緩沖區DealBuffer[M]中(為了防止該幀數據還沒(méi)有處理完畢,未處理的數據會(huì )被新來(lái)的數據覆蓋掉,造成系統的數據丟失)。其次,要確定接收數據的幀頭,方法就是逐字節查找,一般幀頭在接收緩沖區中出現的位置有3種情況,如圖2所示,每一個(gè)方格代表一個(gè)字節。

如果幀頭就是接收緩沖區的前兩個(gè)字節(如圖2(a)所示),則按照通信協(xié)議依次處理剩下的接收緩沖區的有效數據。用全局變量表示接收緩沖區處理步驟S,正確接收到2個(gè)幀頭后P賦值為2。

如果幀頭在接收數據緩沖區的不連續字節內(如圖2(b)所示),應把從第2個(gè)幀頭開(kāi)始的有效數據移到第1個(gè)幀頭后,如圖3所示,使得待處理緩沖區的數據形成連續的一幀數據來(lái)繼續下一步的處理。

如果幀頭分散在兩個(gè)數據幀中(如圖2(c)所示),即PC響應串行中斷第1次接收到第1個(gè)幀頭,第2次響應或者第n次響應串行中斷接收到第2個(gè)幀頭。當接收到第1個(gè)幀頭后,S賦值為1。當下次響應串行中斷時(shí),判斷S的值,如果是1,表示第1個(gè)幀頭已經(jīng)找到,開(kāi)始在接收到的幀數據中尋找第2個(gè)幀頭;如果找到,S賦值為2,并把從第2個(gè)幀頭開(kāi)始的有效數據移到第1個(gè)幀頭后,使待處理緩沖區的數據形成連續的一幀數據來(lái)處理。
判斷命令字是否為協(xié)議中規定的合法命令字。如果是,將根據命令字所對應的長(cháng)度來(lái)判斷該幀數據的合法性,因為在制定通信協(xié)議時(shí),規定了特定命令字所對應的數據長(cháng)度,這兩點(diǎn)約束條件可以保證接收數據的合法性,從而提高了系統的穩定性。如果命令字和其對應的長(cháng)度值合法則將S賦值為3,進(jìn)入下一步的數據處理步驟。

最后,關(guān)閉發(fā)送定時(shí)器,防止處理的過(guò)程中有新的接收數據影響處理有效數據的過(guò)程。處理完畢,打開(kāi)發(fā)送定時(shí)器,根據處理過(guò)程中標志位的改變情況繼續與控制點(diǎn)進(jìn)行相應的數據通信。在處理接收數據的步驟中,如果任何一個(gè)步驟出現非法數據,則清空ReceBuffer[M]和DealBuffer[M],認為該幀數據傳輸出錯,丟棄該幀數據,并初始化接收變量,重新設定接收超時(shí)定時(shí)器,接收下一次通信數據。

本文通過(guò)完整的串行通信協(xié)議的設計,在PC軟件發(fā)送端始終處于通信狀態(tài),能以很快的速度響應系統協(xié)議規定的命令字及其數據的發(fā)送。同時(shí),在PC軟件接收端,采用逐字節處理的方式,通過(guò)設定全局變量來(lái)確定處理接收數據幀的步驟,細化了處理接收數據的過(guò)程,保證了數據高效可靠的傳輸。本系統已經(jīng)應用在上海寶鋼集團加油站信息管理系統中,實(shí)驗結果證明,此協(xié)議的通信數據準確、通信效率高效可靠、自適應能力強,具有在相關(guān)領(lǐng)域推廣的價(jià)值和意義。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>