Class: McProtocolE::Frame3e::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/mc_protocol_e/frame_3e/request.rb

Overview

This class shows a request of MC protocol.

Constant Summary collapse

DEFAULT_READ_TIMEOUT =
3
SUB_HEADER =
"\x50\x00".b

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(access_route:, wait_sec:, command:) ⇒ Request

Constructor.

Parameters:

  • access_route (AccessRoute)

    access route

  • wait_sec (Numeric)

    waiting second

  • command (Object)

    command of MC protocol



20
21
22
23
24
25
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 20

def initialize(access_route:, wait_sec:, command:)
  @sub_header = SUB_HEADER
  @access_route = access_route
  @wait_sec = WaitSec.new(wait_sec)
  @command = command
end

Class Method Details

.batch_read_in_multiple(access_route:, wait_sec:, device_ranges:) ⇒ Object

Returns a request to batch read in multiple.

Parameters:

  • access_route (AccessRoute)

    access route

  • wait_sec (Numeric)

    waiting second

  • device_ranges (Array<DeviceRange>)

    device ranges



31
32
33
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 31

def self.batch_read_in_multiple(access_route:, wait_sec:, device_ranges:)
  new(access_route: access_route, wait_sec: wait_sec, command: BatchReadInMultiple.new(device_ranges: device_ranges))
end

.batch_read_in_word(access_route:, wait_sec:, device_range:) ⇒ Object

Returns a request to batch read in word.

Parameters:

  • access_route (AccessRoute)

    access route

  • wait_sec (Numeric)

    waiting second

  • device_range (DeviceRange)

    device range



39
40
41
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 39

def self.batch_read_in_word(access_route:, wait_sec:, device_range:)
  new(access_route: access_route, wait_sec: wait_sec, command: BatchReadInWord.new(device_range: device_range))
end

.batch_write_in_word(access_route:, wait_sec:, device_range:, values:) ⇒ Object

Returns a request to batch write in word.

Parameters:

  • access_route (AccessRoute)

    access route

  • wait_sec (Numeric)

    waiting second

  • device_range (DeviceRange)

    device range

  • values (Array)

    values to write



48
49
50
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 48

def self.batch_write_in_word(access_route:, wait_sec:, device_range:, values:)
  new(access_route: access_route, wait_sec: wait_sec, command: BatchWriteInWord.new(device_range: device_range, values: values))
end

Instance Method Details

#exec(socket, read_timeout = DEFAULT_READ_TIMEOUT) ⇒ Object

Writes and returns a response.

Parameters:

  • socket (IO)

    TCP socket

  • read_timeout (Integer) (defaults to: DEFAULT_READ_TIMEOUT)

    read timeout second

Returns:

  • (Object)

    responce



56
57
58
59
60
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 56

def exec(socket, read_timeout = DEFAULT_READ_TIMEOUT)
  socket.write(to_b)
  res = Response.recv(socket, read_timeout)
  command.parse(res)
end

#to_bString

Returns binary string.

Returns:

  • (String)

    binary string



64
65
66
# File 'lib/mc_protocol_e/frame_3e/request.rb', line 64

def to_b
  sub_header + access_route.to_b + request_len_to_b + wait_sec.to_b + command.to_b
end