はじめに
前回の記事では、三菱電機製PLC(MELSEC)と通信する最短コードを紹介しました。
🔗 第1弾はこちら
今回は、通信設定について紹介します。
使用ライブラリ
McpXの通信設定
以下は、McpXクラスのコンストラクタのパラメータです。
各パラメータは、PLCの設定内容に合わせて適切に指定する必要があります。
McpX(
string ip,
int port,
string? password = null,
bool isAscii = false,
bool isUdp = false,
RequestFrame requestFrame = RequestFrame.E3
)
パラメータの説明
パラメータ | 型 | デフォルト | 説明 |
---|---|---|---|
ip | string | - | PLCのIPアドレスを指定します。 |
port | int | - | PLCのポートを指定します。 |
password | string | null | リモートパスワードを設定している場合に限り、パスワードを指定します。 |
isAscii | bool | false (バイナリ) |
ASCIIコードによる交信を行う場合にtrue を指定します。 |
isUdp | bool | false (TCP) |
UDPによる交信を行う場合にtrue を指定します。 |
requestFrame | RequestFrame | RequestFrame.E3 (3Eフレーム) |
フレーム(電文フォーマット)の種類を指定します。 |
ip
、port
は、必須項目です。
ip
、port
のみを指定した場合のデフォルト設定は、下記になります。
- バイナリ交信
- TCP
- 3Eフレーム
バイナリとASCIIどっちを選択するべきか?
結論から申し上げると、バイナリになります。
バイナリは、ASCIIに比べてパケットサイズが約半分で済むため、高速に通信できます。
また、McpXの内部処理は、バイナリベースで実装しており、内部処理でバイナリ、ASCIIを相互変換しています。
このため、ASCII通信はバイナリ通信に比べて変換処理が多く、通信速度・処理速度の両面でやや劣る傾向があります。
ただし、既存のPLCでパラメータ変更ができない場合や、上記の点を理解したうえでASCIIを選ぶのであれば、使用しても問題ありません。
TCPとUDPどっちを選択するべきか?
速度だけの観点で言うとUDPです。
TCPには、UDPにはない信頼性を確保するための処理が含まれているため、UDPと比べてどうしても通信速度は低下します。
しかし、UDPでは通信の特性上、信頼性が担保されないので使い分けて使用するのがいいと思います。
例えば、データの書き込みなど信頼性が求められる処理にはTCPを、周期的にデータを読み取るような処理にはUDPを使うなど、用途に応じて使い分けることで、信頼性とパフォーマンスの両立が可能です。
3Eフレームと4Eフレームどっちを選択するべきか?
使用するPLCが対応している電文フォーマットを選択してください。
近年のPLC(iQ-R)などは、どちらのフォーマットにも対応していますが、
少し前のQ**UDEなどのCPU内蔵Ethernetポートを持つPLCでは、3Eフレームのみに対応している場合があります。
4Eフレームは3Eフレームにシリアル番号を追加した拡張フレームです。
要求電文にシリアル番号を付加することで、複数送信した場合などに応答電文の識別ができます。
インスタンスの生成
McpXクラスは IDisposable インターフェースを実装しており、using
句を使うことで、インスタンスが不要になったタイミングで自動的にPLCとの接続を切断し、リソースを解放します。その為、using
句を使ったインスタンスの生成を推奨します。
推奨
using (var mcpx = new McpX("192.168.12.88", 10000)){
...
}
非推奨
var mcpx = new McpX("192.168.12.88", 10000);
...
mcpx.Dispose()
まとめ
今回は、三菱PLCと通信する際に必要な McpXの基本設定について紹介しました。
-
ip
やport
は必須、その他の通信方式(ASCII/バイナリ、TCP/UDP、3E/4E)は用途やPLCの仕様に応じて選択する - デフォルトは「バイナリ + TCP + 3Eフレーム」が基本構成
- McpXのインスタンスの生成は、
using
句を使うことで、確実に接続を閉じることができる
次回は、McpXが対応している各種コマンドとその使い方を具体的なサンプルコードとともに紹介していきます!
参考リンク
💡 気になった方はぜひGitHubのリポジトリをチェックしてみてください。
よければ ⭐スター もよろしくお願いします!