modbus协议三 RTU/TCP帧数据格式

modbus RTU

Modbus信息帧所允许的最大长度为256个字节.

主机问询帧结构:

|----------|-----|---------|------------|-------|-------|
| 地址码/从机地址 | 功能码 | 寄存器起始地址 | 寄存器数量/数据长度 | 校验码低位 | 校验码高位 |
| 1字节 | 1字节 | 2字节 | 2字节 | 1字节 | 1字节 |

从机应答帧结构:

|----------|-----|-------|------|-------|-------|-----|
| 地址码/从机地址 | 功能码 | 有效字节数 | 数据一区 | 第二数据区 | 第N数据区 | 校验码 |
| 1字节 | 1字节 | 1字节 | 2字节 | 2字节 | 2字节 | 2字节 |

复制代码
/**
 *  标准的modbus Rtu报文协议格式
 *
 *  1-1.读请求报文格式:
 *
 *                          01        03  00 01   00 00    |   00 00
 *                      | 从机地址 |功能码|起始地址|寄存器数量|    CRC
 *  |            header           |             body              |
 *
 *  1-2.读响应报文格式:
 *                        |     01     03     01   00 00     |  00 00
 *                      |  从机地址 |功能码|字节个数|请求的数据 |   CRC
 *  |            header            |              body            |
 *
 *  2-1.写请求报文格式:
 *
 *                          01      06    00 00     00 00      00 00    ... | 00 00
 *                      | 从机地址 |功能码|起始地址|寄存器数量| 正文长度 | 正文 |  CRC
 *  |            header           |                    body                     |
 *
 *  2-2.写响应报文格式:
 *
 *                           01      06   00 00     00 00  |  00 00
 *                        从机地址 |功能码|起始地址|寄存器数量|   CRC
 *  |            header           |             body             |
 *
 * 从机地址:   从机设备地址
 *
 * 功能码   含义       功能码     含义
 * 0x01    读线圈        0x04   读输入寄存器
 * 0x05    写单个线圈    0x03   读保持寄存器
 * 0x0F    写多个线圈    0x06   写单个保持寄存器
 * 0x02    读离散量输入  0x10   写多个保持寄存器
 */

modbus TCP

Modbus TCP是一种基于以太网的通信协议.ModbusTCP协议由施耐德公司在1996年推出,它继承了ModbusRTU协议的核心功能,但主要通过TCP/IP以太网进行数据传输,实现了设备之间的主从式通信。

在实际应用中,针对串口ModbusRTU,我们通过采用主站/从站的说明双方的角色,对于ModbusTCP,我们通过使用服务器/客户端来定义双方的角色。

ModbusTCP在Modbus串行通信的基础上,去除了 CRC 差错校验 ,然后加上MBAP报文头(7 Bytes)。 寄存器和功能码是一样的。

modbus TCP是一种应用层协议,而tcp是传输层协议。 modbus tcp默认使用502端口。

Modbus TCP 如果 连接的 设备的话, 应该填写 设备 主机的IP地址 和 端口进行连接.

注意: 不要将modbus tcp中客户端 服务器端的定义与tcp中的概念混淆。

单元标识 即 从站地址

复制代码
/**
 *  标准的modbus tcp报文协议格式
 *
 *  1-1.读请求报文格式:
 *  |             MBAP  |           MODBUS RTU
 *   00 00  00 00   00 06    01       03     00 01     00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量|
 *  |               header       |         body         |
 *
 *  1-2.读响应报文格式:
 *   00 00  00 00    00 06     01      83      01     00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|字节个数|请求的数据|
 *  |               header       |         body         |
 *
 *  2-1.写请求报文格式:
 *  |             MBAP  |           MODBUS RTU
 *   00 00   00 00   00 06    01       06  00 00    00 00       00 00     ...
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量| 正文长度 | 正文 |
 *  |               header             |              body              |
 *
 *  2-2.写响应报文格式:
 *  |             MBAP   |              MODBUS RTU
 *   00 00   00 00  00 06     01      06     00 00    00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量|
 *  |               header             |       body     |
 *
 * 事务处理标识: 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文
 * 协议标识符:  00 00表示ModbusTCP协议
 * 长度:     表示接下来的数据长度,单位为字节
 * 从机地址:   从机设备地址
 *
 * 功能码    含义      功能码     含义
 * 0x01    读线圈      0x04   读输入寄存器
 * 0x05    写单个线圈  0x03   读保持寄存器
 * 0x0F    写多个线圈  0x06   写单个保持寄存器
 * 0x02    读离散量输入 0x10   写多个保持寄存器
 */
相关推荐
abbgogo17 小时前
TCP/IP、OSI 与常见网络协议知识点总结
网络·网络协议·计算机网络
FungLeo18 小时前
Flutter 接入 Alice 调试浮窗:一个顶层 final 抢跑,把 release 网络整没了
网络·flutter
abbgogo19 小时前
堆叠、DHCP 与链路聚合总结
网络·网络协议
xiaoxiangsiyan1 天前
GitLab CI/CD 自托管(EE 企业版)+ Kubernetes Runner 集群 + ArgoCD(GitOps 部署)
运维·网络·ci/cd·容器·kubernetes·gitlab·argocd
XR1234567881 天前
政府办公楼网络搭建方案对比:信锐、华为、华三选型指南
网络·华为
星恒讯工业路由器1 天前
网络安全访问控制规则详解
网络·安全·智能路由器·访问控制·防火墙规则·工业网络安全
2601_949499941 天前
芯瑞科技400G VR4 QSFP-DD光模块:低功耗高密短距互联方案,赋能AI智算中心算力网络升级
大数据·运维·网络·人工智能·科技·光模块
神秘的MT1 天前
C# WinForm Socket 服务器 + 串口转发
服务器·网络·学习·c#
上海云盾-小余1 天前
混合网络攻击深度解析:WAF 流量清洗落地完整方案
网络
xiaoxiangsiyan1 天前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel