Modbus TCP
约 794 字大约 3 分钟
Modbus TCP
Modbus TCP是Modbus协议的一个变体,它运行在TCP/IP网络之上。相比于Modbus RTU和Modbus ASCII这两种基于串行通信的Modbus协议,Modbus TCP支持更快的数据传输速度和更远的通信距离。由于基于TCP/IP,Modbus TCP可以在以太网上进行通信,使其非常适合于现代工业自动化系统。
基本概念
- TCP/IP网络:Modbus TCP使用TCP/IP协议栈进行通信,确保了数据传输的可靠性。
- 端口号:Modbus TCP通常使用502号TCP端口。
- MBAP头:Modbus Application Protocol头是Modbus TCP特有的,用于封装传统Modbus请求和响应报文,以便在TCP/IP网络上传输。
MBAP头结构
MBAP头由以下几部分组成:
- 事务标识符(2字节):用于同步请求和响应之间的消息。
- 协议标识符(2字节):用于Modbus协议,固定为0x0000。
- 长度字段(2字节):标识后续字段的长度(包括单元标识符、功能码、数据)。
- 单元标识符(1字节):标识远程服务器,对于Modbus TCP通常设置为0xFF。
功能码
Modbus TCP支持的功能码与Modbus RTU相同,包括但不限于:
- 读线圈(01)
- 读离散输入(02)
- 读保持寄存器(03)
- 读输入寄存器(04)
- 写单个线圈(05)
- 写单个寄存器(06)
- 写多个线圈(15)
- 写多个寄存器(16)
通信示例
假设有一个操作要求读取从设备的保持寄存器,从寄存器地址100开始,读3个寄存器。
读取保持寄存器请求
MBAP头 + PDU(协议数据单元)
请求示例(十六进制):
00 01 00 00 00 06 01 03 00 64 00 03
00 01
:事务标识符。00 00
:协议标识符。00 06
:长度(6字节,不包括MBAP头的长度)。01
:单元标识符。03
:功能码,表示读保持寄存器。00 64
:起始寄存器地址(100)。00 03
:读取的寄存器数量(3个)。
读取保持寄存器响应
MBAP头 + PDU(协议数据单元)
响应示例(十六进制):
00 01 00 00 00 09 01 03 06 02 2B 00 00 00 64
00 01
:事务标识符(与请求相匹配)。00 00
:协议标识符。00 09
:长度(9字节,不包括MBAP头的长度)。01
:单元标识符。03
:功能码。06
:字节计数(3个寄存器×2字节/寄存器 = 6字节)。02 2B
:第一个寄存器的值。00 00
:第二个寄存器的值。00 64
:第三个寄存器的值。
报文规则
Modbus TCP的报文规则确保了在TCP/IP网络上可靠地传输Modbus命令。事务标识符允许同步请求与响应,即使在异步通信环境中也能匹配。长度字段确保接收方能够正确地解析后续的PDU部分。通过单元标识符,可以在同一网络上与多个远程设备通信,尽管在大多数实现中,此字段通常被设置为0xFF。
Modbus TCP使得Modbus协议能够在现代的网络环境中使用,扩展了其在工业自动化领域的应用范围。