1. TOP
  2. OMRON
  3. 上位アプリケーション
  4. Compolet
  5. イベント通知

概要

PLCの変数の値が変化したらイベントを起こすようにします
PLCとPCでイベントを起こしたい変数をタグデータリンクしておきます(ここでは設定方法は説明していません)
フォームにはVariableCompoletをVariableCompolet1というインスタンス名で貼って置きます
VariableCompoletはSysmacGatewayを操作するコンポーネントで、SysmacGatewayのメモリの値が変化することでイベントが起きます

VariableCompolet


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

イベントを起こす変数をセット

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にセットします

イベントが発生した時の処理

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

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

	try
	{
		variableCompolet1.ReciveEvent(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.ReciveEvent(out variableName, out eventID, 0);
object ret = variableCompolet1.ReadVariable(variableName);
	

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

注意

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

この記事へのコメント