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 写多个保持寄存器
*/