我们正在使用Jamod RTU来捕获连续串联的各种电表。我们设置了modbus timeoutexception = 1200ms。现在发生了什么,当我们ping一米并且我们没有得到结果(或读数)时,我们移动到同一系列中连接的下一个。但有时,之前的仪表会将读数发送回应用程序,并且该仪表的读数将保存为新的或下一个。
要解决此问题,我们已将nport管理员(用于管理COM端口)的网络超时从5000毫秒减少到500毫秒。但我不认为这是永久的解决方案。有没有办法避免迟到的消息或用相应的仪表标记每条消息?
答案 0 :(得分:2)
每个MODBUS回复都有嵌入在消息中的设备源地址。阅读它可以解决你的问题。
答案 1 :(得分:0)
来自Modicon Modbus Protocol Reference Guide PI–MBUS–300 Rev. J
的第10页如何处理地址字段
消息帧的地址字段包含两个字符(ASCII)或八个字符 位(RTU)。有效的从设备地址范围为0 - 247十进制。 为各个从设备分配的地址范围为1 - 247 master通过将从地址放在地址字段中来寻址从设备 信息。当从设备发送响应时,它会在其中放置自己的地址 响应的地址字段让主设备知道哪个从设备正在响应。
地址0用于广播地址,所有从设备都能识别。 当Modbus协议用于更高级别的网络时,广播可能不是 允许或可能被其他方法取代。例如,Modbus Plus使用了 共享全局数据库,可以使用每个令牌轮换进行更新。
因此,您可以跟踪从站地址并通过指定的从站地址分配接收值。这应该可以从getUnitID()
访问所有响应对象。