どうも、もももです!
パソコンのプログラム(VB.NET)からKEYENCE製PLCに対して、上位リンク通信を行った際のコマンドをまとめます。
上位リンク通信とは
イーサネットに接続されているパソコンなどの端末から、あらかじめ決められたフォーマットでコマンドを送信することでPLCのデバイス値の読出し、書込みなどを実行する通信です。
実際に通信するプログラムは下記で紹介しています。
送信コマンドとレスポンス
単体デバイス ビット読取り
「R000」のビットを読取り
・送信データ
'送信コマンド 文字列 Dim sendCmd = "RD R000" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[49, 13, 10]
文字列に変換すると「”1″ & vbCrLf」
※R000=1の場合
複数デバイス ビット読取り
「R000」から5点のビットを読取り
・送信データ
'送信コマンド 文字列 Dim sendCmd = "RDS R000 5" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[49, 32, 48, 32, 49, 32, 48, 32, 49, 13, 10]
文字列に変換すると「”1 0 1 0 1″ & vbCrLf」
※R000=1, R001=0, R002=1, R003=0, R004=1の場合
単体デバイス ワード読取り
「DM000」のワードを読取り
・送信データ
'送信コマンド 文字列 Dim sendCmd = "RD DM000.U" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[48, 48, 48, 49, 48, 13, 10]
文字列に変換すると「”00010″ & vbCrLf」
※DM000=10の場合
複数デバイス ワード読取り
「DM000」から2点のワードを読取り
・送信データ
'送信コマンド 文字列 Dim sendCmd = "RDS DM000.U 2" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[48, 48, 48, 49, 48, 32, 48, 48, 48, 48, 49, 13, 10]
文字列に変換すると「”00010 00001″ & vbCrLf」
※DM000=10, DM001=1の場合
単体デバイス ビット書込み
「R000」に1(ビットON)を書込み
・送信データ
'送信コマンド 文字列 Dim sendCmd = "WR R000 1" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[79, 75, 13, 10]
文字列に変換すると「”OK” & vbCrLf」
複数デバイス ビット書込み
「R000」から5点[1, 0, 1, 0, 0]を書込み
・送信データ
'送信コマンド 文字列 Dim sendCmd = "WRS R000 5 1 0 1 0 0 " + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[79, 75, 13, 10]
文字列に変換すると「”OK” & vbCrLf」
単体デバイス ワード書込み
「DM000」に10を書込み
・送信データ
'送信コマンド 文字列 Dim sendCmd = "WR DM000.U 10" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[79, 75, 13, 10]
文字列に変換すると「”OK” & vbCrLf」
複数デバイス ワード書込み
「DM000」から5点[10, 12, 15, 17, 22]書込み
・送信データ
'送信コマンド 文字列 Dim sendCmd = "WRS DM000.U 5 10 12 15 17 22" + vbCr '送信コマンド バイト配列 Dim byteSendCmd = System.Text.Encoding.ASCII.GetBytes(sendCmd)
・受信データ
受信バイト配列:[79, 75, 13, 10]
文字列に変換すると「”OK” & vbCrLf」
エラーレスポンス
受信バイト配列:[69, 49, 13, 10]
文字列に変換すると”E1″ & vbCrLf
※E1:コマンド異常
まとめ
VB.NETでKEYENCE製PLCに対して上位リンク通信を用いてデバイスの読書きするコマンドをまとめました。
参考
EtherNet/IP機能 KV-EP21V KV8000 KV7500 KV5500 KV-NC1EP ユーザーズマニュアル
コメント