<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>
關(guān) 閉

新聞中心

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

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

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

http://dyxdggzs.com/article/201612/332843.htm

1 概述

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

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

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

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

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

2 協(xié)議的設計

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

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

2.1.1 EIA RS-485標準

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

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

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

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

2.1.3 物理層的功能

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

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

2.2 數據鏈路層協(xié)議設計

數據鏈路層的基本通信單位是帖,幀結構如圖4所示。

*幀長(cháng)度域為每一幀的第一個(gè)字節,用來(lái)說(shuō)明幀體的長(cháng)度。

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

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

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

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

2.3 應用層協(xié)議設計

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

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

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

*數據域是通信中傳輸的采集數據、系統參數等。

數據報可以分成兩類(lèi):命令型數據報(類(lèi)型域不為0)和數據型數據報(類(lèi)型域為0)。具體的命令可以根據具體的應用來(lái)設計,由具體程序負責解釋。

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

3 協(xié)議的具體實(shí)現及應用

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

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

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

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

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

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



關(guān)鍵詞: 總線(xià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>