class Simatic::Sessions::Session

Parent of all communication sessions

Public Instance Methods

make_request(payload) click to toggle source
# File lib/simatic/sessions/session.rb, line 25
def make_request payload
  [0x03, 0x00, payload.length + 4].pack('CCn') + payload
end
packet_number() click to toggle source
# File lib/simatic/sessions/session.rb, line 20
def packet_number
  @@pdu_num = 0 if @@pdu_num >= 0xffff
  @@pdu_num += 1
end
parse_response(raw_data) click to toggle source
# File lib/simatic/sessions/session.rb, line 29
def parse_response raw_data
  # print "raw "; raw_data.bytes.each{|byte| printf "%02X ", byte}; puts ''

  @real_length = raw_data.length
  raise "empty response" if @real_length < 2

  @protocol_version = raw_data[0,2].unpack('n').first
  raise "unknown response 0x#{@protocol_version.to_s(16)}" if @protocol_version != 0x0300
  
  @lenght = raw_data[2,2].unpack('n').first
  raise "too short response" if @real_length < 4
  raise "broken response length #{@real_length}, must be #{@lenght}" if @real_length != @lenght
end