class LadderConverter::Mel2Kv
Attributes
codes[R]
converted[R]
dst[R]
ignore_unknown[R]
logging_file[R]
src[R]
Public Class Methods
new(options={})
click to toggle source
# File lib/ladder_converter/mel2kv.rb, line 14 def initialize options={} @src = options[:src] @dst = options[:dst] @logging_file = options[:logging_file] @ignore_unknown = options[:ignore_unknown] @codes = nil end
Public Instance Methods
convert()
click to toggle source
# File lib/ladder_converter/mel2kv.rb, line 60 def convert load @converted = <<EOS DEVICE:132 ;MODULE:Main ;MODULE_TYPE:0 EOS # collect subrouten labels sb_labels = codes.select{|c| c.mnemonic == "CALL"}.map{|c| c.devices.first} # replace mnemonic LABLE to SBN if it's for subroutin. codes.select{|c| c.mnemonic == "LABEL" && sb_labels.include?(c.device)}.each{|c| c.becone_subroutin_label } # add kv codes string @converted += codes.map(&:to_s).join("\n") @converted += "\nENDH\n" end
load()
click to toggle source
# File lib/ladder_converter/mel2kv.rb, line 22 def load return false unless File.exist? @src return true if @codes begin logfile = File.open(logging_file, "w") rescue nil @codes = [] has_end = false CSV.open(@src, "rb:BOM|UTF-16:UTF-8", headers:true, skip_lines:Regexp.new(/^[^\t]+$|PC情報:/), col_sep:"\t").each_with_index do |row, i| begin mnemonic = row["命令"] device = row["I/O(デバイス)"] case mnemonic when 'NOP' # Skip when "" @codes.last.add_device device when 'END', 'FEND' unless has_end @codes << KvCode.new(mnemonic, [device]) has_end = true end else @codes << KvCode.new(mnemonic, [device]) end rescue UnknownCodeError => e mes = "[WARN] SKIPPED! : line #{i+(3+1)} : #{e}" STDERR.puts mes logfile.puts mes if logfile raise unless ignore_unknown end end ensure logfile.close if logfile end end
save()
click to toggle source
# File lib/ladder_converter/mel2kv.rb, line 77 def save return unless dst convert File.write dst, converted end
Private Instance Methods
kv_mnemonic(mnemonic)
click to toggle source
# File lib/ladder_converter/mel2kv.rb, line 86 def kv_mnemonic mnemonic mnemonic end