🐥
GX Works3にC#で読み書きしてみた
GX Works3 のシミュレータ機能のデバイスに C# からアクセスしたいという書込みがあったので、
試しにやってみた。今回は SimpleGXC というライブラリを用いた。
動作環境: .NET8
.NET4とかでも利用できる。また、VC++版もある。
MXNET ins1 = new MXNET((byte)enumPLC.UDPV); //GX Simulator2 の場合, プロジェクトに設定されている CPU(石) のバージョンを指定してください。
MXNET ins2 = new MXNET(); // GX Simulator3 の場合, 引数無しのコンストラクタです。
ins1.SockOpen(); //オープンできたらソケット番号 ( 1以上の値) が返却され, 失敗すれば -1;
ins2.SockOpen();
int state = 0;
string[] dev = new string[1000];
for (int i = 0; i < 1000; i++) dev[i] = "M" + (0 + i).ToString();
string dev_ = "D1002\nD1004\nD1006";
ushort[] SendData = new ushort[1000];
ushort[] RcvData = new ushort[1000];
//ランダム読み書きではワードデバイスとビットデバイスの取り扱いは同じ。1000なら 1000ビット
state = ins1.WriteDeviceRandom(dev, 1000, SendData);
state = ins1.ReadDeviceRandom(dev, 1000, ref RcvData); //Read の場合、受信データは参照渡しなので ref キーワードをつけて受信箱を指定
if (state == (int)enumErrorCode.NothingErr)
{
for (int j = 0; j < 1000; j++)
if (state == (byte)enumErrorCode.NothingErr) for (int j = 0; j < 1000; j++) Console.Write("{0}:{1:X}, ", j, RcvData[j]);
}
関数インタフェースは MX Component と同じであり、シンプルに配列と エラー情報は int 値である。
エラー情報にまつわる列挙体もライブラリに包含されている。
なお GX Works2 に対してもアクセスできる。
Discussion