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