OMRONのCX-Compoletを使用すると、FINS通信によってPLCのDMエリアやCIOエリアなどのメモリを読み書きできます。 本記事ではSysmacCJコンポーネントを使用した接続方法と、DMエリアの読出し・書込み方法をC#サンプル付きで解説します。

FINS通信とは

Ethernet経由でPLCのDM、CIO、WRなどのメモリエリアへアクセスする方法を説明します。 FINS通信では変数名ではなくDM0000やCIO100などのアドレスを指定してデータの読み書きを行います。
フォームにはSysmacCJをsysmacCJ1というインスタンス名で貼って置きます
Visual Studioに配置したSysmacCJコンポーネント
以下サンプルコードはC#で書いてあります
フォームの作成(ボタンの配置など)は省略しているので適宜ボタンなどは配置してください

sysmacCJ1をアクティブにする

通信をするには通信相手のPLCのFinsアドレス(ネットワーク番号、ノード番号、号機番号)をセットして、ActiveプロパティをTrueにします
サンプルではフォームロード時にセットします

private void Form1_Load(object sender, EventArgs e)
{
	sysmacCJ1.NetworkAddress = 0;
	sysmacCJ1.NodeAddress = 1;
	sysmacCJ1.UnitAddress = 0;
	sysmacCJ1.Active = true;
}
	

解説

3-4行目

sysmacCJ1.NetworkAddress = 0;
sysmacCJ1.NodeAddress = 1;
sysmacCJ1.UnitAddress = 0;
sysmacCJ1.Active = true;
	

送信先のPLCのFINSアドレスを設定してActiveをTrueにします
ActiveをTrueにすることで送信先FINSアドレスのPLCと接続します

DMの読出し

button1をクリックするとReadMemoryメソッドを実行してDM0~9の値を読み出します

private void button1_Click(object sender, EventArgs e)
{
	try
	{
		int[] value = (int[])sysmacCJ1.ReadMemory(OMRON.Compolet.SYSMAC.SysmacCSBase.MemoryTypes.DM, 0, 10, false);
		Console.WriteLine(value[0]);
	}
	catch(Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
}
	

解説

5行目


int[] value = (int[])sysmacCJ1.ReadMemory(OMRON.Compolet.SYSMAC.SysmacCSBase.MemoryTypes.DM, 0, 10, false);
	

ReadMemoryを使ってDM0から10CH分の値を読み出します
戻り値はObject型のためint[]にキャストしてvalueに格納します

DMの書込み

button2をクリックするとWriteMemoryメソッドを実行してDM0~2に値を書込みます

private void button2_Click(object sender, EventArgs e)
{
	try
	{
		int[] value = new int[3];
		value[0] = 1;
		value[1] = 2;
		value[2] = 3;

		sysmacCJ1.WriteMemory(OMRON.Compolet.SYSMAC.SysmacCSBase.MemoryTypes.DM, 0, value);
	}
	catch(Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
}
	

解説

5-8行目


int[] value = new int[3];
value[0] = 1;
value[1] = 2;
value[2] = 3;
	

書き込む値をセットします

10行目


sysmacCJ1.WriteMemory(OMRON.Compolet.SYSMAC.SysmacCSBase.MemoryTypes.DM, 0, value);
	

WriteMemoryを使ってDM0からValueの値を書き込みます

関連ページ

この記事へのコメント