Class: ModBus::TCPServer
- Inherits:
-
GServer
- Object
- GServer
- ModBus::TCPServer
- Defined in:
- lib/rmodbus/tcp_server.rb
Overview
TCP server implementation
Constant Summary
Constants included from Server
Instance Attribute Summary
Attributes included from Server
#promiscuous, #request_callback, #response_callback
Attributes included from Debug
#logger, #raise_exception_on_mismatch, #read_retries, #read_retry_timeout
Instance Method Summary collapse
-
#initialize(port = 502, opts = {}) ⇒ TCPServer
constructor
Init server.
-
#serve(io) ⇒ Object
Serve requests.
-
#with_slave(uid = 255) ⇒ Object
set the default param.
Constructor Details
#initialize(port = 502, opts = {}) ⇒ TCPServer
Init server
30 31 32 33 34 |
# File 'lib/rmodbus/tcp_server.rb', line 30 def initialize(port = 502, opts = {}) opts[:host] = DEFAULT_HOST unless opts[:host] opts[:max_connection] = 4 unless opts[:max_connection] super(port, opts[:host], opts[:max_connection]) end |
Instance Method Details
#serve(io) ⇒ Object
Serve requests
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rmodbus/tcp_server.rb', line 43 def serve(io) until stopped? header = io.read(7) tx_id = header[0, 2] proto_id = header[2, 2] len = header[4, 2].unpack1("n") unit_id = header.getbyte(6) next unless proto_id == "\x00\x00" req = io.read(len - 1) log "Server RX (#{req.size} bytes): #{logging_bytes(req)}" func = req.getbyte(0) params = parse_request(func, req) pdu = exec_req(unit_id, func, params, req) if pdu resp = "#{tx_id}\x00\x00#{(pdu.size + 1).to_word}#{unit_id.chr}#{pdu}" log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}" io.write resp else log "Ignored server RX (invalid unit ID #{unit_id}, #{req.size} bytes): #{logging_bytes(req)}" end end end |
#with_slave(uid = 255) ⇒ Object
set the default param
37 38 39 |
# File 'lib/rmodbus/tcp_server.rb', line 37 def with_slave(uid = 255) super end |