はじめに
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
ソケット機能をONにしてIPアドレスの設定
KVソケットの方式をUDPに変更
ユニット構成エディタ KV-SIR32TX
先頭入力リレー番号を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行目を作成します。

ポート番号やIPアドレスを指定されているデータメモリに格納していきます。ラダー記述でも問題ないと思います。
[スクリプト(S)]→[ボックススクリプト(B)]
次にオープン処理(2行目以降) / 送信処理 / 受信処理 / クローズ処理を作成します。
ニモニックリストを活用すると簡単にラダーに変換できます。
[編集(E)] → [リスト編集(L]) → ニモニックリストを貼り付け → [挿入] / [ブロック置換]

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のモニターモードで内部リレーを制御したいと思います。
- [C#] プログラムを実行する
まだ何も表示されていません。 - [PLC] オープン処理のMR000をオンする
- [PLC] 送信のMR001をオンする
- [C#] コンソールに文字列が表示されたことを確認する
- [C#] MR001のオン/オフを繰り返すたびに文字列が受信できていることが確認できます。