class LadderDrive::Protocol::Protocol
Constants
- TIMEOUT
Attributes
host[RW]
port[RW]
Public Class Methods
new(options={})
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 34 def initialize options={} @logger = Logger.new(STDOUT) self.log_level = options[:log_level] || :info end
Public Instance Methods
[](*args)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 108 def [] *args case args.size when 1 # protocol["DM0"] # protocol["DM0".."DM9"] case args[0] when String self[args[0], 1].first when Range self[args[0].first, args[0].count] else raise ArgumentError.new("#{args[0]} must be String or Range.") end when 2 # protocol["DM0", 10] d = device_by_name args[0] c = args[1] if d.bit_device? a = [] b = available_bits_range(d).last until c == 0 n_c = [b, c].min a += get_bits_from_device(n_c, d) d += n_c c -= n_c end a else a = [] b = available_words_range(d).last until c == 0 n_c = [b, c].min a += get_words_from_device(n_c, d) d += n_c c -= n_c end a end else raise ArgumentError.new("wrong number of arguments (given #{args.size}, expected 1 or 2)") end end
[]=(*args)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 151 def []= *args case args.size when 2 # protocol["DM0"] = 0 # protocol["DM0".."DM9"] = [0, 1, .., 9] v = args[1] v = [v] unless v.is_a? Array case args[0] when String self[args[0], 1] = v when Range self[args[0].first, args[0].count] = v else raise ArgumentError.new("#{args[1]} must be String or Array.") end when 3 # protocol["DM0", 10] = [0, 1, .., 9] d = device_by_name args[0] c = args[1] values = args[2] values = [values] unless values.is_a? Array raise ArgumentError.new("Count #{c} is not match #{args[2].size}.") unless c == values.size if d.bit_device? a = [] values.each_slice(available_bits_range(d).last) do |sv| set_bits_to_device(sv, d) d += sv.size end a else a = [] values.each_slice(available_words_range(d).last) do |sv| set_words_to_device(sv, d) d += sv.size end a end else raise ArgumentError.new("wrong number of arguments (given #{args.size}, expected 2 or 3)") end end
available_bits_range(device=nil)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 100 def available_bits_range device=nil -Float::INFINITY..Float::INFINITY end
available_words_range(device=nil)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 104 def available_words_range device=nil -Float::INFINITY..Float::INFINITY end
close()
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 66 def close; end
destination_ipv4()
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 193 def destination_ipv4 Socket.gethostbyname(self.host)[3].unpack("C4").join('.') end
device_by_name(name;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 78 def device_by_name name; nil; end
get_bit_from_device(device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 68 def get_bit_from_device device; get_bits_from_device(1, device_by_name(device)).first; end
get_bits_from_device(count, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 69 def get_bits_from_device count, device; end
get_from_devices(device, count = 1)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 80 def get_from_devices device, count = 1 d = device_by_name device if d.bit_device? get_bits_from_device count, d else get_words_from_device count, d end end
get_word_from_device(device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 73 def get_word_from_device device; get_words_from_device(1, device_by_name(device)).first; end
get_words_from_device(count, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 74 def get_words_from_device count, device; end
log_level()
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 39 def log_level @log_level end
log_level=(level)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 43 def log_level= level @log_level = level.is_a?(String) ? level.to_sym : level case @log_level when :debug @logger.level = Logger::DEBUG when :error @logger.level = Logger::ERROR when :fatal @logger.level = Logger::FATAL when :info @logger.level = Logger::INFO when :unknown @logger.level = Logger::UNKNOWN when :warn @logger.level = Logger::WARN end end
open()
click to toggle source
abstract methods
# File lib/ladder_drive/protocol/protocol.rb, line 65 def open; end
self_ipv4()
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 197 def self_ipv4 Socket::getaddrinfo(Socket.gethostname,"echo",Socket::AF_INET)[0][3] end
set_bit_to_device(bit, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 70 def set_bit_to_device bit, device; set_bits_to_device [bit], device; end
set_bits_to_device(bits, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 71 def set_bits_to_device bits, device; end
set_to_devices(device, values)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 89 def set_to_devices device, values values = [values] unless values.is_a? Array d = device_by_name device if d.bit_device? values = values.map{|v| case v; when 1; true; when 0; false; else; v; end} set_bits_to_device values, d else set_words_to_device values, d end end
set_word_to_device(word, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 75 def set_word_to_device word, device; set_words_to_device [word], device; end
set_words_to_device(words, device;)
click to toggle source
# File lib/ladder_drive/protocol/protocol.rb, line 76 def set_words_to_device words, device; end