Modbus RTU 写多个寄存器详解
1. 协议概述
Modbus RTU 是一种串行通信协议,用于工业自动化中的设备间通信。主要特点是简单、稳定。在这个模式中,数据是以二进制的形式传输的。
2. 写多个寄存器
当我们需要修改一个设备(例如,电机驱动器或传感器)上的多个参数时,我们可以使用“写多个寄存器”功能。
3. 请求格式
一个标准的Modbus RTU写多个寄存器的请求包含以下部分:
- 设备地址: 1字节,标识要通信的目标设备。
- 功能码: 1字节,写多个寄存器的功能码为
0x10
。 - 起始寄存器地址: 2字节,指定第一个要写入的寄存器的地址。
- 寄存器数量: 2字节,指定要写入的寄存器的总数量。
- 字节计数: 1字节,表示后续要写入的数据总字节数。
- 数据: 根据需要写入的寄存器数量变化,每个寄存器为2字节。
- CRC校验: 2字节,用于验证消息的完整性。
4. 例子
假设我们要向地址为 0x01
的设备写入,从寄存器地址 0x3000
开始,连续的4个寄存器。我们要写入的数据是:0x1234
, 0x5678
, 0x9ABC
, 0xDEF0
。
构造的消息为:
01 (设备地址) 10 (功能码) 30 00 (起始寄存器地址) 00 04 (寄存器数量) 08 (字节计数,4寄存器*2字节/寄存器) 12 34 56 78 9A BC DE F0 (数据) ?? ?? (CRC校验, 实际值需要使用crc16-modbus来计算)
要注意,CRC校验值是基于整个消息(除CRC外的部分)来计算的。你需要使用Modbus RTU的CRC算法来得到这个值,并将它添加到消息的尾部。
5. 发送并等待
完成消息后,通过适当的串行通讯接口(如RS-485)发送它,并等待从设备的响应。响应格式和请求类似,但不包含字节计数和数据部分。