Class: Simatic::Sessions::ExchangeSession
- Defined in:
- lib/simatic/sessions/exchange_session.rb
Overview
Parent of all exchange sessions classes
Direct Known Subclasses
Instance Method Summary collapse
Methods inherited from Session
Instance Method Details
#make_request(param, data = '', udata = '') ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/simatic/sessions/exchange_session.rb', line 7 def make_request param, data = '', udata = '' super [0x02, 0xf0, 0x80, # 24bit pdu_start 0x32, # 8bit header_start 0x01, # 8bit header_type 0x00, # 16bit packet_number, # 16bit pdu_number param.length, # 16bit param_length data.length, # 16bit data_length ].pack('CCCCCnnnn') + param + data end |
#parse_response(raw_data) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/simatic/sessions/exchange_session.rb', line 18 def parse_response raw_data super pdu_start = raw_data[4,3].unpack('C*') unless [0x02, 0xF0, 0x80] == pdu_start raise "unknown response recived on #{self.class} with pdu start by #{pdu_start}" end header_type = raw_data[8, 1].unpack('C').first @pdu_number = raw_data[11, 2].unpack('n').first param_length = raw_data[13, 2].unpack('n').first data_length = raw_data[15, 2].unpack('n').first if (2..3).member? header_type udata_length = raw_data[17,2].unpack('n').first data_start = 19 else data_start = 17 end @params = raw_data[data_start, param_length] @data = raw_data[data_start + param_length, data_length] @udata = raw_data[data_start + param_length + data_length, udata_length] if (2..3).member? header_type @function = @params[0,1].unpack('C').first @block_count = @params[1,1].unpack('C').first unless @function == FuncOpenS7Connection # print "params "; @params.bytes.each{|byte| printf "%02X ", byte}; puts '' if DEBUG # print "data "; @data.bytes.each{|byte| printf "%02X ", byte}; puts '' if DEBUG end |