1

据我了解,范围QModbusDataUnit::InputRegisters是 0-65535,即unsigned short.

读取1个单位的方法inputregisters如下:

QModbusDataUnit readUnit(QModbusDataUnit::InputRegisters, 40006, 1);

该值将在回复中,即:int value = result.value(0);

我的问题是,如果我必须读取一个unsigned int比 . 范围大得多的值怎么办0 to 4,294,967,295

如何检索该值?

4

1 回答 1

0

如您所述,Modbus 输入寄存器是 16 位无符号整数。因此,如果没有某种类型的转换,它们将被限制在范围内:0 - 65535。对于 32 位无符号值,通常(在 Modbus 中)组合两个寄存器。

例如,高 16 位可以存储在 40006,低 16 位可以存储在 40007。

因此,如果您正在读取值 2271560481(0x87654321 十六进制),您将从地址 40006 读取 34661(0x8765)并从位置 40007 读取 17185(0x4321 十六进制)。然后您将它们组合起来为您提供实际值。

我不知道 Qt Modbus 代码,但扩展您的示例代码,您可能可以通过执行以下操作同时读取两个值:

readUnit(QModbusDataUnit::InputRegisters, 40006, 2);

并将它们结合起来

quint32 value = result.value(0);
value = (value << 16) | result.value(1);
于 2018-05-08T18:54:48.837 回答