三菱電機PLCとの通信を、数行で実装。
McpX は、MCプロトコルで三菱電機PLC(MELSEC)と通信する .NET ライブラリです。TCP/UDP でデバイスメモリを読み書きでき、直感的で型安全な API により、プロトコルの定型処理は不要です。
- NUGET
- 16k+
- LICENSE
- MIT
- PLATFORM
- Win · Linux · macOS
- PLC
- Q · iQ-R · iQ-F
using (var mcpx = new McpX("192.168.12.88", 10000))
{
bool[] mArr = mcpx.BatchRead<bool>(Prefix.M, "0", 7000);
short[] dArr = mcpx.BatchRead<short>(Prefix.D, "1000", 7000);
mcpx.BatchWrite<int>(Prefix.D, "0", [1234, 5678]);
}// WHY McpX
シンプルで、安全な PLC 通信
簡単・安全・シンプル。直感的で型安全な API により、PLC 通信を最小限のコードで実装できます。
直感的で型安全な API
型と点数を指定するだけの直感的な API。ジェネリックで型安全なので、bool は bool、short は short のまま扱え、誤った型やアドレスも検知。シンプルなコードで安全に通信できます。
テストとアーキテクチャで守る安全性
MCプロトコルの要求/応答パケットをバイト単位で検証する MSTest 群(カバレッジ約79%)。インターフェース駆動のレイヤード設計と型付き例外が、不正な入力を早期に検知します。
無償・OSS で、環境を選ばない
MIT ライセンスの OSS で、ライセンス費用は不要。もちろん商用利用可。.NET ネイティブなので Windows に縛られず、Linux・macOS・Raspberry Pi でもそのまま動作します。
MX Component との違い
| 項目 | McpX | MX Component |
|---|---|---|
| ライセンス費用 | 無償(MIT・OSS) | 有償 |
| 対応 OS | Linux / Windows / macOS | Windows のみ |
| 実装方式 | .NET ネイティブ | Windows コンポーネント依存 |
| 導入 | NuGet で追加 | インストーラ / ライセンス手続き |
| ソースコード | 公開(GitHub) | 非公開 |
※ 公開情報に基づく一般的な比較です。
// CAPABILITIES
PLC 通信に必要な機能を、過不足なく
機能は要点に絞りつつ、API は直感的に。監視・制御・ロギングなどさまざまなシステムに柔軟に溶け込み、お客様のアプリの一部として自然に組み込めます。
単一 & 一括読み書きを、型安全に
単一の値も、連続アドレスの数千点も、1 回の呼び出しで読み書き。読み書きするデータ型はジェネリックで指定するので、bool・short・int などをそのままの型で扱えます。
short d0 = mcpx.Read<short>(Prefix.D, "0");
mcpx.Write<short>(Prefix.D, "0", 42);
bool[] m = mcpx.BatchRead<bool>(Prefix.M, "0", 7000);
mcpx.BatchWrite<int>(Prefix.D, "0", [1234, 5678]);同期・非同期、すべての操作に対応
すべての読み書き・監視コマンドに async/await 対応の Async 版を用意。通信待ちの間も UI や Web サーバーの応答性を保ち、複数の PLC や長時間ポーリングも並列に処理できます。
short[] d = await mcpx.BatchReadAsync<short>(Prefix.D, "0", 1000);
await mcpx.WriteAsync<short>(Prefix.D, "0", 42);
// Drive multiple PLCs in parallel — no thread blocked
await Task.WhenAll(
plcA.ReadAsync<short>(Prefix.D, "0"),
plcB.ReadAsync<short>(Prefix.D, "0"));非連続アドレスを、1 往復で
散在するワード/ダブルワードアドレスを 1 回のランダム読み書きにまとめて処理。無駄なフレームも手動バッチングも不要です。
var words = new[] { (Prefix.D, "100"), (Prefix.D, "205") };
var dwords = new[] { (Prefix.D, "300") };
var (w, dw) = mcpx.RandomRead<short, int>(words, dwords);一度登録すれば、最新値をポーリング
対象デバイスを登録しておき、必要なタイミングで現在値を取得。ダッシュボードや監視ループに最適です。
var words = new[] { (Prefix.D, "0"), (Prefix.M, "100") };
var dwords = new[] { (Prefix.D, "10") };
mcpx.MonitorRegist(words, dwords);
var v = mcpx.Monitor<short, int>(words, dwords);
short m100 = v.wordValues[1];NO LIMITS
点数の上限も、ワード数計算も自動
MCプロトコルの一括読み書きには点数の上限がありますが、上限を超えても McpX が自動でパケットを分割して送信します。 また、型に応じた必要ワード数も内部で計算するため、プロトコルの制限を意識する必要はありません。
SECURITY
リモートパスワードを自動処理
コンストラクタにパスワードを渡すだけ。McpX がセッションの前後でリモートパスワードの解除・ロックを自動的に行います。
// USE CASES
事例
実際の採用事例と、代表的なユースケースを紹介します。
採用事例
realvirtualrealvirtual GmbH の産業用シミュレーション/デジタルツイン基盤「realvirtual Professional」の Mitsubishi PLC 通信インターフェースに採用されています。
ユースケース
リアルタイム監視ダッシュボード
監視対象デバイスを登録し、現在値を周期取得。Web ダッシュボードに稼働状況やアラームをリアルタイム表示します。
SCADA ソフトの通信基盤
SCADA アプリと PLC 間の通信レイヤーを McpX で実装。型安全な読み書きで、タグ収集や制御指令の土台を安定して構築できます。
PLC ↔ サーバーの MQTT 連携
PLC から読み出したデバイス値を MQTT でサーバーへ publish する通信ゲートウェイを構築。現場データをブローカー経由でクラウドへ軽量に配信します。
PLC ソフトの自動テスト・CI
PLC プログラムの入出力をコードから検証。デバイス値の書き込み→期待値の読み出しを自動化し、CI パイプラインに組み込めます。
// PLATFORMS
幅広いプラットフォーム & プロトコル対応
最新の .NET から .NET Framework まで主要な OS で動作。9 種のデータ型と 28 種のデバイスにジェネリックで対応します。
フレームワーク
オペレーティングシステム
対応PLC
プロトコル & フレーム
データ型
デバイス種別
// QUICK START
2 ステップで動かせます
1 · パッケージを追加
dotnet add package McpX2 · デバイスメモリを読み書き
using McpX;
// Remote password auto lock/unlock via the constructor
using (var mcpx = new McpX("192.168.12.88", 10000))
{
short d0 = mcpx.Read<short>(Prefix.D, "0");
mcpx.Write<short>(Prefix.D, "0", 42);
bool[] mArr = mcpx.BatchRead<bool>(Prefix.M, "0", 7000);
int[] dArr = await mcpx.BatchReadAsync<int>(Prefix.D, "1000", 500);
}// AI SKILLS
公開中AIで開発をブースト
McpX 向けの AI スキルを公開しました。Claude などの生成AIに McpX の正確な API を教え込むことで、PLC 通信の実装からレビューまでを加速します。
スキルを見るプロンプトから実装
「McpX で PLC と通信するコードを書いて」、「三菱PLCからDレジスタを読みたい」といった自然な指示から、接続設定や using 文、型指定まで含めた実装を生成します。
正確な API を AI が把握
接続設定・デバイス指定(Prefix +アドレス)・読み書き・例外処理まで、McpX の正しい仕様をスキルが提供。AI が思い込みでなく正確なコードを書きます。
// PROJECT HEALTH
安心して採用できる理由
オープンに開発・保守され、本番投入に必要な足回りが整っています。
活発にメンテナンス
継続的にアップデートし、変更は CHANGELOG で公開。不具合や要望には GitHub で対応します。
CI で自動検証
すべての変更をビルド & テスト。バイトレベルのテストで通信電文を検証します。
幅広い実行環境 & AOT
.NET Framework 対応から最新 .NET 9、Native AOT まで幅広くターゲット。
2024 年から着実にリリースを重ね、機能追加はマイナー・修正はパッチで管理しています。
// ROADMAP
今後の予定
現場での使いやすさを高める機能を継続的に追加していきます。
- 実装中
GX Simulator3 対応
シミュレータと連携し、PLC 実機がなくても動作確認が可能に。
- 計画中
インターフェースの改善
ランダムアクセスと連続アドレスを統合したインターフェースを追加。アクセスに応じてメソッドを切り替える必要がなくなります。
- 計画中
ラベル対応
iQ-R / iQ-F シリーズのグローバルラベルへのアクセスに対応。
- 計画中
テストカバレッジの向上
継続的にテストを拡充し、カバレッジをさらに引き上げます。
