ehtcp.rbは、(株)日立産機システム製PLCであるH/EHシリーズのRuby用タスクコードイーサネット通信ライブラリです。
動作確認は、ruby 2.2.0p0 (ActiveScriptRuby)で行っています。
ehtcp.rbのダウンロード(ehtcpV101.lzh)
Ethtcpクラス タスクコードイーサネット通信用クラスです。
・応答タスクコード、リターンコードは、(株)日立産機H/EHシリーズマニュアルのタスクコード仕様を参照して下さい
・LUMPアドレスは、"FFFF0000"です。
・読み書きは占有不要のタスクコードを使用しています。
PLCのイーサネット接続先は、IPアドレスを「192.168.1.198」、ポート番号を9001としています。
設定方法の詳細については、H/EHシリーズマニュアルを参照してください。
プログラムは、WR100から10ワード、R10から10ビットの読み込みを行い、「WR100=WR100+1」を行っています。
qキーで終了します。
# coding: utf-8 require './ehtcp' require './wincons' wcons = Console.new(__ENCODING__) ehtcpd = Ethtcp.new ir = ehtcpd.connect("192.168.1.198",9001) if ir != 0 print "PLC接続失敗¥r¥n" exit end print "PLC接続¥r¥n" ehtcpd.cancel ir,ic = ehtcpd.unlock(0) #占有強制解除 ir,ic,sd = ehtcpd.cpustatus(4) #cpuの名称 print sd + "¥r¥n" ir,ic,sd = ehtcpd.cpustatus(2) #システムソフトのバージョン print sd + "¥r¥n" while true do ir,ic,sd = ehtcpd.read("WR",0x100,10) # WR100から10ワード読み込み if ir != 0 print "PLCエラー1 ir=" + ir.to_s + ",ic=" + ic.to_s + "¥r¥n" break end ic = 1 sa = "" sd.each{|s1| sa += sprintf("%04X", s1) + "," } print sa + "¥r¥n" iv = sd[0] + 1 ehtcpd.write("WR",0x100,[iv]) # WR100 = WR100 + 1 ir,ic,sd = ehtcpd.read("R",0x10,10) # R10から10ビット読み込み if ir != 0 print "PLCエラー2 ir=" + ir.to_s + ",ic=" + ic.to_s + "¥r¥n" break end sa = "" sd.each{|s1| sa += s1.to_s + "," } print sa + "¥r¥n" ca = wcons.inkey if ca[0] == "q" || ca[0] == "Q" break end sleep(0.1) end ehtcpd.disconnect print "end¥r¥n" |
履歴