Class: Simatic::Sessions::WriteSession

Inherits:
ExchangeSession show all
Defined in:
lib/simatic/sessions/write_session.rb

Overview

Write communication session

Instance Method Summary collapse

Methods inherited from Session

#packet_number

Instance Method Details

#make_request(memory_mappers) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/simatic/sessions/write_session.rb', line 8

def make_request memory_mappers
  @memory_mappers = memory_mappers

  param = [ FuncWrite, # 8bit function
            @memory_mappers.count, # count of read-requests
          ].pack('C2')

  data = ''

  @memory_mappers.each do |memory_mapper|
    param += write_request_param memory_mapper
    data += write_request_data memory_mapper
  end


  super param, data
end

#parse_response(raw_data) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/simatic/sessions/write_session.rb', line 26

def parse_response raw_data
  super raw_data

  unless FuncWrite == @function
    raise "unknown function 0x#{@function.to_s(16)} in #{self.class} response"
  end

  result_code = @data[0,1].unpack('C').first

  case result_code
  when 0xff
    result_code
  when 0x0A
    raise "Item not available, code #{result_code}" # for s7 300
  when 0x03
    raise "Item not available, code #{result_code}" # for s7 200
  when 0x05
    raise "Address out of range, code #{result_code}"
  when 0x07
    raise "Write data size mismatch, code #{result_code}"
  else
    raise "Unknown error, code #{result_code}"
  end
end