🐥

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 に対してもアクセスできる。

https://www.kumasys.jp/simplegxc/

Discussion