關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 一種RS-485總線自定義通信協(xié)議及其應(yīng)用

一種RS-485總線自定義通信協(xié)議及其應(yīng)用

作者: 時間:2016-12-22 來源:網(wǎng)絡(luò) 收藏

http://m.butianyuan.cn/article/201612/332843.htm

1 概述

工業(yè)控制系統(tǒng)中,集散控制是目前最常用的測量控制方式。通常,一個集散控制系統(tǒng)由一個主控計算機(上位機)和一系列基于MCU的前端智能儀器(下位機)構(gòu)成,它們之間再通過一定的物理媒介連接在一起,以完成必要的通信功能。對于一個特定的測控系統(tǒng)而言,所要測控的對象和所采取的測控算法是個有個性的東西;而上位機和下位機之間的通信可以看作是一系列命令流和數(shù)據(jù)流的流動,所采用的通信協(xié)議是用來保證傳輸過程的可靠和高效,是具有共性的,能夠也應(yīng)該有一個統(tǒng)一的設(shè)計標(biāo)準(zhǔn)。

在集散控制系統(tǒng)中,普遍采用RS-485總線作為底層通信接口。它具有穩(wěn)定可靠、編程簡單、組網(wǎng)快速、價格低廉的優(yōu)點,但在協(xié)議設(shè)計實現(xiàn)方面并沒有一個統(tǒng)一的規(guī)范,導(dǎo)致不同的控制系統(tǒng)常常采用不同的通信協(xié)議。因此,有必要結(jié)合我們的工作實踐,設(shè)計一種有通用性的高效可靠的協(xié)議,從而簡化基于RS-485的分布式測試系統(tǒng)通信部分的設(shè)計,既能夠保證通信的穩(wěn)定可靠,又能夠把精力集中到測控系統(tǒng)算法的設(shè)計上。

通信協(xié)議的設(shè)計通常采用分層的機構(gòu),如ISO的OSI參考模型。這里也采用分層的結(jié)構(gòu)來描述我們自定義的基于RS-485總線的通信協(xié)議,如圖1所示。

圖1中,物理層是利用物理媒介實現(xiàn)物理連接的功能描述和執(zhí)行連接的規(guī)程,提供用于建立、保持和斷開物理連接的機械的、電氣的、功能的和過程的條件;數(shù)據(jù)鏈路層用于建立、維持和拆除鏈路連接,實現(xiàn)無差錯傳輸?shù)墓δ?;?yīng)用層針對不同的應(yīng)用,利用鏈路層提供的服務(wù),完成不同通信節(jié)點之間的通信。

下面結(jié)合每一層討論這種自定義協(xié)議的具體設(shè)計,重點介紹如何實現(xiàn)可靠高效的通信,如何處理通信中錯誤,如何編程實現(xiàn)。

2 協(xié)議的設(shè)計

2.1 物理層協(xié)議設(shè)計

RS-485通信網(wǎng)絡(luò)是一種總線式的結(jié)構(gòu),如圖2所示。上位機(以PC為例)和下位機(以基于MCS-51的智能儀器為例)都掛在通信總線上,物理層的通信協(xié)議由RS-485標(biāo)準(zhǔn)和MCS-51的多機通信方式共同方式。

2.1.1 EIA RS-485標(biāo)準(zhǔn)

RS-485是工業(yè)界使用最為廣泛的雙向、平衡傳輸標(biāo)準(zhǔn)接口,支持多點連接,允許創(chuàng)建多達(dá)32個節(jié)點的網(wǎng)絡(luò);具有傳輸距離遠(yuǎn)(最大傳輸距離1200m),傳輸速率快(1200 m時為100kb/s),抗干擾能力強,布線簡單等優(yōu)點。

2.1.2 MCS-51串口的多機通信方式

MCS-51具有多機通信功能。當(dāng)串口以方式2(或方式3)接收時,若SM2(多機控制位)為1,這時只接收第9位為1的串行數(shù)據(jù)(把第9位為1的串行字節(jié)稱為地址,把第9位為9的串行字節(jié)稱為數(shù)據(jù));當(dāng)SM2=0時,不論第9位為何值都接收。

這種功能使得基于MCS-51的智能儀器能夠方便地通過RS-485接口芯片組成網(wǎng)絡(luò)。

2.1.3 物理層的功能

物理層要完成發(fā)送及接收字節(jié)流的任務(wù),但對傳輸過程的可靠性不做出保證,而由高層協(xié)議來保證。物理層為鏈路層提供接口(以子程序的形式來描述),包括Send子程序(功能為發(fā)送一個字節(jié))及Receive子程序(功能為接收一個字節(jié))。

發(fā)送程序比較簡單,接收程序的流程如圖3所示(以MCS-51為例)。采用循環(huán)查詢RI標(biāo)志位的方式,可以在規(guī)定的時間內(nèi)(即在規(guī)定的循環(huán)次數(shù)內(nèi))實現(xiàn)一個字節(jié)的接收。規(guī)定時間的長短由循環(huán)次數(shù)決定。如果在規(guī)定的時間內(nèi)未收到,則視為通信失敗。

2.2 數(shù)據(jù)鏈路層協(xié)議設(shè)計

數(shù)據(jù)鏈路層的基本通信單位是帖,幀結(jié)構(gòu)如圖4所示。

*幀長度域為每一幀的第一個字節(jié),用來說明幀體的長度。

*冗余幀長度域是可選的,它是幀長度域的重復(fù),可以用來檢查在傳輸過程中幀長度域是否存在傳輸錯誤。

*幀體域用來封裝來自上層(應(yīng)用層)的數(shù)據(jù)報,長度是1~255B,鏈路層對這一部分不做處理,由應(yīng)用層處理。

鏈路層可以采用如下方法進(jìn)行差錯處理。首先,幀長度域的引入可以方便程序的設(shè)計,同時也能夠起到一定的檢查錯誤的功能,可以發(fā)現(xiàn)傳輸過程中丟失字節(jié)的錯誤,并且丟棄緩沖區(qū)接收錯誤的字節(jié)。首次,可以采用冗余字節(jié)的方法,對關(guān)鍵字節(jié)(幀長度)發(fā)送兩次,只有接收到的兩個幀長度字節(jié)一致時才認(rèn)為接收到的是正確的。此外,對發(fā)送的每個字節(jié)可以采用CRC校驗等方法進(jìn)行校驗。

鏈路層向上層(應(yīng)用層)提供的接口(以子程序的形式來描述)為SendFrame(功能是發(fā)送一幀)和ReceiveFrame(功能是接收一幀),程序流程如圖5所示,其中利用了下層(物理層)提供的接口。

2.3 應(yīng)用層協(xié)議設(shè)計

應(yīng)用層是協(xié)議的最高層,它的設(shè)計對于不同的應(yīng)用可以有所不同,但是也存在很多通用性的原則。應(yīng)用層數(shù)據(jù)報的格式如圖6所示。

*類型域用來指定數(shù)據(jù)報的類型,一共可以表示256種類型,其中,0用來表示數(shù)據(jù);其它256種用來表示命令。

*冗余類型域是可選的,它的作用是檢查類型域在傳輸過程中是否存在錯誤。

*數(shù)據(jù)域是通信中傳輸?shù)牟杉瘮?shù)據(jù)、系統(tǒng)參數(shù)等。

數(shù)據(jù)報可以分成兩類:命令型數(shù)據(jù)報(類型域不為0)和數(shù)據(jù)型數(shù)據(jù)報(類型域為0)。具體的命令可以根據(jù)具體的應(yīng)用來設(shè)計,由具體程序負(fù)責(zé)解釋。

應(yīng)用層也個有一定的差錯檢查能力:首先,它引入了冗余類型字節(jié);其次,數(shù)據(jù)域字節(jié)也可以采用CRC校驗等方法進(jìn)行校驗。

3 協(xié)議的具體實現(xiàn)及應(yīng)用

在設(shè)計基于RS-485的分布式測控系統(tǒng)時,在上位機呼叫下位機地址之后就可利用本協(xié)議的規(guī)范來設(shè)計具體的通信流程。

基于本協(xié)議的通信可以有兩種機制。一種是面向握手的,即每發(fā)出一幀,總是要等待確認(rèn)幀,否則將認(rèn)為是通信出錯。這是一種可靠的通信方式,適合傳輸系統(tǒng)命令和一些非常重要的系統(tǒng)參數(shù)。另一種是無握手的,即發(fā)送方假設(shè)接收方總是接收正確,從而無須等待確認(rèn)幀就不停地發(fā)送,適合大量前端采集數(shù)據(jù)的發(fā)送。這種機制的優(yōu)點是發(fā)送過程簡單、快速,缺點是不能保證傳輸過程的可靠性。

另外,接收方倘若在規(guī)定的時間內(nèi)不能接收到數(shù)據(jù),則可以發(fā)送復(fù)位幀,同時接收方的程序回到通信程序的開始,并清空緩沖區(qū)的數(shù)據(jù);而發(fā)送方的收到復(fù)位幀后也回到通信程序的開始,并清空緩沖區(qū)中的數(shù)據(jù)。然后,雙方重新同步。

本協(xié)議已經(jīng)成功地運用到一個分布式電力參數(shù)監(jiān)測系統(tǒng)中,不僅簡化通信程序的設(shè)計,而且保證了通信的高效和可靠。該系統(tǒng)基于RS-485總線的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與圖2類似。下位機負(fù)責(zé)現(xiàn)場的電力量的采樣和存儲,上位機負(fù)責(zé)循環(huán)呼叫下位機,以了解現(xiàn)場情況是否正常,并且每幀一定時間收集下位機存儲的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行分析管理。上位機收集下位機數(shù)據(jù)的程序流程如圖7所示。

因為傳輸數(shù)據(jù)數(shù)量比較大,所以通信過程采用了無握手方式,以簡化程序設(shè)計,提高通信速度。通信雙方在接收時使用了復(fù)位幀,以保證在失去同步后及時恢復(fù)。幀格式如圖8所示(沒使用冗余字節(jié))。

實驗證明,本協(xié)議具有編程簡單、通信可靠、易于擴展的優(yōu)點,能夠有效地推廣到基于RS-485的分布式測控系統(tǒng)中。



關(guān)鍵詞: 總線應(yīng)

評論


技術(shù)專區(qū)

關(guān)閉