一文看懂Modbus协议
目錄
1、協議簡介
2、協議格式
3、數據模型
1、協議簡介
自從 1979 年出現工業串行鏈路的事實標準以來,Modbus使成千上萬的自動化設備能夠通信。Modbus?是OSI模型第 7 層上的應用層報文傳輸協議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。Modbus應用層協議和服務規范主要包含兩類:一類是串行鏈路上的Modbus(Modbus 串行鏈路取決于TIA/EIA 標準:232-F 和 485-A),另一類是TCP/IP 上的Modbus(Modbus?TCP/IP 取決于IETF 標準:RFC793 和 RFC791 有關)。Modbus通信棧示意圖如下所示:
Modbus協議允許在各種網絡體系結構內進行簡單通信,每種設備(PLC、HMI、控制面板、驅動程序、動作控制、輸入/輸出設備)都能使用 Modbus協議來啟動遠程操作。在基于串行鏈路和以太 TCP/IP 網絡的 Modbus上可以進行相同通信,一些網關允許在幾種使用 Modbus協議的總線或網絡之間進行通信。Modbus網絡體系結構的實例如下所示:
2、協議格式
Modbus協議本質上和我們平時自定義的協議一致,就是一種數據傳輸格式,也是由起始幀、數據幀、校驗幀等組成,只不過Modbus協議更為規范。
Modbus協議定義了一個與基礎通信層無關的簡單協議數據單元(PDU)。特定總線或網絡上 的 Modbus協議映射能夠在應用數據單元(ADU)上引入一些附加域,通用Modbus幀協議如下圖所示:
具體解析如下:?
- 地址域:子節點的地址信息;
- 功能碼:指明服務器要執行的動作,有效的碼字范圍是十進制 1-255(128-255 為異常響應保留),當從客戶機向服務器設備發送報文時,功能碼域通知服務器執行哪種操作(功能碼內容較多,建議查閱Modbus協議說明手冊,上面介紹的很清晰)。
- 數據:傳輸的數據內容,在某種請求中,數據可以是不存在的(0 長度),在此情況下服務器不需要任何附加信息,功 能碼僅說明操作。
- 差錯校驗:驗證收、發的數據是否正確。
如果在一個正確接收的 Modbus?ADU 中,不出現與請求Modbus功能有關的差錯,那么服務器至客戶機的響應數據域包括請求數據。如果出現與請求 Modbus功能有關的差錯,那么域包括一個異常碼,服務器應用能夠使用這個域確定下一個執行的操作。Modbus事務處理的狀態圖如下所示:
一旦服務器處理請求,使用合適的 Modbus?服務器事務建立 Modbus?響應,根據處理結果,可以建立兩種類型響應:
- 一個正確Modbus響應:響應功能碼 = 請求功能碼 ;
- 一個 Modbus異常響應:用來為客戶機提供處理過程中與被發現的差錯相關的信息,提供一個異常碼來指示差錯原因。響應功能碼 = 請求功能碼 + 0x80。
將上述圖示分解理解,例如,客戶機與服務器執行Modbus?通信協議,當服務器對客戶機響應時,它使用功能碼來指示正常(無差錯)響應或者出現某種差錯(稱為異常響應)。
對于一個正常響應來說,服務器僅對原始功能碼響應,Modbus?事務處理(無差錯)如下圖所示:
對于異常響應,服務器返回一個與原始功能碼等同的碼,設置該原始功能碼的最高有效位為邏輯 1,Modbus?事務處理(異常響應)如下圖所示:
Modbus?使用一個Big-Endian 表示地址和數據項。這意味著當發射多個字節時,首先發送最高有效位。例如:
寄存器 數據
0x4001 0x1234
?發送的第一字節為 0x12,第一字節為0x34。
3、數據模型
Modbus以一系列具有不同特征表格上的數據模型為基礎,四個基本表格如下表所示:
對于基本表格中任何一項,協議都允許單個地選擇 65536 個數據項,而且設計那些項的讀寫操作可以越過多個連續數據項直到數據大小規格限制,這個數據大小規格限制與事務處理功能碼有關。
數據模型這個概念有限抽象,讓我們通過以下兩個示例加深理解。
示例1:有 4 個獨立塊的設備
示例描述:一個設備中的數據結構,含有數字量和模擬量、輸入量和輸出量。由于不同塊中的數據不相關,每個塊是相互獨立。使用Modbus數據模型,按不同 Modbus功能碼訪問每個塊,實現原理如下所示:
?示例2:僅有 1 個塊的設備
示例描述:一個設備僅有 1 個數據塊,使用Modbus數據模型,通過幾個Modbus功能碼可能得到一個相同數據,或者通過 16 比特訪問或 1 個訪問比特,實現原理如下所示:
總結
以上是生活随笔為你收集整理的一文看懂Modbus协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 力扣(LeetCode)刷题,简单题(第
- 下一篇: Modbus协议在串行链路上的实现