一種RS-485總線自定義通信協(xié)議及其應(yīng)用
http://www.ex-cimer.com/article/201612/332843.htm 1 概述 在工業(yè)控制系統(tǒng)中,集散控制是目前最常用的測量控制方式。通常,一個(gè)集散控制系統(tǒng)由一個(gè)主控計(jì)算機(jī)(上位機(jī))和一系列基于MCU的前端智能儀器(下位機(jī))構(gòu)成,它們之間再通過一定的物理媒介連接在一起,以完成必要的通信功能。對(duì)于一個(gè)特定的測控系統(tǒng)而言,所要測控的對(duì)象和所采取的測控算法是個(gè)有個(gè)性的東西;而上位機(jī)和下位機(jī)之間的通信可以看作是一系列命令流和數(shù)據(jù)流的流動(dòng),所采用的通信協(xié)議是用來保證傳輸過程的可靠和高效,是具有共性的,能夠也應(yīng)該有一個(gè)統(tǒng)一的設(shè)計(jì)標(biāo)準(zhǔn)。 在集散控制系統(tǒng)中,普遍采用RS-485總線作為底層通信接口。它具有穩(wěn)定可靠、編程簡單、組網(wǎng)快速、價(jià)格低廉的優(yōu)點(diǎn),但在協(xié)議設(shè)計(jì)實(shí)現(xiàn)方面并沒有一個(gè)統(tǒng)一的規(guī)范,導(dǎo)致不同的控制系統(tǒng)常常采用不同的通信協(xié)議。因此,有必要結(jié)合我們的工作實(shí)踐,設(shè)計(jì)一種有通用性的高效可靠的協(xié)議,從而簡化基于RS-485的分布式測試系統(tǒng)通信部分的設(shè)計(jì),既能夠保證通信的穩(wěn)定可靠,又能夠把精力集中到測控系統(tǒng)算法的設(shè)計(jì)上。
圖1中,物理層是利用物理媒介實(shí)現(xiàn)物理連接的功能描述和執(zhí)行連接的規(guī)程,提供用于建立、保持和斷開物理連接的機(jī)械的、電氣的、功能的和過程的條件;數(shù)據(jù)鏈路層用于建立、維持和拆除鏈路連接,實(shí)現(xiàn)無差錯(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),布線簡單等優(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é)稱為地址,把第9位為9的串行字節(jié)稱為數(shù)據(jù));當(dāng)SM2=0時(shí),不論第9位為何值都接收。
這種功能使得基于MCS-51的智能儀器能夠方便地通過RS-485接口芯片組成網(wǎng)絡(luò)。
2.1.3 物理層的功能
物理層要完成發(fā)送及接收字節(jié)流的任務(wù),但對(duì)傳輸過程的可靠性不做出保證,而由高層協(xié)議來保證。物理層為鏈路層提供接口(以子程序的形式來描述),包括Send子程序(功能為發(fā)送一個(gè)字節(jié))及Receive子程序(功能為接收一個(gè)字節(jié))。
發(fā)送程序比較簡單,接收程序的流程如圖3所示(以MCS-51為例)。采用循環(huán)查詢RI標(biāo)志位的方式,可以在規(guī)定的時(shí)間內(nèi)(即在規(guī)定的循環(huán)次數(shù)內(nèi))實(shí)現(xiàn)一個(gè)字節(jié)的接收。規(guī)定時(shí)間的長短由循環(huán)次數(shù)決定。如果在規(guī)定的時(shí)間內(nèi)未收到,則視為通信失敗。
2.2 數(shù)據(jù)鏈路層協(xié)議設(shè)計(jì)
數(shù)據(jù)鏈路層的基本通信單位是帖,幀結(jié)構(gòu)如圖4所示。
*冗余幀長度域是可選的,它是幀長度域的重復(fù),可以用來檢查在傳輸過程中幀長度域是否存在傳輸錯(cuò)誤。
*幀體域用來封裝來自上層(應(yīng)用層)的數(shù)據(jù)報(bào),長度是1~255B,鏈路層對(duì)這一部分不做處理,由應(yīng)用層處理。
鏈路層可以采用如下方法進(jìn)行差錯(cuò)處理。首先,幀長度域的引入可以方便程序的設(shè)計(jì),同時(shí)也能夠起到一定的檢查錯(cuò)誤的功能,可以發(fā)現(xiàn)傳輸過程中丟失字節(jié)的錯(cuò)誤,并且丟棄緩沖區(qū)接收錯(cuò)誤的字節(jié)。首次,可以采用冗余字節(jié)的方法,對(duì)關(guān)鍵字節(jié)(幀長度)發(fā)送兩次,只有接收到的兩個(gè)幀長度字節(jié)一致時(shí)才認(rèn)為接收到的是正確的。此外,對(duì)發(fā)送的每個(gè)字節(jié)可以采用CRC校驗(yàn)等方法進(jìn)行校驗(yàn)。
鏈路層向上層(應(yīng)用層)提供的接口(以子程序的形式來描述)為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所示。
*類型域用來指定數(shù)據(jù)報(bào)的類型,一共可以表示256種類型,其中,0用來表示數(shù)據(jù);其它256種用來表示命令。
*冗余類型域是可選的,它的作用是檢查類型域在傳輸過程中是否存在錯(cuò)誤。
*數(shù)據(jù)域是通信中傳輸?shù)牟杉瘮?shù)據(jù)、系統(tǒng)參數(shù)等。
數(shù)據(jù)報(bào)可以分成兩類:命令型數(shù)據(jù)報(bào)(類型域不為0)和數(shù)據(jù)型數(shù)據(jù)報(bào)(類型域?yàn)?)。具體的命令可以根據(jù)具體的應(yīng)用來設(shè)計(jì),由具體程序負(fù)責(zé)解釋。
應(yīng)用層也個(gè)有一定的差錯(cuò)檢查能力:首先,它引入了冗余類型字節(jié);其次,數(shù)據(jù)域字節(jié)也可以采用CRC校驗(yàn)等方法進(jìn)行校驗(yàn)。
3 協(xié)議的具體實(shí)現(xiàn)及應(yīng)用
在設(shè)計(jì)基于RS-485的分布式測控系統(tǒng)時(shí),在上位機(jī)呼叫下位機(jī)地址之后就可利用本協(xié)議的規(guī)范來設(shè)計(jì)具體的通信流程。
基于本協(xié)議的通信可以有兩種機(jī)制。一種是面向握手的,即每發(fā)出一幀,總是要等待確認(rèn)幀,否則將認(rèn)為是通信出錯(cuò)。這是一種可靠的通信方式,適合傳輸系統(tǒng)命令和一些非常重要的系統(tǒng)參數(shù)。另一種是無握手的,即發(fā)送方假設(shè)接收方總是接收正確,從而無須等待確認(rèn)幀就不停地發(fā)送,適合大量前端采集數(shù)據(jù)的發(fā)送。這種機(jī)制的優(yōu)點(diǎn)是發(fā)送過程簡單、快速,缺點(diǎn)是不能保證傳輸過程的可靠性。
另外,接收方倘若在規(guī)定的時(shí)間內(nèi)不能接收到數(shù)據(jù),則可以發(fā)送復(fù)位幀,同時(shí)接收方的程序回到通信程序的開始,并清空緩沖區(qū)的數(shù)據(jù);而發(fā)送方的收到復(fù)位幀后也回到通信程序的開始,并清空緩沖區(qū)中的數(shù)據(jù)。然后,雙方重新同步。
因?yàn)閭鬏敂?shù)據(jù)數(shù)量比較大,所以通信過程采用了無握手方式,以簡化程序設(shè)計(jì),提高通信速度。通信雙方在接收時(shí)使用了復(fù)位幀,以保證在失去同步后及時(shí)恢復(fù)。幀格式如圖8所示(沒使用冗余字節(jié))。
實(shí)驗(yàn)證明,本協(xié)議具有編程簡單、通信可靠、易于擴(kuò)展的優(yōu)點(diǎn),能夠有效地推廣到基于RS-485的分布式測控系統(tǒng)中。
評(píng)論