Modbus規約簡介

ModBus通訊協議
Modbus是一種串行通信協議,通過此協議,控制器相互之間、控制器經由網路(如以太網)和其它設備之間可以通信。他已經成爲一通用工業標準。有了它,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。
協議採用主從通信模式,典型的主設備包括現場儀表和顯示面板,典型的從設備爲可編程邏輯控制器(PLC)。
主要優點:內容公開、無版權要求、不用支付額外的費用、硬件簡單、容易部署。
一、傳輸方式
1、協議數據單元
Protocol Data Unit,PDU,協議數據單元由功能碼+數據結構構成,如下圖:
在這裏插入圖片描述

協議數據單元
功能碼長度——1字節,表示要執行的功能;
數據長度——0~252個字節,表示要讀取的地址或要寫入的值,不同的功能碼對應的數據有所不同。
協議數據單元有三種類型:
請求型協議數據單元(Request PDU)
應答型協議數據單元(Response PDU)
異常應答型協議數據單元(Exception Response PDU)
協議數據單元是Modbus協議通用數據結構,它與底層物理結構無關。但通信時,需要依賴與物理網絡。因此要把協議數據單元映射到物理網絡上,這就形成了應用數據單元(Application Data Unit,ADU)。由於底層網絡的不同,ASCII與RTU應用數據單元結構與TCP應用數據單元的結構不同。
在這裏插入圖片描述

ASCII與RTU應用數據單元結構
TCP應用數據單元結構如下:
在這裏插入圖片描述

TCP應用數據單元結構
TCP應用數據單元在協議數據單元的基礎上,添加了一個叫「MBAP」頭的結構,即「ModBus Application」應用數據單元。
在這裏插入圖片描述

MBAP頭結構
其中:
傳輸標識符:用於標識應用數據單元,即請求和應答之間的配對;客戶端對該部分進行初始化,服務端將其拷貝到自己的ADU中;
協議標識符:系統間的協議標識,0==Modbus;
長度:接下來要發送的數據長度,即:單元標識符+PDU的總長度,以字節位單位;
單元標識符:用於系統間的站尋址,比如在以太網+串行鏈路中,遠程站的地址;
2、協議類型
Modbus協議包括ASCII、RTU、TCP,並沒有規定物理層。此協議定義了控制器能夠識別和使用的消息結構,而不管它是經過何種網絡進行通信的。
Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和應答的方式,數據通訊採用Master/Slave模式,Master端發出數據請求消息,Slave端接收到正確消息後發送數據到Master端以響應請求;Master端可以直接發送消息修改Slave端的數據,實現雙向讀寫。
Modbus協議需要對數據進行校驗,串行協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗,但TCP模式沒有額外規定校驗,因爲TCP協議是面向連接的可靠協議。
Modbus採用主從方式收發數據,在實際使用中如果某個Slave站點斷開後(如故障或關機),Master端可以診斷出來,而當故障修復後,網絡又可自動連接。因此,Modbus協議的可靠性較好。
TCP和RTU協議非常類似,只要把RTU協議的兩個字節的校驗碼去掉,然後再RTU協議的開始加上五個0和一個6並通過TCP/IP網絡協議發送儲區即可。

3、ASCII
異步串行通信,主要基於RS485串口通信媒介,消息中的每個8bit字節都作爲兩個ASCII碼發送,可以做到字符發生的時間間隔長達1秒而不產生錯誤。
在這裏插入圖片描述

使用ASCII模式,消息以冒號(:)字符(ASCII碼 3AH)開始,以回車換行符結束(ASCII碼 0DH,0AH)。
在這裏插入圖片描述

其它域可以使用的傳輸字符是十六進制的0…9,A…F。網絡上的設備不斷偵測「:」字符,當有一個冒號接收到時,每個設備都解碼下個域(地址域)來判斷是否發給自己的。
在該模式下,每個8位的字節被拆分成兩個ASCII字符進行發送,比如發送0xAF(10101111),會分解成「A」(0x41,01000001)和「F」(0x46,01000110)兩個字符,其發送量是RTU的一倍。
在這裏插入圖片描述
ASCII碼對照表一
在這裏插入圖片描述

ASCII碼對照表二
LRC校驗
LRC域是一個包含一個8位的二進制字節。LRC由傳輸端計數並置於消息幀中,接收端在接收數據中計算LRC,並將結果與消息幀中的LRC進行校驗,若出現差異,這說明有誤。
LRC計算方式
將消息幀中開始處的「冒號」和結尾的「回車」、「換行」移除,其餘的字符按字節疊加後取反加一。
4、RTU
在這裏插入圖片描述
Modbus-RTU是一種主從通信模式,
在這裏插入圖片描述
ASCII協議與RTU協議進行比較

二、數據模型
數據模型是對可訪問數據的一種抽象,Modbus協議的數據模型定義了四種可訪問的數據,分別是:
離散量輸入(Discrete Input)
線圈(Coils)
輸入寄存器(Input registers)
保持寄存器(Holding registers)
在這裏插入圖片描述
在這裏插入圖片描述
Modbus協議數據模型
Modebus協議允許設備將四種數據分別映射到不同的存儲區中,各個區塊之間相互獨立,使用不同的功能碼可以讀取到相應的數值,如下圖:
在這裏插入圖片描述
Modbus數據模型映射到不同的存儲區塊
協議也允許設備將四種數據映射到用以存儲區塊中,這樣通過不同的功能碼讀取數據可能會得到相同的數據(比如:輸入寄存器和保持寄存器位同一物理區塊),如下圖:
在這裏插入圖片描述
Modbus數據模型映射到同一區塊
數據模型中的數據最大允許有65596個元素,編號從1開始:165536,元素地址從0開始:065535。
需要說明的是:65536只是協議允許的最大元素範圍,但並不要求全部實現。Modbus協議允許設備根據自己的實際情況實現部分元素,甚至不要求實現模型中全部四種數據。
三、地址模式
爲了簡化數據模型與設備存儲區的對應關係,引入了一種地址模型,該模型通過編號的方式對不同類型數據進行區分呢個,各數據的地址編號如下:
在這裏插入圖片描述
Modbus地址模型
Modbus地址模型的編號從1開始,由於每種數據都最大支持65536個元素,因此理論上,
線圈型數據,其地址範圍爲:000001~065536;
離散型輸入,其地址範圍爲:100001~165536;
輸入寄存器,其地址範圍爲:300001~365536;
存儲寄存器,其地址範圍爲:400001~465536;
由於65536是比較大的數值,實際應用一般不需要過大的存儲區,因此PLC廠家普遍採用的是10000以內的地址範圍,即:
線圈型數據,其地址範圍爲:00001~09999;
離散型輸入,其地址範圍爲:10001~19999;
輸入寄存器,其地址範圍爲:30001~39999;
存儲寄存器,其地址範圍爲:40001~49999;
各PLC廠家根據PLC的實際情況,將Modbus的地址模型映射到實際的存儲區。一般來說:
線圈——過程輸出印象區(Q)
離散量輸入——過程輸入印象區(I)
輸入寄存器——模擬量輸入(AI)
保持寄存器——數據塊或V存儲區或M存儲區。
以西門子S7-200 SMART爲例:
在這裏插入圖片描述
Modbus地址模型對於RUT、ASCII和TCP都適用。
四、功能碼錶
在這裏插入圖片描述
Modbus功能碼錶一
在這裏插入圖片描述 Modbus功能碼錶二