Modbus TCP简洁应用:
Modbus /TCP可以被理解为以太网上的Modbus。Modbus /TCP不过是采用TCP/IP标准,简单地把Modbus信息包打包压缩而已。这样Modbus /TCP设备就可以通过以太网和光纤网络进行连接和通信。与RS-485接口相比,Modbus /TCP还允许使用更多的地址、可以采用多主站架构、传送速率可以达到GB/s的水平。Modbus /TCP网络的从站数量仅受限于网络物理层的能力。通常从站的数量一般在1024个左右。
功能码说明:
功能码
|
含义
|
支持装置
|
备注
|
---|---|---|---|
0x01 |
读取线圈状态 |
O、C、A | |
0x02 | 读取离散输入 | I、S | |
0x03 | 读取保持寄存器 | R 16bits | |
0x04 | 读取输入寄存器 | ||
0x05 | 写入单个线圈值 | O、C、A | |
0x06 | 写入单个寄存器 | R 16bits | |
0x0F | 写多个线圈值 | O、C、A | 0xFF00 : ON 0x0000 :OFF |
0x10 | 写多个寄存器 | R 16bits | |
0x17 | 读/写多个寄存器 |
报文说明:
这个实例演示Modbus报文以 16 进制格式发送的方法:
且仅介绍常用的读单笔资料、写单笔资料的报文,其他内容请参考官方文档
- 写入单笔资料
从站站号:10
主站对从站进行 holdregister 100 写入1数值的操作,报文形式如下:
事务处理标识符 | 协议标识符 | 长度字段 | 从站地址 | 功能码 | 写入地址 | 写入数值 |
00 00 | 00 00 | 00 06 | 0A | 06 | 00 65 | 00 01 |
事务处理标识符:2Byte - 通常为0
协议标识符:2Byte - 通常为0
长度字段: 长度字段后面报文长度,16进制
从站地址:从站Slave ID,从站地址需要和IP最后一位相等
功能码:Modbus 功能码 06 写入单笔资料
写入地址:对应的Modbus 为地址 101,故 0x65
写入数值:2Byte 高位在前低位在后,最大数值为 2^16-1=65535
- 读取单笔资料
从站站号:10
主站对从站进行 holdregister 100 读取数值的操作,报文形式如下:
事务处理标识符 | 协议标识符 | 长度字段 | 从站地址 | 功能码 | 读取地址 | 读取位数 |
00 00 | 00 00 | 00 06 | 0A | 03 | 00 65 | 00 01 |
事务处理标识符:2Byte - 通常为0
协议标识符:2Byte - 通常为0
长度字段: 长度字段后面报文长度,16进制
从站地址:从站Slave ID,从站地址需要和IP最后一位相等
功能码:Modbus 功能码 03 读取资料
读取地址:对应的Modbus 为地址 101,故 0x65
读取位数:2Byte 高位在前低位在后,最大读取位数数值为 2^16-1=65535
调试工具使用说明:
- PC 端做主站:
打开软件后界面如下:
点击Master,然后进入到主站调试部分
输入从站的IP地址 和 从站站号
注意:
1、IP地址、Slave ID需要设定从站设备的。
2、端口 默认502、逾时时间可以不更改。
输入完成后,点击开启Master
连接成功后显示如下:
读取操作:
目前支援读取保持寄存器即寄存器、读取输入寄存器、读取线圈、读取离散输入
操作地址: 指从那个地址开始进行读取。
位数:从起始地址开始,连续读取多少位寄存器
如:想要读 R100-R105(Modbus 寄存器)
1、选择读寄存器
2、操作地址:100
3、位数:5
读取其他操作类似,不再赘述。
注意:
输入数字之后,按Tab或切换光标更新。
写入操作:
目前支援写入保持寄存器即寄存器单笔和多笔、写入线圈单笔和多笔
操作地址: 指从那个地址开始进行写入。
Value:需要向寄存器中写入的数值,详细介绍如下:
寄存器写入:
单笔写入:数字在0-2^16
多笔写入:数字在0-2^16,多笔数据之间使用英文的逗号分隔,如:34,3,2,66
线圈的写入:
单笔写入:数字为 0、1两种
多笔写入:数字为 0、1两种,多笔数据之间使用英文的逗号分隔,如:1,0,1,1
如:想要写 Coils10-Coils15(Modbus 线圈)
1、选择写入多笔线圈
2、操作地址:10
3、Values:1,1,0,0,1
其他操作基本一致,这里不在赘述。
感谢使用,祝愉快!