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