木之夏  
海纳百川,有容乃大;壁立千仞,无欲则刚

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

 

其他操作基本一致,这里不在赘述。

感谢使用,祝愉快!

 

posted on 2020-12-12 23:44  木之夏  阅读(875)  评论(0编辑  收藏  举报