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