Class: ModBus::TCPSlave
- Inherits:
-
Client::Slave
- Object
- Client::Slave
- ModBus::TCPSlave
- Defined in:
- lib/rmodbus/tcp_slave.rb
Overview
TCP slave implementation
Constant Summary
Constants inherited from Client::Slave
Instance Attribute Summary collapse
-
#transaction ⇒ Object
readonly
Returns the value of attribute transaction.
Attributes inherited from Client::Slave
Attributes included from Options
#raise_exception_on_mismatch, #read_retries, #read_retry_timeout
Attributes included from Debug
#logger, #raise_exception_on_mismatch, #read_retries, #read_retry_timeout
Instance Method Summary collapse
-
#initialize(uid, io) ⇒ TCPSlave
constructor
A new instance of TCPSlave.
-
#read_pdu ⇒ Object
private
overide method for RTU over TCP implamentaion.
-
#send_pdu(pdu) ⇒ Object
private
overide method for RTU over TCP implamentaion.
Methods inherited from Client::Slave
#check_response_mismatch, #coils, #discrete_inputs, #holding_registers, #input_registers, #mask_write_register, #query, #read_coil, #read_coils, #read_discrete_input, #read_discrete_inputs, #read_holding_register, #read_holding_registers, #read_input_register, #read_input_registers, #read_write_multiple_registers, #write_multiple_coils, #write_multiple_registers, #write_single_coil, #write_single_register
Methods included from Debug
Constructor Details
#initialize(uid, io) ⇒ TCPSlave
Returns a new instance of TCPSlave.
19 20 21 22 |
# File 'lib/rmodbus/tcp_slave.rb', line 19 def initialize(uid, io) @transaction = 0 super end |
Instance Attribute Details
#transaction ⇒ Object (readonly)
Returns the value of attribute transaction.
16 17 18 |
# File 'lib/rmodbus/tcp_slave.rb', line 16 def transaction @transaction end |
Instance Method Details
#read_pdu ⇒ Object (private)
overide method for RTU over TCP implamentaion
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rmodbus/tcp_slave.rb', line 39 def read_pdu loop do header = @io.read(7) next unless header trn = header[0, 2].unpack1("n") len = header[4, 2].unpack1("n") msg = @io.read(len - 1) log "Rx (#{(header + msg).size} bytes): " + logging_bytes(header + msg) return msg if trn == @transaction log "Transaction number mismatch. A packet is ignored." end end |
#send_pdu(pdu) ⇒ Object (private)
overide method for RTU over TCP implamentaion
28 29 30 31 32 33 34 35 |
# File 'lib/rmodbus/tcp_slave.rb', line 28 def send_pdu(pdu) @transaction = 0 if @transaction.next > 65_535 @transaction += 1 msg = "#{@transaction.to_word}\x00\x00#{(pdu.size + 1).to_word}#{@uid.chr}#{pdu}" @io.write msg log "Tx (#{msg.size} bytes): " + logging_bytes(msg) end |