首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QModbusTcpClient数据大小的限制

QModbusTcpClient数据大小的限制
EN

Stack Overflow用户
提问于 2016-11-20 23:22:58
回答 1查看 426关注 0票数 0

背后的故事:使用QModbusTcpClient,我正在尝试从连接到Modbus/TCP网络的设备中读取内容。为此,我在Qt C++ (QtVersion5.7.0)中编写了一个Windows程序(在7和10上进行了测试),它实际上调用了以QModbusDataUnit::QModbusDataUnit(RegisterType type, int address, quint16 size)作为参数的QModbusClient::sendReadRequest,其中类型为HoldingRegisters,地址等于1000 (可能是另一个地址,对于这个特定问题并不重要),大小是从设备中读取所需数据的长度。

问题:所有东西在size小于或等于63寄存器时运行良好。任何超越这个值的尝试都会导致一个错误,这取决于我正在测试程序的设备,但是通常会说无效请求。

测试:

  1. 我用几个真实的设备和一个模拟器进行了测试,得到了相同的结果,即size <= 63 -> okay;size > 63 ->错误
  2. 来自另一边的Modpoll允许我使用大于63寄存器的size从相同的设备和模拟器读取数据块。

一些研究: 这里说,确实有一个限制,但它是256个字节,等于128个16位寄存器,换句话说,远远高于我的读取尝试的限制。

我的怀疑:似乎QModbusTcpClient不允许读取超过63寄存器的内容。

问题:是否有人在使用QModbusTcpClient时遇到过这样的问题,除了在两次传递中读取数据之外,还有什么方法可以克服这个限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 04:41:00

在我的例子中,解决方案是把事情掌握在我的手中,并编写我自己的类来与Modbus设备进行通信。该类继承自QObject,因此信号时隙系统仍然可以使用,但是实际的功能是基于winsock2.h的。这里是一个示例程序,它完成了我所需要的工作。我偶然发现的另一个有用的来源是这本书,来自winsocket 2引用的示例程序,当然还有Modbus规范。事实证明,这并不难,在我提到的消息来源的一点帮助下,我就能够解决我遇到的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40710632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档