class Plc::Emulator::EmuDevice

Attributes

in_value[R]
out_value[R]
plc[R]

Public Class Methods

new(a, b = nil) click to toggle source
Calls superclass method
# File lib/plc/emulator/emu_device.rb, line 36
def initialize a, b = nil
  super
  @lock = Mutex.new
  @in_value = 0
  @out_value = 0
  @changed = false
end

Public Instance Methods

+(value) click to toggle source
Calls superclass method
# File lib/plc/emulator/emu_device.rb, line 163
def + value
  d = super
  plc ? plc.device_by_name(d.name) : d
end
-(value) click to toggle source
Calls superclass method
# File lib/plc/emulator/emu_device.rb, line 168
def - value
  d = super
  plc ? plc.device_by_name(d.name) : d
end
bool(kind=nil) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 71
def bool kind=nil
  v = value kind
  case v
  when nil, false, 0
    false
  else
    true
  end
end
bool=(value) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 81
def bool= value
  set_value value
end
changed?() click to toggle source
# File lib/plc/emulator/emu_device.rb, line 56
def changed?
  @changed
end
device_by_suffix_number(suffix, number) click to toggle source

NOTE: override at subclass

It should get from plc
Calls superclass method
# File lib/plc/emulator/emu_device.rb, line 62
def device_by_suffix_number suffix, number
  d = super
  plc.device_by_name d.name
end
plc=(plc) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 52
def plc= plc
  @plc = WeakRef.new plc
end
reset() click to toggle source
Calls superclass method
# File lib/plc/emulator/emu_device.rb, line 44
def reset
  @lock.synchronize {
    super
    @in_value = nil
    @out_value = 0
  }
end
set_value(value, kind=nil) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 132
def set_value value, kind=nil
  @lock.synchronize {
    case kind
    when :in
      @in_value = value
    when :out
      @out_value = value
    else
      @changed = true unless @value == value
      @value = value if @changed
    end
  }
end
set_word(value, kind=nil) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 105
def set_word value, kind=nil
  if bit_device?
    f = 1
    d = self
    16.times do
      d.set_value (value & f) != 0, kind
      d = d + 1
      f <<= 1
    end
  else
    set_value value, kind
  end
end
sync_input() click to toggle source
# File lib/plc/emulator/emu_device.rb, line 146
def sync_input
  @lock.synchronize {
    unless @in_value.nil?
      @changed = true unless @value == @in_value
      @value = @in_value if @changed
      @in_value = nil
    end
  }
end
sync_output() click to toggle source
# File lib/plc/emulator/emu_device.rb, line 156
def sync_output
  @lock.synchronize {
    @out_value = @value
    @changed = false
  }
end
value(kind=nil) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 119
def value kind=nil
  @lock.synchronize {
    case kind
    when :in
      @in_value
    when :out
      @out_value
    else
      @value
    end
  }
end
value=(value) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 67
def value= value
  set_value value
end
word(kind=nil) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 85
def word kind=nil
  if bit_device?
    v = 0
    d = self
    f = 1
    16.times do
      v |= f if d.bool(kind)
      d = d + 1
      f <<= 1
    end
    v
  else
    value kind
  end
end
word=(value) click to toggle source
# File lib/plc/emulator/emu_device.rb, line 101
def word= value
  set_word value
end