Modbus协议(三)
ModbusTCP协议
应用层协议:ModbusTCP
物理层协议:标准TCP/IP协议
默认端口:502
校验:无校验
报文头(MBAP):有
简而言之,就是在通用的功能码+数据模型基础上,加上MBAP报文头,即构成了ModbusTCP的通信报文。
MBAP报文头
定义
MBAP 是 Modbus Application Protocol Header(Modbus应用协议头)的缩写,专为 Modbus TCP 协议设计,用于在以太网通信中封装Modbus数据帧。
MBAP结构(7字节)
| 字段 | 长度 | 示例 | 说明 |
|---|---|---|---|
| 事务标识符 | 2字节 | 00 01 | 请求-响应匹配ID |
| 协议标识符 | 2字节 | 00 00 | 固定值0x0000,表示Modbus协议 |
| 长度字段 | 2字节 | 00 06 | 后续PDU(协议数据单元)的字节数(含单元标识符) |
| 单元标识符 | 1字节 | 01 | 从站地址(兼容RTU设备地址,默认0x01,广播地址0x00无效 |
样例1
软件
使用运行在同一台电脑上的2个软件,分别做服务器和客户端实现操作。
Server服务器:ModSim32
Client客户端:带网络调试功能的串口调试软件
读多个保持寄存器

可以看到,使用串口调试软件发送报文
00 01 00 00 00 06 01 03 00 00 00 02
报文解释
| 字段 | 事务ID | 协议ID | 后续字节长度 | 从站地址 | 功能码 | 寄存器地址 | 寄存器数量 |
|---|---|---|---|---|---|---|---|
| 值 | 00 01 | 00 00 | 00 06 | 01 | 03 | 00 00 | 00 02 |
| 含义 | 请求响应 | Modbus协议 | 后续数据有6字节 | 从站1 | 读多个保持寄存器 | 从寄存器0开始 | 读2个 |
反馈信息
00 01 00 00 00 07 01 03 04 00 06 0A 16
| 字段 | 事务ID | 协议ID | 后续字节长度 | 从站地址 | 功能码 | 后续数据长度(字节数) | 寄存器0 | 寄存器1 |
|---|---|---|---|---|---|---|---|---|
| 值 | 00 01 | 00 00 | 00 07 | 01 | 03 | 04 | 00 06 | 0A 16 |
| 含义 | 请求响应 | Modbus协议 | 后续数据有7字节 | 从站1 | 读多个保持寄存器 | 后续数据有4字节 | 00 06:6 | 0A 16:16 * 16 * 10 + 16 + 6 = 2582 |
所以,读出来从站1的地址为0和1的两个保持寄存器的值,分别为6和2582。
样例2
使用2台电脑,win10系统
A电脑:运行Autoshop仿真H5U作为服务器
B电脑:使用Modbus仿真软件或串口调试软件作为客户端
A电脑 ModbusTCP服务器
查看服务器IP

192.168.254.129
打开Autoshop,新建H5UPLC,开启仿真,然后对M存储区写入部分内容。

M区继电器得电状态
| M | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| ON/OFF状态 | ON | OFF | ON | OFF | ON | OFF | ON |
汇川H5U的仿真开启后,默认开启ModbusTCP的服务器。
B电脑 ModbusTCP客户端
查看客户端IP

192.168.254.158
查看连接状态

打开串口调试软件,设置服务器IP,发送报文

如图,发送:
00 01 00 00 00 06 01 02 00 00 00 05
报文含义:
| 字段 | 事务ID | 协议ID | 后续字节长度 | 从站地址 | 功能码 | 线圈地址 | 线圈数量 |
|---|---|---|---|---|---|---|---|
| 值 | 00 01 | 00 00 | 00 06 | 01 | 02 | 00 00 | 00 05 |
| 含义 | 请求响应 | Modbus协议 | 后续数据有6字节 | 从站1 | 读多个线圈 | 从线圈0开始 | 读5个 |
接收数据
00 01 00 00 00 04 01 02 01 15
| 字段 | 事务ID | 协议ID | 后续字节长度 | 从站地址 | 功能码 | 后续数据长度(字节数) | 寄存器 |
|---|---|---|---|---|---|---|---|
| 值 | 00 01 | 00 00 | 00 04 | 01 | 02 | 01 | 15 |
| 含义 | 请求响应 | Modbus协议 | 后续数据有4字节 | 从站1 | 读多个线圈 | 后续数据有1字节 | 15:0001 0101 |

由此可知,把服务器的M0~M4共计5个线圈的状态读出来了。
| M | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|
| ON/OFF状态 | OFF | ON | OFF | ON | OFF | ON |

浙公网安备 33010602011771号