1.概述
定義:Modbus TCP 是 Modbus 協議的變體,基于 TCP/IP 協議棧,用于通過以太網實現工業設備間的通信。
背景:由施耐德電氣(原 Modicon 公司)在 1999 年發布,將傳統的 Modbus RTU/ASCII 適配到現代網絡環境。
核心特點:
- 基于客戶端/服務器模型,客戶端(主站)發起請求,服務器(從站)響應。
- 默認使用 TCP 端口 502,支持高速、遠距離通信。
- 二進制表現形式、緊湊的數據結構,通信效率高;
- 基于可靠連接的服務
2. 協議結構
Modbus TCP 報文由 MBAP 頭(Modbus Application Header) 和 PDU(協議數據單元) 組成:
MBAP 頭(7 字節)
- 事務標識符(2 字節):匹配請求與響應(如 0x0001)。
- 協議標識符(2 字節):固定為 0x0000,表示 Modbus 協議。
- 長度字段(2 字節):后續數據的字節數(包括單元標識符)。
- 單元標識符(1 字節):標識從站設備(類似 RTU 的從機地址)。
PDU(功能碼 + 數據)
- 功能碼(1 字節):定義操作類型(如 0x03 讀保持寄存器)。
- 數據字段(N 字節):請求或響應的具體內容
- 示例
- 請求(讀取保持寄存器)
事務ID | 協議ID | 長度 | 單元ID | 功能碼 | 起始地址 | 寄存器數量 |
---|---|---|---|---|---|---|
00 01 | 00 00 | 00 06 | 01 | 03 | 00 00 | 00 02 |
- 響應
事務ID | 協議ID | 長度 | 單元ID | 功能碼 | 字節數 | 數據 |
---|---|---|---|---|---|---|
00 01 | 00 00 | 00 07 | 01 | 03 | 04 | 00 0A 00 0B |
3.通信流程
- 建立連接
客戶端(主站)通過 TCP 端口 502 連接服務器(從站)。 - 構造請求
MBAP 頭:事務ID(唯一標識)、協議ID(0x0000)、長度(單元ID+PDU字節數)、單元ID(從站地址)。
PDU:功能碼(如 0x03 讀寄存器) + 數據(地址、數量等)。 - 發送請求
客戶端通過 TCP 連接發送報文至服務器。 - 處理請求
服務器驗證報文,執行操作(讀/寫數據),生成響應(成功或異常)。 - 返回響應
服務器返回響應報文,格式與請求類似:
成功:功能碼 + 數據(如寄存器值)。
失敗:功能碼 + 0x80 + 異常碼。 - 解析響應
客戶端匹配事務ID,提取數據或處理錯誤。 - 關閉連接(可選)
短連接:單次通信后斷開。
長連接:復用連接多次通信。
-
核心要點
端口:502(TCP)。
事務ID:唯一匹配請求與響應。
功能碼:定義操作類型(讀/寫)。
長度字段 = 單元ID(1字節) + PDU字節數。
字節序:大端(高位在前)。 -
一句話總結:建連 → 組包 → 發請求 → 處理 → 回響應 → 解析 → 關連(可選)。
4. 與Modbus RTU的區別
- 從機地址不再重要,可通過IP地址區分;
- 取消CRC校驗,因為TCP/IP數據中已存在校驗;
- 多了MBAP報文頭。