Modbus RTU 複数のレジスタを書く。详解

1. 协议概述
Modbus RTU 是一种串行通信プロトコル,用于工业自動化中的デバイス间通信。主要特点是简单、稳定。在这个モード中,データ是以二进制的形式传输的。
2. write multiple registers
当我们需要修改一个デバイス(例如,电机驱动器或センサーは)上的多个参数时,我们可以使用“write multiple registers”Function。
3. リクエスト格式
一个標準的Modbus RTU複数のレジスタを書く。的リクエスト包含以下部分:
- Device address: 1バイト,标识要通信的目标デバイス。
- function code: 1バイト,複数のレジスタを書く。的機能コード为
0x10。 - Starting register address: 2バイト,指定第一个要写入的レジスタ的アドレス。
- number of registers: 2バイト,指定要写入的レジスタ的总数量。
- バイト计数: 1バイト,表示后续要写入的データ总Bytesの数。
- data: 根据需要写入的レジスタの数变化,すべてのレジスタ。为2バイト。
- CRC check: 2バイト,用于验证メッセージ完全に。性。
4. 例子
假设我们要向アドレス为 0x01 的デバイス写入,从レジスター·アドレス 0x3000 开始,连续的41つのレジスタ。我们要写入的データ是:0x1234, 0x5678, 0x9ABC, 0xDEF0。
构造的メッセージ为:
01 (Device address) 10 (function code) 30 00 (Starting register address) 00 04 (number of registers) 08 (バイト计数,4レジスタ*2バイト/register) 12 34 56 78 9A BC DE F0 (data) ?? ?? (CRC check, 实际值需要使用crc16-modbus来計算)
要注意,CRC check值是基于整个メッセージ(除CRC外的部分)来計算的。你需要使用Modbus RTU的CRC算法来得到这个值,并将它追加到メッセージ的尾部。
5. 送信并待機中
完成メッセージ后,経由适当的串行通讯接口(如RS-485)送信它,并待機中从デバイス的レスポンス。応答の形式和リクエスト类似,但不包含バイト计数和データ部分。
嘉
嘉