はじめに
三菱電機製のPLCとC#で通信を行う場合、一般的には MX Component を使用するのが定番です。
しかし、COMベースのMX ComponentはWindows環境に依存しており、パフォーマンス面での課題も少なくありません。
そこで本記事では、.NETネイティブで開発された軽量ライブラリ McpX を用いて、 MX Component との通信速度を比較し、実用上どの程度の差があるのかを検証します。
検証環境
PC構成
- Windows 11 Professional
- CPU Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz 3.50 GHz
- メモリ 32GB
- ストレージ SSD 256GB
- .Net 9.0.203
- 使用ライブラリ
- McpX 0.5.1
- MX Component 4
- McpX使用プロトコル
- 3Eフレーム
- バイナリ
- TCP
本環境は、Proxmoxにセットアップした仮想環境を使用しております。
ネットワーク構成
PLC に内蔵された Ethernet ポートと、PC を市販のスイッチングハブ経由で接続しています。
測定方法
PLCのデバイスメモリに対して、連続領域の読み出し、書き込みを行い、その処理速度を比較対象としています。
測定は、読み書きするデバイス点数を 500点から10000点まで1000点刻みで変化させ、それぞれの条件での通信時間を記録しました。
各条件につき、同一処理を 100回連続で実行し、System.Diagnostics.Stopwatch
クラスを用いて 実行時間(ms)の平均値を計測しています。
読み出しパフォーマンスの比較
McpX はすべての点数において MX Component よりも高速に読み出し処理を完了しており、特に 1000 点以上ではその差が明確に現れています。例えば 5000 点読み出す場合、McpX は 15.25ms に対し、MX Component は 19.62ms と、約 22% の高速化が見られます。
データ点数が増えるにつれて両者の差は広がっており、10000 点では McpX が約 27% 高速です。
点数 | McpX (ms) | MXComponent (ms) |
---|---|---|
500 | 2.36 | 3.02 |
1000 | 4.16 | 6.06 |
2000 | 7.05 | 9.33 |
3000 | 10.05 | 12.85 |
4000 | 12.89 | 16.36 |
5000 | 15.25 | 19.62 |
6000 | 18.02 | 24.65 |
7000 | 21.02 | 31.24 |
8000 | 24.03 | 32.82 |
9000 | 27.01 | 36.95 |
10000 | 29.91 | 40.83 |
書き込みパフォーマンスの比較
McpX はすべての点数において MX Component よりも高速に書き込み処理を完了しており、特に 1000 点以上ではその差が明確に現れています。例えば 5000 点書き込む場合、McpX は 17.09ms に対し、MX Component は 22.75ms と、約 25% の高速化が見られます。
データ点数が増えるにつれて両者の差は広がっており、10000 点では McpX が約 25% 高速です。
点数 | McpX (ms) | MXComponent (ms) |
---|---|---|
500 | 2.08 | 3.08 |
1000 | 4.13 | 6.19 |
2000 | 7.92 | 10.39 |
3000 | 11.05 | 14.16 |
4000 | 14.07 | 18.52 |
5000 | 17.09 | 22.75 |
6000 | 20.38 | 26.96 |
7000 | 24.04 | 30.84 |
8000 | 27.03 | 35.48 |
9000 | 30.04 | 39.10 |
10000 | 33.06 | 43.92 |
まとめ
本記事では、三菱PLCとの通信において一般的に使用される MX Component と、.NETネイティブで動作する軽量ライブラリ McpX を用いて、読み出し・書き込み処理のパフォーマンスを比較しました。
検証の結果、すべてのデータ点数において McpX は MX Component よりも、平均して約 26% 高速に処理できることが確認できました。
この差は、単なる COM オーバーヘッドの有無だけでなく、使用プロトコルの構造的な違いにも起因しています。
また、McpX は COM に依存しない純粋な .NET 実装であるため、クロスプラットフォームやクラウド実行環境への展開にも適しており、将来的な保守性や移植性の面でも有利ではないかと思います。
参考リンク
💡 気になった方はぜひGitHubのリポジトリをチェックしてみてください。
よければ ⭐スター もよろしくお願いします!