class Modbus::Client

Public Class Methods

new(uri) click to toggle source
# File lib/modbus/client.rb, line 11
def initialize(uri)
  @base_polling_interval = 1
  @last_poll_time        = Time.now
  @uri                   = URI uri
end

Public Instance Methods

connect() click to toggle source
# File lib/modbus/client.rb, line 29
def connect
  EM.connect @uri.host, @uri.port, Modbus::Connection::TCPClient, self
end
connected(conn) click to toggle source
# File lib/modbus/client.rb, line 18
def connected(conn)
  @conn = conn
  schedule_next_poll
end
disconnected(conn) click to toggle source
# File lib/modbus/client.rb, line 24
def disconnected(conn)
  reconnect
end

Private Instance Methods

poll() click to toggle source
# File lib/modbus/client.rb, line 53
def poll
  # no-op
end
reconnect() click to toggle source
# File lib/modbus/client.rb, line 37
def reconnect
  EM.add_timer(5) { connect }
end
schedule_next_poll() click to toggle source
# File lib/modbus/client.rb, line 42
def schedule_next_poll
  poll_time      = Time.now - @last_poll_time
  next_poll_time = [@base_polling_interval - poll_time, @base_polling_interval*0.25].max

  EM.add_timer(next_poll_time) do
    @last_poll_time = Time.now
    poll
  end
end
transaction(timeout = 2) { |client conn, timeout| ... } click to toggle source
# File lib/modbus/client.rb, line 58
def transaction(timeout = 2)
  yield Modbus::Transaction::Client.new @conn, timeout
end