MELSEC PLC用の統合開発環境 GX Works2 には GX Simulator 2 という仮想PLC環境の機能が付いています。この機能を使うとラダープログラムのデバクが可能です。
データベースなど、パソコンとPLCを連携しているシステムの場合、GX Simulator 2 を用いたデバグにおいては、パソコンからこれに対してアクセスする必要があります。
PLCベンダーである同社から MX Component という通信ライブラリや、パートナー向けに販売なさっているEZSokect というミドルウェアを用いることで、これにアクセスすることが推奨されています。
( recommended to use Official Library)
Free Library
今回はこれらを用いずに、C言語や .NET の機能のみによって、これにアクセスすることを試み、DLLにしてみました。
使用するDLL 「Simple GX」
マルウェアが怖い方は、 vector からインストールください。
GX Simulator2 に対して 960ワードの書き込みを、インクリメントしながら100回おこなっている様子です。C#から呼び出し
//using SimpleGXSimu でDLLを読み込んでください
GXSim ins = new GXSim();
ins.CPU =(int)enumCPU._Non;
ReturnUS rtn = ins.ReadDeviceBlock2("D0",10);
MessageBox.Show(ins.UShortDis(rtn.dat,"/"));
ushort[] dat = new ushort[960];
ushort i;
for (i = 0; i < 959; i++) { dat[i] =(ushort)(i+1) ; }
ins.WriteDeviceBlock2("D0",960,dat);
外部機器との通信ではなく、プロセスとのTCP通信なので設定すべきパラメータは 仮想PLC (プロパティ名 CPU) だけでよろしいです。
なお TCP Address は self で 127.0.0.1 なので内部でやってるので指定する必要はありません。TCP Port に関しても、内部で GX Simulator2 の プロセス名から疎通TCP Port を得ているため、これも指定する必要ありません。
指定する必要がないものはパラメータとしても用意していません。
enumCPU. と入力すると、インテリセンス機能により選択肢が表示されます。
Qシリーズ PLCは数十種類ありますが、GX Simulator2 との通信では実質的にパターンは数種類しかありません(いわゆる、高速とかユニバーサルとか、そんな区分で、ちょうどプロセスも分かれてます。)
ただし C言語コントローラや Q173のようなモーションコントローラCPU などのシミュレーションは試していませんのであしからず
VB.NETから呼び出し
Dim ins As New GXSim
ins.CPU = enumCPU._Non 'CPUの型番. 列挙体がある(e.g. Q00なら _Non, Q00U なら U )
Dim rtn As ReturnUS = ins.ReadDeviceBlock2("D0", 10)
MsgBox(ins.UShortDis(rtn.dat, "/"))
Dim dat(960) As UShort : For i = 0 To 959 : dat(i) = i + 1 : Next
ins.WriteDeviceBlock2("D0", 960, dat)
実用においては
以上は遊びです。遊びではない、実用においては PLCベンダーが販売なさっておられる 公式ソフト MX Component を用いてください。
MCプロトコルは, MCやSLMPコミュニケーションプロトコルリファレンスという形で公開されていますが、GX Simulator のプロトコルは公開されておりません。そういう理由です。