《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 一種高效的串行通信協(xié)議的制定及實現(xiàn)
一種高效的串行通信協(xié)議的制定及實現(xiàn)
宋兵躍1,,2,,吳軍輝1,,2,,楊學(xué)軍1,黃 斌1,,2
1.同濟(jì)大學(xué) 現(xiàn)代農(nóng)業(yè)科學(xué)與工程研究院,,上海 200092,;2.教育部設(shè)施農(nóng)業(yè)網(wǎng)上合作中心,,上海 2
摘要: 探討了一種基于串行通信的簡單,、高效的通信協(xié)議制定方法。實驗結(jié)果證明,,該協(xié)議有效提高了串行通信的通信效率,。
Abstract:
Key words :

摘  要: 探討了一種基于串行通信的簡單、高效的通信協(xié)議制定方法,。實驗結(jié)果證明,,該協(xié)議有效提高了串行通信通信效率
關(guān)鍵詞: 串行通信,;通信效率,;高效

1 串行通信介紹
    串行通信是將數(shù)據(jù)分成若干二進(jìn)制位(bit),然后通過一條線路或一個通信信道,,按照規(guī)定的規(guī)程逐位依次進(jìn)行傳輸,,實現(xiàn)計算機(jī)與計算機(jī)或計算機(jī)與外部設(shè)備之間的通信(數(shù)據(jù)交換)。串行通信具有占用硬件資源少,、可大幅度降低通信線路成本、簡化通信設(shè)備,、應(yīng)用靈活,、易維護(hù)等諸多優(yōu)點,在工業(yè)控制,、電力通信,、智能儀表等領(lǐng)域得到了廣泛應(yīng)用[1]。
    EIA-RS232、EIA-RS485,、電流環(huán),、CAN等串行通信方式是通信領(lǐng)域中應(yīng)用廣泛的串行接口。EIA-RS232是全雙工的通信模式,,可保證短距離點對點的高速傳輸,,EIA-RS485實現(xiàn)了較長距離下的多點互聯(lián)通信。CAN屬于現(xiàn)場總線的范疇,,采用了多主機(jī)制,,改善了在集散控制系統(tǒng)下的主從通信模式[2]。隨著應(yīng)用需求的復(fù)雜化,,對串行通信的性能,、通信效率的提升需求越來越明顯。如何制定一套切實可行,、簡單易用,,又能大幅度提高串行通信效率的通信協(xié)議;如何在PC端,、嵌入式系統(tǒng)端構(gòu)建一個高效的串行數(shù)據(jù)處理的應(yīng)用程序,,是串行通信協(xié)議中等待解決的問題。本文將以加油站信息管理系統(tǒng)為例,,介紹串行通信協(xié)議的制定以及高效通信數(shù)據(jù)處理的實現(xiàn),。
2 串行通信協(xié)議的設(shè)計
2.1 系統(tǒng)總體結(jié)構(gòu)

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


    通信控制器通過全雙工RS-232總線與管理PC進(jìn)行數(shù)據(jù)交互,,管理PC和通信控制器層面的數(shù)據(jù)交互,保證了實時性和高效性,采用互為主機(jī)的通信方式,,以此構(gòu)成集散控制系統(tǒng)[4],。
2.2 通信協(xié)議格式的定義
2.2.1 協(xié)議幀格式

    (1)主機(jī)(Master)下發(fā)數(shù)據(jù)幀格式
    起始標(biāo)志數(shù)據(jù)(5AH+A5H)+長度(從命令字開始到校驗和為止的字節(jié)數(shù))+命令字HIGH+命令字LOW+機(jī)號+參數(shù)+一個字節(jié)校驗和(從命令字開始到校驗碼前一個字節(jié)的邏輯“異或”和)。
    (2)從機(jī)(Slave)上傳數(shù)據(jù)幀格式
    起始標(biāo)志數(shù)據(jù)(9BH+B9H)+長度(從命令字開始到校驗和為止的字節(jié)數(shù))+命令字HIGH+命令字LOW+機(jī)號+參數(shù)+一個字節(jié)校驗和(從命令字開始到校驗碼前一個字節(jié)的邏輯“異或”和)[5-6],。
2.2.2 協(xié)議幀解釋
    起始標(biāo)志數(shù)據(jù):采用1個字節(jié)或多字節(jié)作為幀起始標(biāo)志,,該部分的字節(jié)定義應(yīng)盡量與幀數(shù)據(jù)的其他部分完全不一樣。接收方在接收數(shù)據(jù)時總是先尋找?guī)^,。幀頭的排他性將有利于提高各通信節(jié)點的接收效率,。
    長度:應(yīng)盡量采用短幀,以避免各種干擾因素對通信效率的影響,??筛鶕?jù)實際應(yīng)用情況,在“長度”后增加“長度反碼”或“長度補(bǔ)碼”等校驗數(shù)據(jù)對長度進(jìn)行更為嚴(yán)格的校驗,。
    命令字:根據(jù)實際通信應(yīng)用需求,,可應(yīng)用1~2字節(jié)的通信命令字。
    機(jī)號:該幀所需接收方的地址識別號,,可根據(jù)實際應(yīng)用需求對其進(jìn)行修改,,如增加源地址、目的地址等,。
    參數(shù):該幀的應(yīng)用數(shù)據(jù),,針對不同的應(yīng)用,考慮到數(shù)據(jù)的安全性,,可對該部分的數(shù)據(jù)進(jìn)行加密處理,。
    校驗和:該幀的數(shù)據(jù)校驗,可根據(jù)應(yīng)用需求選擇不同的校驗方式,。
3 高效串行通信方式的實現(xiàn)
3.1 PC端軟件發(fā)送數(shù)據(jù)的處理機(jī)制

    PC端的軟件首先判斷最高優(yōu)先級的命令字是否需要發(fā)送,,如果需要,則進(jìn)入該命令字的發(fā)送流程,;如果沒有,,接著判斷次高級優(yōu)先級的命令字是否需要發(fā)送,如果需要,,則進(jìn)入發(fā)送流程,。根據(jù)命令字的優(yōu)先級由高到低的順序依次判斷要發(fā)送的命令字,當(dāng)沒有通信數(shù)據(jù)命令字發(fā)送時,,PC端軟件將發(fā)送輪詢命令字,。此外,在發(fā)送完一幀數(shù)據(jù)后,,PC端軟件會開啟接收超時定時器T,,如果PC端軟件在超時時間內(nèi)收到應(yīng)答命令數(shù)據(jù)幀則進(jìn)入相應(yīng)數(shù)據(jù)處理流程,同時關(guān)閉接收超時定時器T,;如果系統(tǒng)定時時間內(nèi)未收到應(yīng)答命令數(shù)據(jù)幀,,則重新發(fā)送該命令字的幀數(shù)據(jù),并記錄發(fā)送該命令字的次數(shù),,當(dāng)發(fā)送命令字的幀超過10次未收到相應(yīng)應(yīng)答命令,,即視為該命令字和控制點的通信失敗,將通信流程重新調(diào)整到輪詢命令字狀態(tài)下,。
3.2 PC端軟件接收數(shù)據(jù)的處理機(jī)制
    在PC軟件端的接收程序部分,,按字節(jié)來處理接收到的每幀數(shù)據(jù),而不是按幀來處理,。為此,,應(yīng)用程序?qū)⒋诘慕邮罩袛嗟捻憫?yīng)字節(jié)閾值設(shè)為1,即當(dāng)接收緩沖區(qū)有多于1個數(shù)據(jù)便進(jìn)入接收數(shù)據(jù)處理流程,。
    當(dāng)開始接收一幀數(shù)據(jù)時,,首先找到幀頭,其次應(yīng)根據(jù)接收數(shù)據(jù)緩沖區(qū)中的有效數(shù)據(jù)長度和幀長度的關(guān)系來分類處理,。因為Windows對串口的封裝(開發(fā)平臺為VC++6.0),,使得應(yīng)用程序無法來設(shè)定軟件,根據(jù)接收數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)閾值來響應(yīng)串行中斷,。所以在通信過程中當(dāng)PC產(chǎn)生串行中斷時,,應(yīng)根據(jù)串行中斷當(dāng)前數(shù)據(jù)接收緩沖區(qū)的有效數(shù)據(jù)長度來做分類處理[7]。
    首先,,把接收緩沖區(qū)ReceBuffer[M]的數(shù)據(jù)取出來,,放到待處理緩沖區(qū)DealBuffer[M]中(為了防止該幀數(shù)據(jù)還沒有處理完畢,未處理的數(shù)據(jù)會被新來的數(shù)據(jù)覆蓋掉,,造成系統(tǒng)的數(shù)據(jù)丟失),。其次,要確定接收數(shù)據(jù)的幀頭,,方法就是逐字節(jié)查找,,一般幀頭在接收緩沖區(qū)中出現(xiàn)的位置有3種情況,如圖2所示,,每一個方格代表一個字節(jié),。
    如果幀頭就是接收緩沖區(qū)的前兩個字節(jié)(如圖2(a)所示),則按照通信協(xié)議依次處理剩下的接收緩沖區(qū)的有效數(shù)據(jù),。用全局變量表示接收緩沖區(qū)處理步驟S,,正確接收到2個幀頭后P賦值為2。

    如果幀頭在接收數(shù)據(jù)緩沖區(qū)的不連續(xù)字節(jié)內(nèi)(如圖2(b)所示),,應(yīng)把從第2個幀頭開始的有效數(shù)據(jù)移到第1個幀頭后,,如圖3所示,,使得待處理緩沖區(qū)的數(shù)據(jù)形成連續(xù)的一幀數(shù)據(jù)來繼續(xù)下一步的處理。

    如果幀頭分散在兩個數(shù)據(jù)幀中(如圖2(c)所示),,即PC響應(yīng)串行中斷第1次接收到第1個幀頭,,第2次響應(yīng)或者第n次響應(yīng)串行中斷接收到第2個幀頭。當(dāng)接收到第1個幀頭后,,S賦值為1,。當(dāng)下次響應(yīng)串行中斷時,判斷S的值,,如果是1,,表示第1個幀頭已經(jīng)找到,開始在接收到的幀數(shù)據(jù)中尋找第2個幀頭,;如果找到,,S賦值為2,并把從第2個幀頭開始的有效數(shù)據(jù)移到第1個幀頭后,,使待處理緩沖區(qū)的數(shù)據(jù)形成連續(xù)的一幀數(shù)據(jù)來處理,。
    判斷命令字是否為協(xié)議中規(guī)定的合法命令字。如果是,,將根據(jù)命令字所對應(yīng)的長度來判斷該幀數(shù)據(jù)的合法性,,因為在制定通信協(xié)議時,規(guī)定了特定命令字所對應(yīng)
的數(shù)據(jù)長度,,這兩點約束條件可以保證接收數(shù)據(jù)的合法性,,從而提高了系統(tǒng)的穩(wěn)定性。如果命令字和其對應(yīng)的長度值合法則將S賦值為3,,進(jìn)入下一步的數(shù)據(jù)處理步驟,。
    最后,關(guān)閉發(fā)送定時器,,防止處理的過程中有新的接收數(shù)據(jù)影響處理有效數(shù)據(jù)的過程,。處理完畢,打開發(fā)送定時器,,根據(jù)處理過程中標(biāo)志位的改變情況繼續(xù)與控制點進(jìn)行相應(yīng)的數(shù)據(jù)通信,。在處理接收數(shù)據(jù)的步驟中,如果任何一個步驟出現(xiàn)非法數(shù)據(jù),,則清空ReceBuffer[M]和DealBuffer[M],,認(rèn)為該幀數(shù)據(jù)傳輸出錯,丟棄該幀數(shù)據(jù),,并初始化接收變量,,重新設(shè)定接收超時定時器,接收下一次通信數(shù)據(jù),。
    本文通過完整的串行通信協(xié)議的設(shè)計,,在PC軟件發(fā)送端始終處于通信狀態(tài),,能以很快的速度響應(yīng)系統(tǒng)協(xié)議規(guī)定的命令字及其數(shù)據(jù)的發(fā)送。同時,,在PC軟件接收端,,采用逐字節(jié)處理的方式,通過設(shè)定全局變量來確定處理接收數(shù)據(jù)幀的步驟,,細(xì)化了處理接收數(shù)據(jù)的過程,保證了數(shù)據(jù)高效可靠的傳輸,。本系統(tǒng)已經(jīng)應(yīng)用在上海寶鋼集團(tuán)加油站信息管理系統(tǒng)中,,實驗結(jié)果證明,此協(xié)議的通信數(shù)據(jù)準(zhǔn)確,、通信效率高效可靠,、自適應(yīng)能力強(qiáng),具有在相關(guān)領(lǐng)域推廣的價值和意義,。
參考文獻(xiàn)
[1] 胡新華,,鄧元勇,王先平.多種通信網(wǎng)絡(luò)及接口轉(zhuǎn)換模塊的研制[J].計算機(jī)工程,,2009(6):1-3.
[2] 徐勇,,賀建民,王景玉.計算機(jī)硬件技術(shù)基礎(chǔ)[M].北京:北京交通大學(xué)出版社,,北京:清華大學(xué)出版,,2004.
[3] 謝瑞和.串行技術(shù)大全[M].北京:清華大學(xué)出版社, 2003.
[4] 王常力,,羅安.分布式控制系統(tǒng)(DCS)設(shè)計與應(yīng)用實例[M].北京:電子工業(yè)出版,,2005.
[5] 吳濤.PLC與上位機(jī)的高速通信實現(xiàn)[J].微計算機(jī)信息,2007,,12(1):52-54.
[6] REED K D.協(xié)議分析[M].孫坦,,張學(xué)鋒,譯.北京:電子工業(yè)出版社,,2004.
[7] 李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實踐[M].北京:人民郵電出版社,,2002.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。