在工業(yè)控制、電力通訊、智能儀表等領(lǐng)域,通常情況下是采用串口通信的方式進(jìn)行數(shù)據(jù)交換。最初采用的方式是RS232接口,由于工業(yè)現(xiàn)場比較復(fù)雜,各種電氣設(shè)備會在環(huán)境中產(chǎn)生比較多的電磁干擾,會導(dǎo)致信號傳輸錯誤。除此之外,RS232接口只能實(shí)現(xiàn)點(diǎn)對點(diǎn)通信,不具備聯(lián)網(wǎng)功能,最大傳輸距離也只能達(dá)到幾十米,不能滿足遠(yuǎn)距離通信要求。而RS485則解決了這些問題,數(shù)據(jù)信號采用差分傳輸方式,可以有效的解決共模干擾問題,最大距離可以到1200米,并且允許多個收發(fā)設(shè)備接到同一條總線上。隨著工業(yè)應(yīng)用通信越來越多,1979年施耐德電氣制定了一個用于工業(yè)現(xiàn)場的總線協(xié)議Modbus協(xié)議,現(xiàn)在工業(yè)中使用RS485通信場合很多都采用Modbus協(xié)議,本文講解RS485通信和Modbus協(xié)議。
RS485特點(diǎn)
1、差分輸入最大的優(yōu)勢是可以抑制共模干擾。尤其工業(yè)現(xiàn)場的環(huán)境比較復(fù)雜,干擾比較多,所以通信如果采用的是差分方式,就可以有效的抑制共模干擾。而RS485就是一種差分通信方式,它的通信線路是兩根,通常用A和B或者D+和D-來表示。邏輯“1”以兩線之間的電壓差為+(0.2~6)V表示,邏輯“0”以兩線間的電壓差為-(0.2~6)V來表示,是一種典型的差分通信。
2、RS485通信速度快,最大傳輸速度可以達(dá)到10Mb/s以上。
3、RS485內(nèi)部的物理結(jié)構(gòu),采用的是平衡驅(qū)動器和差分接收器的組合,抗干擾能力也大大增加。
4、傳輸距離最遠(yuǎn)可以達(dá)到1200米左右,但是他的傳輸速率和傳輸距離是成反比的,只有在100Kb/s以下的傳輸速度,才能達(dá)到最大的通信距離,如果需要傳輸更遠(yuǎn)距離可以使用中繼。
5、可以在總線上進(jìn)行聯(lián)網(wǎng)實(shí)現(xiàn)多機(jī)通信,總線上允許掛多個收發(fā)器,從現(xiàn)有的RS485芯片來看,有可以掛32、64、128、256等不同個設(shè)備的驅(qū)動器。
RS485通訊電纜結(jié)構(gòu)圖
RS485的接口非常簡單,和RS232所使用的MAX232是類似的,只需要一個RS485轉(zhuǎn)換器,就可以直接和我們單片機(jī)的UART串行接口連接起來,并且完全使用的是和UART一致的異步串行通信協(xié)議。但是由于RS485是差分通信,因此接收數(shù)據(jù)和發(fā)送數(shù)據(jù)是不能同時進(jìn)行的,也就是說它是一種半雙工通信。
Modbus協(xié)議特點(diǎn)
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信,已經(jīng)成為一種工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。這種協(xié)議定義了一種控制器能夠認(rèn)識使用的數(shù)據(jù)結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了控制器請求訪問其他設(shè)備的過程,如何回應(yīng)來自其他設(shè)備的請求,以及怎樣偵測錯誤記錄,它制定了通信數(shù)據(jù)的格局和內(nèi)容的公共格式。
在進(jìn)行多機(jī)通信的時候,Modbus協(xié)議規(guī)定每個控制器必須要知道他們的設(shè)備地址,識別按照地址發(fā)送過來的數(shù)據(jù),決定是否要產(chǎn)生動作,產(chǎn)生何種動作,如果要回應(yīng),控制器將生成的反饋信息用Modbus協(xié)議發(fā)出。
Modbus協(xié)議允許在各種網(wǎng)絡(luò)體系結(jié)構(gòu)內(nèi)進(jìn)行簡單通信,每種設(shè)備(PLC、人機(jī)界面、控制面板、驅(qū)動程序、輸入輸出設(shè)備)都能使用Modbus協(xié)議來啟動遠(yuǎn)程操作,一些網(wǎng)關(guān)允許在幾種使用Modbus協(xié)議的總線或網(wǎng)絡(luò)之間的通信。
通訊說明
控制器采用RS-485總線,協(xié)議符合ModBusRTU規(guī)約。
數(shù)據(jù)傳輸均采用8位數(shù)據(jù)位、1位停止位、無奇偶校驗位。波特率可設(shè)為1200-9600bit/s。通訊傳送分為獨(dú)立的信息頭,和發(fā)送的編碼數(shù)據(jù)。以下的通訊傳送方式定義與RTU通訊規(guī)約相兼容:
初始結(jié)構(gòu)=>=4字節(jié)的時間地址碼=1字節(jié)功能碼=1字節(jié)數(shù)據(jù)區(qū)=N字節(jié)
錯誤校檢=16位CRC碼結(jié)束結(jié)構(gòu)=>=4字節(jié)的時間
地址碼:地址碼為通訊傳送的第一個字節(jié)。這個字節(jié)表明由用戶設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來的信息。并且每個從機(jī)都有具有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開始。主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。
功能碼:通訊傳送的第二個字節(jié)。ModBus通訊規(guī)約定義功能號為1到127。本控制器利用其中的一部分功能碼。作為主機(jī)請求發(fā)送,通過功能碼告訴從機(jī)執(zhí)行什么動作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位(比如功能碼大于127),則表明從機(jī)沒有響應(yīng)操作或發(fā)送出錯。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)是根據(jù)不同的功能碼而不同。CRC碼:二字節(jié)的錯誤檢測碼。
當(dāng)通訊命令發(fā)送至儀器時,符合相應(yīng)地址碼的設(shè)備接通訊命令,并除去地址碼,讀取信息,如果沒有出錯,則執(zhí)行相應(yīng)的任務(wù);然后把執(zhí)行結(jié)果返送給發(fā)送者。返送的信息中包括地址碼、執(zhí)行動作的功能碼、執(zhí)行動作后結(jié)果的數(shù)據(jù)以及錯誤校驗碼。如果出錯就不發(fā)送任何信息。
接線說明
一條總線連接多個表的接線圖