OMRONのCX-Compoletでは、PLC変数の変化をイベントとして受け取ることができます。 本記事ではVariableCompoletを使用して、PLC変数の変化をC#アプリケーションへ通知する方法を解説します。

CX-Compoletのイベント通知とは

PLCのデータを取得するタイミングをPLC側で制御したいときなどは、SysmacGatewayで変数の変化を感知することができます
CompoletはSysmacGatewayから変化したことをイベントで受け取ることができます

Compoletがイベントを取得
Compoletがイベントを取得

PLCの変数とSysmacGatewayのタグをタグデータリンクの設定が必要です(NetworkConfiguratorでタグデータリンクを設定します)

SysmacGatewayConsoleのタグテーブル
SysmacGatewayConsoleのタグテーブル

フォームにはVariableCompoletをVariableCompolet1というインスタンス名で貼って置きます
VariableCompoletはSysmacGatewayを操作するコンポーネントで、SysmacGatewayのメモリの値が変化することでイベントが起きます

Visual Studioに配置したVariableCompoletコンポーネント

以下サンプルコードはC#で書いてあります
フォームの作成(ボタンの配置など)は省略しているので適宜ボタンなどは配置してください

VariableCompoletでPLC変数のイベントを登録する

button7をクリックして、ActiveプロパティをTrueにした後に、Windowsのハンドルとイベントを起こす変数をセットします
変数は「aaaa」という名前のBOOL型の変数がPLCにあるとします

private void button7_Click(object sender, EventArgs e)
{
	try
	{
		variableCompolet1.Active = true;
		variableCompolet1.WindowHandle = this.Handle;
		variableCompolet1.SetEvent("aaaa", 1);
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
}
	

解説

5-7行目

variableCompolet1.Active = true;
variableCompolet1.WindowHandle = this.Handle;
variableCompolet1.SetEvent("aaaa", 1);
	

5行目 ActiveをTrueにしてコンポーネントを有効にします
6行目 アプリケーションのハンドル(this.Handle)をCompoletのWindowHandleにセットします
7行目 変数名aaaaのイベントIDを1にセットします

hangedイベントでPLC変数の変化を受け取る

variableCompolet1のChangedイベントにvariableCompolet1_Changedを生成します
上記SetEventをセットした変数が変化するとvariableCompolet1_Changedが実行されます

private void variableCompolet1_Changed(object sender, EventArgs e)
{
	int eventID;
	string variableName;

	try
	{
		variableCompolet1.ReceiveEvent(out variableName, out eventID, 0);
		object ret = variableCompolet1.ReadVariable(variableName);
		Console.WriteLine(variableName + " = " + ret.ToString());
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
}
	

解説

1行目


private void variableCompolet1_Changed(object sender, EventArgs e)
	

SetEvent("aaaa", 1)でセットした変数aaaaが変化したらChangedイベントが発生します

8-9行目


variableCompolet1.ReceiveEvent(out variableName, out eventID, 0);
object ret = variableCompolet1.ReadVariable(variableName);
	

8行目 ReceiveEventで変化した変数名とイベントIDを取得します
9行目 ReadVariableで取得した変数名の値を読み出します

注意

ヘルプにはWindowsメッセージでは複数のイベントが同時に上がる場合、イベントがまとめられることがあるとの記載があります
詳しくはVariableCompoletのChangedイベントのヘルプを見てください

関連ページ

この記事へのコメント