Class: Simatic::Plc
- Inherits:
-
Object
- Object
- Simatic::Plc
- Defined in:
- lib/simatic/plc.rb
Class Method Summary collapse
Instance Method Summary collapse
- #connect(timeout = 500) ⇒ Object
- #disconnect ⇒ Object
-
#initialize(address, args = {}) ⇒ Plc
constructor
A new instance of Plc.
- #read(*args) ⇒ Object
- #write(args) ⇒ Object
Constructor Details
#initialize(address, args = {}) ⇒ Plc
Returns a new instance of Plc.
9 10 11 12 13 |
# File 'lib/simatic/plc.rb', line 9 def initialize address, args = {} @address = address @rack = args[:rack] || 0 @slot = args[:slot] || 2 end |
Class Method Details
.exchange(address, args = {}, timeout = 500) {|plc| ... } ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/simatic/plc.rb', line 15 def self.exchange address, args = {}, timeout = 500 plc = self.new address, args plc.connect timeout yield plc plc.disconnect end |
Instance Method Details
#connect(timeout = 500) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/simatic/plc.rb', line 71 def connect timeout = 500 @socket = Socket.tcp @address, 102, connect_timeout: timeout / 1000.0 setup = Sessions::SetupSession.new @rack, @slot @socket.send setup.make_request, 0 setup.parse_response @socket.recv BUFFER_SIZE open = Sessions::OpenSession.new @socket.send open.make_request, 0 open.parse_response @socket.recv BUFFER_SIZE end |
#disconnect ⇒ Object
84 85 86 |
# File 'lib/simatic/plc.rb', line 84 def disconnect @socket.close end |
#read(*args) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/simatic/plc.rb', line 23 def read *args if @socket.nil? raise "Plc #{@address} is not connected" end read = Sessions::ReadSession.new memory_mappers = [] args.each do |verbal| memory_mappers << MemoryMapper.new(verbal) end request = read.make_request memory_mappers @socket.send request, 0 # debug_print request response = @socket.recv BUFFER_SIZE # debug_print response result = read.parse_response response # Hash[result.map { |memory_mapper| [memory.verbal, memory.value] }] end |
#write(args) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/simatic/plc.rb', line 48 def write args if @socket.nil? raise "Plc #{@address} is not connected" end memory_mappers = [] args.each do |verbal, value| memory_mappers << MemoryMapper.new(verbal, value: value) end write = Sessions::WriteSession.new request = write.make_request memory_mappers @socket.send request, 0 # debug_print request response = @socket.recv BUFFER_SIZE # debug_print response result = write.parse_response response end |