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