關(guān) 閉

新聞中心

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

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

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

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

1 概述

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

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

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

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

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

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

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

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

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

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

2.1.2 MCS-51串口的多機(jī)通信方式

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

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

2.1.3 物理層的功能

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

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

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

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

*幀長(zhǎng)度域?yàn)槊恳粠牡谝粋€(gè)字節(jié),用來(lái)說(shuō)明幀體的長(zhǎng)度。

*冗余幀長(zhǎng)度域是可選的,它是幀長(zhǎng)度域的重復(fù),可以用來(lái)檢查在傳輸過(guò)程中幀長(zhǎng)度域是否存在傳輸錯(cuò)誤。

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

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

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

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

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

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

*冗余類(lèi)型域是可選的,它的作用是檢查類(lèi)型域在傳輸過(guò)程中是否存在錯(cuò)誤。

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

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

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

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

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

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

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

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

因?yàn)閭鬏敂?shù)據(jù)數(shù)量比較大,所以通信過(guò)程采用了無(wú)握手方式,以簡(jiǎn)化程序設(shè)計(jì),提高通信速度。通信雙方在接收時(shí)使用了復(fù)位幀,以保證在失去同步后及時(shí)恢復(fù)。幀格式如圖8所示(沒(méi)使用冗余字節(jié))。

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



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

評(píng)論


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

關(guān)閉