C#

【PLC / C#】KEYENCE PLCからC#に通知【KVソケット】

はじめに

PLCのデータをリアルタイムでPC(ソフトウェア)に表示させたいときなど、PLC側からPC側(プログラム)に変更通知などを送りたいと思ったことはないでしょうか。

上位リンクを使用して定期的にPLCのデバイス値を参照するようなプログラムを書けば実現できそうですが、あまりスマートではないと私は思います。

KVソケット(UDP)という機能を用いることでPLCからPCへ通知できることが分かったので紹介したいと思います。

KVソケットはKV-8000およびKV-7500(ver1.1+)でのみ使用可能です。

IPアドレスなどの確認

今回はこのような設定で解説します。

IPアドレス ポート
PC 192.168.2.194 65000
PLC 192.168.2.35 9000

PLCの設定

使用環境はKV-8000 + KV-SIR32XT / KV STUDIO ver.10です。

KV-8000 機能 ソケット機能 使用する
基本 IPアドレス 192.168.2.194
サブネットマスク 255.255.255.0
ソケット0 KVソケット UDP
KV-SIR32XT 基本 先頭入力リレー番号 R38000

ユニット構成エディタ KV-8000
ユニット構成エディタ1
ソケット機能をONにしてIPアドレスの設定

ユニット構成エディタ2
KVソケットの方式をUDPに変更

ユニット構成エディタ KV-SIR32TX
ユニット構成エディタ3
先頭入力リレー番号をR38000に変更

  • リレー番号に関してはソケット0 受信要求などのデバイス値とバッティングするためR38000を先頭にしています。他のソケット番号を使用する際は注意してください。
  • ポート番号は0~65535の間で指定可能で1024以上の番号を指定してください。
    0~1023はWell-know Port(よく知られたポート)と呼ばれすでに予約済みの番号になります。

PLCのプログラム

EtherNet/IP機能 KV-EP21V KV-8000 KV-7500 KV-5500 KV-NC1EP ユーザーズマニュアル 084541
14章 KVソケット通信機能 →14-3 UDP/IPによる通信

P.14-40 オープン処理 / 送信処理
P.14-41 受信処理 / クローズ処理 を記述していきます。

まずはオープン処理の1行目を作成します。

KVスクリプト オープン処理KVスクリプト

ポート番号やIPアドレスを指定されているデータメモリに格納していきます。ラダー記述でも問題ないと思います。

[スクリプト(S)]→[ボックススクリプト(B)]

次にオープン処理(2行目以降) / 送信処理 / 受信処理 / クローズ処理を作成します。
ニモニックリストを活用すると簡単にラダーに変換できます。

[編集(E)] → [リスト編集(L]) → ニモニックリストを貼り付け → [挿入] / [ブロック置換]

KVソケットプログラム例

MR001をオンするたびに”ABCDE”という文字列を送信するプログラム

PC側のプログラム

簡略化のためコンソールアプリ+同期受信で記述しています。

static void Main(string[] args)
{
    // PC側の設定
    var local = new IPEndPoint(IPAddress.Parse("192.168.2.194"), 65000);
    // PLC側の設定
    var remote = new IPEndPoint(IPAddress.Parse("192.168.2.35"), 9000);
    var client = new UdpClient(local);

    while (true)
    {
        // 受信待機
        var buffer = client.Receive(ref remote);

        // 受信データを表示
        var data = Encoding.UTF8.GetString(buffer);
        Console.WriteLine(data);
    }
}

動作確認

KV STUDIOのモニターモードで内部リレーを制御したいと思います。

  1. [C#] プログラムを実行する

    まだ何も表示されていません。
  2. [PLC] オープン処理のMR000をオンする
    KVソケットオープン処理
    KVソケットオープン処理2
  3. [PLC] 送信のMR001をオンする
    KVソケット送信処理
    KVソケット送信処理2
  4. [C#] コンソールに文字列が表示されたことを確認する
    KVソケット受信
  5. [C#] MR001のオン/オフを繰り返すたびに文字列が受信できていることが確認できます。
    KVソケット複数受信