1. 程式人生 > >經過整理的Modbus通訊協議詳解(一)

經過整理的Modbus通訊協議詳解(一)

Modbus通訊協議簡介

Modbus協議

Modbus協議最初由Modicon公司開發出來,在1979年末該公司成為施耐德自動化(Schneider Automation)部門的一部分,現在Modbus已經是工業領域全球最流行的協議。此協議支援傳統的RS-232、RS-422、RS-485和乙太網裝置。許多工業裝置,包括PLC,DCS,智慧儀表等都在使用Modbus協議作為他們之間的通訊標準。有了它,不同廠商生產的控制裝置可以連成工業網路,進行集中監控。

當在網路上通訊時,Modbus協議決定了每個控制器須要知道它們的裝置地址,識別按地址發來的訊息,決定要產生何種行動。如果需要回應,控制器將生成應答並使用Modbus協議傳送給詢問方。

Modbus協議包括ASCII、RTU、TCP等,並沒有規定物理層。此協議定義了控制器能夠認識和使用的訊息結構,而不管它們是經過何種網路進行通訊的。標準的Modicon控制器使用RS232C實現序列的Modbus。Modbus的ASCII、RTU協議規定了訊息、資料的結構、命令和就答的方式,資料通訊採用Maser/Slave方式,Master端發出資料請求訊息,Slave端接收到正確訊息後就可以傳送資料到Master端以響應請求;Master端也可以直接發訊息修改Slave端的資料,實現雙向讀寫。

Modbus協議需要對資料進行校驗,序列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連線的可靠協議。另外,Modbus採用主從方式定時收發資料,在實際使用中如果某Slave站點斷開後(如故障或關機),Master端可以診斷出來,而當故障修復後,網路又可自動接通。因此,Modbus協議的可靠性較好。


Modbus的傳輸層
1、  Modbus網路上轉輸

在Modbus網路上通訊時,此協議決定了每個控制器須要知道它們的裝置地址,識別按地址發來的訊息,決定要產生何種行動。如果需要回應,控制器將生成反饋資訊並用Modbus協議發出。在其它網路上,包含了Modbus協議的訊息轉換為在此網路上使用的幀或包結構。這種轉換也擴充套件了根據具體的網路解決節地址、路由路徑及錯誤檢測的方法。

控制器通訊使用主—從技術,即僅一裝置(主裝置)能初始化傳輸(查詢)。其它裝置(從裝置)根據主裝置查詢提供的資料作出相應反應。典型的主裝置:主機和可程式設計儀表。典型的從裝置:可程式設計控制器。

主裝置可單獨和從裝置通訊,也能以廣播方式和所有從裝置通訊。如果單獨通訊,從裝置返回一訊息作為迴應,如果是以廣播方式查詢的,則不作任何迴應。Modbus協議建立了主裝置查詢的格式:裝置(或廣播)地址、功能程式碼、所有要傳送的資料、一錯誤檢測域。

從裝置迴應訊息也由Modbus協議構成,包括確認要行動的域、任何要返回的資料、和一錯誤檢測域。如果在訊息接收過程中發生一錯誤,或從裝置不能執行其命令,從裝置將建立一錯誤訊息並把它作為迴應傳送出去。

2、在其它型別網路上轉輸

在其它網路上,控制器使用對等技術通訊,故任何控制都能初始和其它控制器的通訊。這樣在單獨的通訊過程中,控制器既可作為主裝置也可作為從裝置。提供的多個內部通道可允許同時發生的傳輸程序。

        在訊息位,Modbus協議仍提供了主—從原則,儘管網路通訊方法是“對等”。如果一控制器傳送一訊息,它只是作為主裝置,並期望從從裝置得到迴應。同樣,當控制器接收到一訊息,它將建立一從裝置迴應格式並返回給傳送的控制器。

2、 查詢—迴應週期

(1)查詢
查詢訊息中的功能程式碼告之被選中的從裝置要執行何種功能。資料段包含了從裝置要執行功能的任何附加資訊。例如功能程式碼03是要求從裝置讀保持暫存器並返回它們的內容。資料段必須包含要告之從裝置的資訊:從何暫存器開始讀及要讀的暫存器數量。錯誤檢測域為從裝置提供了一種驗證訊息內容是否正確的方法。


(2)迴應
如果從裝置產生一正常的迴應,在迴應訊息中的功能程式碼是在查詢訊息中的功能程式碼的迴應。資料段包括了從裝置收集的資料:象暫存器值或狀態。如果有錯誤發生,功能程式碼將被修改以用於指出迴應訊息是錯誤的,同時資料段包含了描述此錯誤資訊的程式碼。錯誤檢測域允許主裝置確認訊息內容是否可用。


通訊傳送方式:

標準的Modbus口是使用一RS-232C相容序列介面,它定義了連線口的針腳、電纜、訊號位、傳輸波特率、奇偶校驗。控制器能直接或經由Modem組網。


   通訊傳送分為獨立的資訊頭,和傳送的編碼資料。以下的通訊傳送方式定義也與MODBUS RTU通訊規約相相容:

編 碼
 8位二進位制
 
起始位
 1位
 
資料位
 8位
 
奇偶校驗位
 1位(偶校驗位)
 
停止位
 1位
 
錯誤校檢
 CRC(冗餘迴圈碼)
 


資訊幀結構

當通訊命令傳送至儀器時,符合相應地址碼的裝置接通訊命令,併除去地址碼,讀取資訊,如果沒有出錯,則執行相應的任務;然後把執行結果返送給傳送者。返送的資訊中包括地址碼、執行動作的功能碼、執行動作後結果的資料以及錯誤校驗碼。如果出錯就不傳送任何資訊。

地址碼
 功能碼
 資料區
 錯誤校驗碼
 
8位
 8位
 N × 8位
 16位
 

初始結構 = ≥4位元組的時間
地址碼 = 1 位元組
功能碼 = 1 位元組
資料區 = N 位元組
錯誤校檢 = 16位CRC碼
結束結構 = ≥4位元組的時間


  地址碼:地址碼為通訊傳送的第一個位元組。這個位元組表明由使用者設定地址碼的從機將接收由主機發送來的資訊。每個從機都必須有唯一的地址碼,並且只有符合地址碼的從機才能響應回送。當從機回送資訊時,相當的地址碼錶明該資訊來自於何處。主機發送的地址碼錶明將傳送到的從機地址,而從機發送的地址碼錶明回送的從機地址。

功能碼:通訊傳送的第二個位元組。主機發送的功能碼告訴從機執行什麼任務。ModBus通訊規約定義功能號為1到127。本儀表只利用其中的一部分功能碼。作為主機請求傳送,通過功能碼告訴從機執行什麼動作。作為從機響應,從機發送的功能碼與從主機發送來的功能碼一樣,並表明從機已響應主機進行操作。如果從機發送的功能碼的最高位為1(比如功能碼大與此同時127),則表明從機沒有響應操作或傳送出錯。

資料區:資料區包含需要從機執行什麼動作或由從機採集的返送資訊。這些資訊可以是數值、參考地址等等。例如,功能碼告訴從機讀取暫存器的值,則資料區必需包含要讀取暫存器的起始地址及讀取長度。對於不同的從機,地址和資料資訊都不相同。

錯誤校驗碼:主機或從機可用校驗碼進行判別接收資訊是否出錯。有時,由於電子噪聲或其它一些干擾,資訊在傳輸過程中會發生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的資訊不起作用。這樣增加了系統的安全和效率。錯誤校驗採用CRC-16校驗方法。

注:資訊幀的格式都基本相同:地址碼、功能碼、資料區和錯誤校驗碼