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