S7-1200 与 S7-1200 Modbus TCP 通信例程 (siemens.com.cn)
西门子S7-1200建立ModbusTCP通讯数据交互实例(从站+主站)_西门子1200modbustcp-CSDN博客
服务器端:
客户端读取:
客户端写入:
=========================================================================================================
Transaction Identifier: 0000
Protocol Identifier: 0000
Length: 0006
Unit Identifier: 01
Function Code: 03
Starting Address: 0064
Quantity of Registers: 0001
十六进制命令:
00 00 00 00 00 06 01 03 00 64 00 01
以下是各字段的解释:
Transaction Identifier(事务标识符): 这是一个随机或递增的值,用于匹配请求和响应。在这里,我们使用0000作为示例,但在实际应用中,应该使用一个唯一的值。
Protocol Identifier(协议标识符): 对于MODBUS TCP,这个值始终是0000。
Length(长度): 指示后续字段的字节数。在这个例子中,长度是6(功能码 + 起始地址 + 寄存器数量),因此是0006。
Unit Identifier(单元标识符): 这是MODBUS服务器地址,通常为01,但如果网络上有多台服务器,则可能不同。
Function Code(功能码): 03表示读取保持寄存器。
Starting Address(起始地址): 0064是100的十六进制表示,这是要读取的第一个寄存器的地址。
Quantity of Registers(寄存器数量): 0001表示要读取1个寄存器
=========================================================================================================
假设客户端请求读取从地址100开始的10个保持寄存器(功能码03),服务端返回的数据可能如下:
Transaction Identifier: 0x0001
Protocol Identifier: 0x0000
Length: 0x0013 (19字节,包括单元标识符、功能码和数据)
Unit Identifier: 0x01
Function Code: 0x03
Byte Count: 0x14 (20字节的数据)
Register Values: 2字节 * 10寄存器
如果一切正常,服务端返回的数据可能如下:
00 01 00 00 00 13 01 03 14 [寄存器值1] [寄存器值2] … [寄存器值10]
假设客户端请求读取从地址40100开始的30个保持寄存器,服务端返回的数据可能如下:
00 63 是递增的值,事务标识符
00 00 协议标识符: 对于MODBUS TCP,这个值始终是0000。
00 47 表示后面字节的长度
FF 单元标识符,FF通常是广播地址
17 功能码:17(十六进制)等于 23(十进制),它不是一个标准的MODBUS功能码(自指令版本 V6.0 起,“MB_CLIENT”支持此 Modbus 功能在一个作业中对远程设备的保持寄存器进行写入和读取。)
9C C2 是结束地址40130的16进制
00 1E 是长度 30
9C A4 是起始地址40100的16进制
00 1E 是长度 30
3C 是返回字节长度60
00 63 00 00 00 47 FF 17 9C C2 00 1E 9C A4 00 1E 3C
01 23 00 01 00 88 00 44 00 33 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00