Modbus TCP 报文说明
Modbus TCP 报文结构 报文解析 功能码说明 Modbus 功能码与 PLC 地址的对应关系
Modbus TCP 报文结构
事务标识符 (Transaction Identifier,2 字节): 用于匹配请求和响应,通常由客户端生成,服务端在响应中原样返回。协议标识符 (Protocol Identifier,2 字节): 始终为 0x0000,表示这是 Modbus 协议。长度域 (Length Field,2 字节): 指定后续数据部分的字节长度(含单元标识符)。单元标识符 (Unit Identifier,1 字节): 表示目标从站设备地址,通常在网关或多设备场景中使用。功能码及数据域 (Function Code + Data): Modbus 数据内容。
报文解析
Modbus TCP 报文是:
50 D4 00 00 00 06 01 03 00 0A 00 01
事务标识符(2 字节): 50 D4
客户端生成的随机标识符,用于标记请求。它的值为 0x50D4(十进制 20692)。 在响应报文中会原样返回,帮助客户端识别请求对应的响应。 协议标识符(2 字节): 00 00
始终为 0,表示使用 Modbus 协议。 长度域(2 字节): 00 06
后续数据部分的长度为 6 字节,包括单元标识符和功能码+数据。 单元标识符(1 字节): 01
表示目标从站地址为 1。 功能码(1 字节): 03
读取保持寄存器。 数据域(N 字节): 00 0A
:起始地址为 10。 00 01
:读取 1 个寄存器。
功能码说明
功能码 操作 寄存器类型 数据类型 常见场景 01 读取线圈状态(Coils) 离散输出(DO) 0 或 1(按位) 监控输出设备的状态,例如继电器 02 读取离散输入状态 离散输入(DI) 0 或 1(按位) 检查输入设备的状态,例如按钮 03 读取保持寄存器(Holding Registers) 数据寄存器或变量(D 或 R 等) 16 位(按字) 获取设备配置或测量数据 04 读取输入寄存器(Input Registers) 模拟量输入寄存器(AI) 16 位(按字) 获取设备配置或测量数据 05 写单个线圈(Write Single Coil) 离散输出(DO) 将单个线圈的状态写为 0 或 1 06 写单个保持寄存器(Write Single Register) 数据寄存器或变量(D 或 R 等) 16 位(按字) 向单个保持寄存器写入16 位数据。 15 写多个线圈(Write Multiple Coils) 离散输出(DO) 一次性写入多个线圈状态。 16 写多个保持寄存器(Write Multiple Registers) 数据寄存器或变量(D 或 R 等) 一次性写入多个保持寄存器的数据。
Modbus 功能码与 PLC 地址的对应关系
功能码 Modbus 寄存器类型 PLC 地址类型 地址范围(标准 Modbus) 01 线圈(Coils) 离散输出(DO) 00001 到 09999 02 离散输入(Discrete Inputs) 离散输入(DI) 10001 到 19999 03 保持寄存器(Holding Registers) 数据寄存器或变量(D 或 R 等) 40001 到 49999 04 输入寄存器(Input Registers) 模拟量输入寄存器(AI) 30001 到 39999