modbus RTU通讯协议通讯的时候可以同时对两个寄存器进行读取吗?

拿到的通讯协议里,比如某个变量L寄存器的地址是0x3002,H寄存器的地址是0x3003,那么可以同时读取这两个地址的值吗?如果可以,数据帧该怎么表达呢?

没问题,肯定可以。modbus的读指令都是可以连续读多个数据的。

但你给出的地址似乎有问题,设备的地址一般不会用十六进制,应该是30002和30003地址,你再仔细看下设备手册。
以下是从 30002地址读取2个16位字的命令。
01 04 00 02 00 02 D0 0B
其中,
01是从机地址
04是读取输入寄存器指令,注意输入寄存器从30001开始编址。
0002 是从第2个地址开始读,即从30002开始读。
0002 是读取2个字,即30002和30003。
D00B 是校验字。追问

这就协议中的截图,地址就是十六进制的,我想读取充电输出功率,存放在两个地址,这时候我该怎么办呢?

追答

01 04 03 02 00 02 DF 0B
01 是设备地址
04 是功能码,图2已经明确指出使用0x04功能码。
3002 是地址
0002 是长度
DF0B 是校验

注意:读一个32位字,就应该是使用一条指令读,必须的,不能用两条指令读,两条指令读是存在出错可能的。
比如读一个32位字的计数器,分成两次读,
第一次读时,计数器的值是65535,即0x0000FFFF,读取低16位得到0xFFFF,
第二次读时,计数器的值是65536,即0x00010000,读取高16位得到0x0001,
两次的结果拼起来,得到0x0001FFFF,出错!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答