RModbus - RTU 超时在第一次超时发生后不会重置
我有两台 RS485 Modbus RTU 服务器。读取工作正常,但当我断开第二个服务器的连接时,RModbus 还会在第二次读取尝试后显示第一个服务器的超时消息。第一次超时后,RModbus 停止工作。
怎么了?
port = "COM6"
baud = 19200
uid = 1
options = {data_bits: 8, stop_bits: 1, parity: SerialPort::EVEN}
cl = ModBus::RTUClient.new(port, baud, options)
cl.read_retries = 2
cl.debug = true
# Works fine
begin
puts cl.with_slave(1).read_holding_registers(512, 1)
rescue => error
puts error.message
end
# Intended Timeout
begin
puts cl.with_slave(2).read_holding_registers(512, 1)
rescue => error
puts error.message
end
# Should work, however, issues a timeout.
begin
puts cl.with_slave(1).read_holding_registers(512, 1)
rescue => error
puts error.message
end
I have two RS485 Modbus RTU Servers. Reading works fine but when I disconnect the second server, RModbus also shows timeout messages for the first server after a second read attempt. After the first timeout, RModbus stops working.
What is wrong?
port = "COM6"
baud = 19200
uid = 1
options = {data_bits: 8, stop_bits: 1, parity: SerialPort::EVEN}
cl = ModBus::RTUClient.new(port, baud, options)
cl.read_retries = 2
cl.debug = true
# Works fine
begin
puts cl.with_slave(1).read_holding_registers(512, 1)
rescue => error
puts error.message
end
# Intended Timeout
begin
puts cl.with_slave(2).read_holding_registers(512, 1)
rescue => error
puts error.message
end
# Should work, however, issues a timeout.
begin
puts cl.with_slave(1).read_holding_registers(512, 1)
rescue => error
puts error.message
end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在一个Modbus RTU网络中只能存在一个主站。
串行通信无法避免冲突。
单个主机必须按照严格的顺序管理通信:请求>>>等待回复>>请求>>等待回复...
In a Modbus RTU network can only exist one master.
Serial communication has no means for avoiding collisions.
It is the single master that must manage the communications following a strict order: request >> wait for a response >> request >> wait for a response...