class Snap7::Client
Public Class Methods
finalizer(ptr)
click to toggle source
@return [Proc] @see www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/
# File lib/ffi-snap7/client/client.rb, line 10 def self.finalizer(ptr) proc do ptrptr = FFI::MemoryPointer.new :pointer ptrptr.write_pointer ptr Snap7.cli_destroy ptrptr end end
new()
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 19 def initialize @cli = Snap7.cli_create @connected = false ObjectSpace.define_finalizer self, self.class.finalizer(@cli) end
Public Instance Methods
connect(address, rack, slot)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 33 def connect(address, rack, slot) check_rc Snap7.cli_connect_to(@cli, address, rack, slot) @connected = true end
connected?()
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 45 def connected? @connected end
db_read(db_number, start, size)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 63 def db_read(db_number, start, size) p_usr_data = FFI::MemoryPointer.new :uchar, size check_rc Snap7.cli_db_read(@cli, db_number, start, size, p_usr_data) p_usr_data.get_array_of_uint8 0, size end
db_write(db_number, start, size, data)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 70 def db_write(db_number, start, size, data) p_usr_data = FFI::MemoryPointer.new :uchar, size p_usr_data.put_array_of_uint8 0, data check_rc Snap7.cli_db_write(@cli, db_number, start, size, p_usr_data) end
disconnect()
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 39 def disconnect Snap7.cli_disconnect @cli @connected = false end
plc_status()
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 55 def plc_status p_status = FFI::MemoryPointer.new :uchar, 1 check_rc Snap7.cli_get_plc_status(@cli, p_status) result = p_status.get_array_of_uint8 0, 1 { 0 => 'unknown', 4 => 'stopped', 8 => 'running'}[result.first] end
remote_port()
click to toggle source
@return [Integer]
# File lib/ffi-snap7/client/client.rb, line 86 def remote_port p_port = FFI::MemoryPointer.new(:uint16) check_rc Snap7.cli_get_param(@cli, P_u16_RemotePort, p_port) p_port.read_uint16 end
remote_port=(port)
click to toggle source
@param port [Integer] remote port to connect to
# File lib/ffi-snap7/client/client.rb, line 78 def remote_port=(port) p_value = FFI::MemoryPointer.new(:uint16) p_value.write_uint16 port check_rc Snap7.cli_set_param(@cli, P_u16_RemotePort, p_value) end
set_session_password(password)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 50 def set_session_password(password) check_rc Snap7.cli_set_session_password(@cli, password) end
to_ptr()
click to toggle source
@return [FFI::MemoryPointer] pointer to the native object
# File lib/ffi-snap7/client/client.rb, line 28 def to_ptr @cli end
Private Instance Methods
check_rc(rc)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 96 def check_rc(rc) fail error_text(rc) unless rc == 0 end
error_text(error)
click to toggle source
# File lib/ffi-snap7/client/client.rb, line 101 def error_text(error) text_len = 1024 text_ptr = FFI::MemoryPointer.new :char, text_len if Snap7.cli_error_text(error, text_ptr, text_len) == 0 text_ptr.read_string else fail "Error getting error text for error no #{error}" end end