C#Modbus每20秒获取一个批次寄存器

C#Modbus每20秒获取一个批次寄存器,c#,modbus,modbus-tcp,C#,Modbus,Modbus Tcp,我用C#做了一个应用程序,在这个应用程序中,我必须通过Modbus TCP每隔20秒读取PLC的840个寄存器。我使用这个图书馆。当我使用这个方法的时候 Master.ReadHoldingRegister(ushort id、字节单位、ushort startAddress、ushort numInputs) 它返回长度为144而不是1680的字节数组,你知道吗?建议在调用之间添加一点延迟。建议在调用之间添加一点延迟。Modbus允许在单个读取保持寄存器功能调用中读取多达125个保持寄存器。如

我用C#做了一个应用程序,在这个应用程序中,我必须通过Modbus TCP每隔20秒读取PLC的840个寄存器。我使用这个图书馆。当我使用这个方法的时候

Master.ReadHoldingRegister(ushort id、字节单位、ushort startAddress、ushort numInputs)


它返回长度为144而不是1680的字节数组,你知道吗?

建议在调用之间添加一点延迟。

建议在调用之间添加一点延迟。

Modbus允许在单个读取保持寄存器功能调用中读取多达125个保持寄存器。如果库在调用840个寄存器时没有抛出错误,那么它可能会通过将您的调用拆分为几个读保持寄存器请求来考虑这个限制。我将研究源代码,以确保您能够可靠地执行此操作。

Modbus允许在单个读取保持寄存器函数调用中读取多达125个保持寄存器。如果库在调用840个寄存器时没有抛出错误,那么它可能会通过将您的调用拆分为几个读保持寄存器请求来考虑这个限制。我会研究源代码,以确保您能够可靠地做到这一点。

我非常确定ModbusTCP中存在数据包大小限制。每次我尝试使用这种方法时,你只需逐块阅读,增加起始地址,我做了10次此函数,在Modbus模拟器中一切正常,但在Philical PLC中,它“看到”函数的前两次调用我使用了不同的库,遇到了类似的问题,我的解决办法是在两次会议之间增加一点延迟calls@JamesBarrass事实上,Modbus[TCP response]负载大小应该限制在256字节以内,但库本身可能已经透明地将内容拆分为后续请求(这还不确定)。然而,正如VeNoMiS所说,请求可能会在PLC处理时间内快速到达,并被丢弃。延迟可以通过编程方式添加,也可以作为库上下文中的设置添加。多亏了大家,我已经插入了500毫秒的延迟,现在一切都好了。我很确定ModbusTCP中有一个数据包大小限制。每次我尝试使用这种方法时,你只需逐块阅读,增加起始地址,我做了10次此函数,在Modbus模拟器中一切正常,但在Philical PLC中,它“看到”函数的前两次调用我使用了不同的库,遇到了类似的问题,我的解决办法是在两次会议之间增加一点延迟calls@JamesBarrass事实上,Modbus[TCP response]负载大小应该限制在256字节以内,但库本身可能已经透明地将内容拆分为后续请求(这还不确定)。然而,正如VeNoMiS所说,请求可能会在PLC处理时间内快速到达,并被丢弃。延迟应该以编程方式添加,也可以作为库上下文中的设置添加。感谢大家,我已经插入了500毫秒的延迟,现在一切正常,这正是我所想的。投票支持“122”上限。。。你能为这个数字联系一些参考资料吗?实际上限制是125。您可以在Modbus应用协议规范:[link]()中找到它。我将更新我的答案,以说明正确的限制。这正是我所想的。投票支持“122”上限。。。你能为这个数字联系一些参考资料吗?实际上限制是125。您可以在Modbus应用协议规范:[link]()中找到它。我将更新我的答案,以说明正确的限制。