class LadderDrive::PlcDevice

Constants

ESC_SUFFIXES
NUMBER_TYPE_DEC
NUMBER_TYPE_DEC_HEX
NUMBER_TYPE_HEX
SUFFIXES_FOR_BIT
SUFFIXES_FOR_DEC
SUFFIXES_FOR_DEC_HEX
SUFFIXES_FOR_HEX
SUFFIXES_FOR_INPUT

Attributes

number[R]
suffix[R]
value[RW]
word[RW]
word=[RW]

Public Class Methods

new(a, b = nil) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 53
def initialize a, b = nil
  @suffix = nil
  @value = 0
  case a
  when Integer
    @suffix = ESC_SUFFIXES[a]
    @number = b
  when String, Symbol
    a = a.to_s # convert to string if it's a symbol
    if b
      @suffix = a.upcase
      @number = b
    else
      /([A-Z]+)?([0-9A-F]+)/i =~ a
      @suffix = ($1 || "").upcase
      case number_type
      when NUMBER_TYPE_DEC_HEX
        n = $2.to_i
        @number = (n / 100) * 16 + (n % 100)
      when NUMBER_TYPE_HEX
        @number = $2.to_i(16)
      else
        @number = $2.to_i
      end
    end
  end
end
program_area_device() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 47
def program_area_device
  @program_area_device ||= new "PRG0"
end
status_from_plc_device() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 43
def status_from_plc_device
  @status_from_plc_device ||= new "SD1"
end
status_to_plc_device() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 39
def status_to_plc_device
  @status_to_plc_device ||= new "SD0"
end

Public Instance Methods

+(value) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 116
def + value
  device_by_suffix_number self.suffix, self.number + value
end
-(value) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 120
def - value
  device_by_suffix_number self.suffix, [self.number - value, 0].max
end
bit_device?() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 112
def bit_device?
  suffixes_for_bit.include? @suffix
end
bool() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 139
def bool
  case @value
  when Integer
    @value != 0
  else
    !!@value
  end
end
bool=(v;) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 147
def bool= v; @value = v; end
device_by_suffix_number(suffix, number) click to toggle source

NOTE: override at subclass

It should get from plc
# File lib/ladder_drive/plc_device.rb, line 104
def device_by_suffix_number suffix, number
  self.class.new suffix, number
end
device_code() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 175
def device_code
  ESC_SUFFIXES.index @suffix
end
input?() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 124
def input?
  suffixes_for_input.include? @suffix
end
name() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 81
def name
  case number_type
  when NUMBER_TYPE_DEC
    "#{@suffix}#{@number}"
  when NUMBER_TYPE_DEC_HEX
    a = [@number / 16, @number % 16]
    ns = begin
      s = a.last.to_s.rjust(2, "0")
      s = a.first.to_s + s unless a.first == 0
      s
    end
    "#{@suffix}#{ns}"
  when NUMBER_TYPE_HEX
    ns = @number.to_s(16).upcase
    ns = "0" + ns unless /^[0-9]/ =~ ns
    "#{@suffix}#{ns}"
  else
    nil
  end
end
next_device() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 108
def next_device
  device_by_suffix_number @suffix, @number + 1
end
reset() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 179
def reset
  @value = 0
end
set_text(value, len=8) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 160
def set_text value, len=8
  value = value[0, len]
  value << "\00" unless value.length % 2 == 0
  a = value.unpack("n*")
  d = self
  a.each do |v|
    d.value = v
    d = d.next_device
  end
end
text(len=8) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 151
def text len=8
  n = (len + 1) / 2
  d = self
  a = []
  n.times{ a << d.value; d = d.next_device}
  s = a.pack("n*").split("\x00").first
  s ? s[0,len] : ""
end
text=(value) click to toggle source
# File lib/ladder_drive/plc_device.rb, line 171
def text= value
  set_text value
end

Private Instance Methods

number_type() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 201
def number_type
  return NUMBER_TYPE_DEC if suffixes_for_dec.include? @suffix
  return NUMBER_TYPE_DEC_HEX if suffixes_for_dec_hex.include? @suffix
  return NUMBER_TYPE_HEX if suffixes_for_hex.include? @suffix
  nil
end
suffixes() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 197
def suffixes
  suffixes_for_dec + suffixes_for_dec_hex + suffixeds_for_hex
end
suffixes_for_bit() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 194
def suffixes_for_bit; SUFFIXES_FOR_BIT; end
suffixes_for_dec() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 191
def suffixes_for_dec; SUFFIXES_FOR_DEC; end
suffixes_for_dec_hex() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 192
def suffixes_for_dec_hex; SUFFIXES_FOR_DEC_HEX; end
suffixes_for_hex() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 193
def suffixes_for_hex; SUFFIXES_FOR_HEX; end
suffixes_for_input() click to toggle source
# File lib/ladder_drive/plc_device.rb, line 195
def suffixes_for_input; SUFFIXES_FOR_INPUT; end