背后的故事:QModbusTcpClient
我正在尝试从连接到Modbus/TCP
网络的设备中读取内容。为此,我在 Qt C++(Qt 版本 5.7.0)中编写了一个 Windows 程序(在 7 和 10 上测试),它本质上调用QModbusClient::sendReadRequest
withQModbusDataUnit::QModbusDataUnit(RegisterType type, int address, quint16 size)
作为参数,其中type为HoldingRegisters
,地址等于1000
(可能是另一个地址,它不是对于这个特定问题很重要),大小是要从设备读取的所需数据的长度。
问题:size
当小于或等于63
寄存器时,一切都运行良好。每次超出此值的尝试都会导致错误,这取决于我正在测试程序的设备,但通常会显示无效请求。
测试:
- 我已经用几个真实的设备和一个
Modbus/TCP
模拟器测试了这个,得到了相同的结果,即size
<=63
-> 好的;size
>63
-> 错误 Modpoll
从另一边,我可以从相同的设备和模拟器中读取size
大于63
寄存器的数据块
一些研究: 这里说,确实有一个限制,但它是 256 字节,相当于 128 个 16 位寄存器,换句话说 - 远高于我的读取尝试限制。
我的怀疑:似乎QModbusTcpClient
不允许读取多个63
寄存器。
问题:有没有人遇到过这样的问题QModbusTcpClient
,除了两次读取数据之外,有没有办法克服这个限制?