三菱電機PLCとの通信を数行で実装。
McpX は、MCプロトコルで三菱電機PLC(MELSEC)と通信する .NET ライブラリです。TCP/UDP でデバイスメモリを読み書きできます。パケットの組み立てや応答の解析はライブラリが引き受けるので、書くのは読み書きしたい型とアドレスだけです。
- NUGET
- 16k+
- LICENSE
- MIT
- PLATFORM
- Win · Linux · macOS
- PLC
- Q · iQ-R · iQ-F
// USE CASES
採用事例
McpX をお使いの方へ:採用事例として掲載させていただけませんか? 掲載を相談する →
// WHY McpX
シンプルで、安全な PLC 通信
型とアドレスを渡すだけで PLC を読み書きでき、その通信電文はバイト単位のテストで検証しています。
直感的で型安全な 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 通信に必要な機能を過不足なく
機能を PLC 通信に絞り、アプリの設計には口を出しません。監視・制御・ロギングなど、手元のアプリに部品としてそのまま組み込めます。
連続もランダムも、ひとつのビルダーで
点数を付ければ一括アクセス、付けなければランダムアクセス。連続する範囲と散在するデバイスを同じビルダーに並べるだけで、McpX がコマンドを使い分けて読み書きします。アクセスの形に合わせてメソッドを選ぶ必要はもうありません。接続先が対応していれば、複数の範囲を複数ブロック一括読み書きで 1 回の交信にまとめることもできます。
short[] block = [];
int total = 0;
bool running = false;
// 点数あり → 一括アクセス、点数なし → ランダムアクセス
mcpx.Read(b => b
.Add<short>(Prefix.D, "400", 100, v => block = v)
.Add<int>(Prefix.D, "2000", v => total = v)
.Add<bool>(Prefix.M, "10", v => running = v));
mcpx.Write(b => b
.Add<short>(Prefix.D, "500", [1, 2, 3])
.Add<bool>(Prefix.M, "20", true));実機がなくても、シミュレータで動作確認
McpXSimulator なら、システムNo.と号機No.を指定するだけで GX Simulator3 に接続できます。読み書きの API は実機と同じなので、PLC が手元になくても開発やテストを進められます。実機に移るときは、接続先を McpX に替えるだけです。
// システム1・号機1(127.0.0.1:5511)に接続
using var sim = new McpXSimulator();
// 読み書きの API は実機用の McpX と同じ
sim.Write(b => b
.Add<short>(Prefix.D, "100", 123)
.Add<bool>(Prefix.M, "0", true));
short d100 = sim.Read<short>(Prefix.D, "100");
// 別のシミュレータにも同時に接続(ポート 5521)
using var sim2 = new McpXSimulator(systemNo: 2);そのほかのコマンド
| コマンド | 説明 | メソッド |
|---|---|---|
| 単一読み書き | 型を指定して、1 つのデバイスをそのまま読み書きします。 | Read<T>/Write<T> |
| 一括読み書き | 連続するデバイスを数千点でも 1 回の呼び出しで読み書きします。点数の上限を超えると自動で分割します。 | BatchRead<T>/BatchWrite<T> |
| ランダム読み書き | 散在するデバイスを型からビット/ワード/ダブルワードに振り分けて、まとめて読み書きします。 | RandomRead(build)/RandomWrite(build) |
| 複数ブロック読み書き NEW | 離れた場所にある連続範囲を複数まとめて、1 回の交信で読み書きします。 | BlockRead(build)/BlockWrite(build) |
| モニタ | デバイスを一度登録すれば、あとは Read() を呼ぶだけで最新値を取得できます。 | MonitorRegist(build)/MonitorSession.Read() |
| リモート操作 NEW | CPU ユニットの RUN/STOP/PAUSE、ラッチクリア、リセットをコードから実行します。 | RemoteRun/RemoteStop/RemotePause/RemoteLatchClear/RemoteReset |
| 文字列読み書き | デバイスの値を Shift_JIS の文字列として読み書きします。 | ReadString/WriteString |
すべてのコマンドに、async/await に対応した ~Async 版があります。
NO LIMITS
点数の上限も、ワード数計算も自動
MCプロトコルの一括読み書きには点数の上限がありますが、上限を超えても McpX が自動でパケットを分割して送信します。 また、型に応じた必要ワード数も内部で計算するため、プロトコルの制限を意識する必要はありません。
SECURITY
リモートパスワードを自動処理
コンストラクタにパスワードを渡すだけ。McpX がセッションの前後でリモートパスワードの解除・ロックを自動的に行います。
// USE CASES
McpXでできること
McpX が活躍する、代表的なユースケースを紹介します。
ユースケース
リアルタイム監視ダッシュボード
監視対象デバイスを登録し、現在値を周期取得。Web ダッシュボードに稼働状況やアラームをリアルタイム表示します。
SCADA ソフトの通信基盤
SCADA アプリと PLC 間の通信レイヤーを McpX で実装。型安全な読み書きで、タグ収集や制御指令の土台を安定して構築できます。
PLC ↔ サーバーの MQTT 連携
PLC から読み出したデバイス値を MQTT でサーバーへ publish する通信ゲートウェイを構築。現場データをブローカー経由でクラウドへ軽量に配信します。
PLC ソフトの自動テスト・CI
PLC プログラムの入出力をコードから検証。デバイス値の書き込み→期待値の読み出しを自動化し、CI パイプラインに組み込めます。GX Simulator3 に接続すれば、実機がなくてもテストを回せます。
// PLATFORMS
幅広いプラットフォーム & プロトコル対応
最新の .NET から .NET Framework まで主要な OS で動作。9 種のデータ型と 28 種のデバイスにジェネリックで対応します。
フレームワーク
オペレーティングシステム
対応PLC
プロトコル & フレーム
データ型
デバイス種別
// QUICK START
2 ステップで動かせます
1 · パッケージを追加
dotnet add package McpX2 · デバイスメモリを読み書き
using McpXLib;
using McpXLib.Enums;
// password を指定すると、生成時にリモートパスワードを解除し、破棄時にロックします
using (var mcpx = new McpX("192.168.12.88", 10000, password: "1234"))
{
short[] block = [];
int total = 0;
// 範囲(点数あり)と単一デバイスを 1 回でまとめて読み込み
mcpx.Read(b => b
.Add<short>(Prefix.D, "400", 100, v => block = v)
.Add<int>(Prefix.D, "2000", v => total = v));
// 配列は一括、単一の値はランダムアクセスでまとめて書き込み
mcpx.Write(b => b
.Add<short>(Prefix.D, "500", [1, 2, 3])
.Add<bool>(Prefix.M, "20", true));
}MCプロトコルの仕組みから知りたい方は MCプロトコル入門 →
// 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
今後の予定
現場での使いやすさを高める機能を継続的に追加していきます。
- 実装済み · v0.10
GX Simulator3 対応
McpXSimulator を追加し、シミュレータに接続して PLC 実機がなくても動作確認ができるようになりました。
- 実装済み · v0.9
インターフェースの改善
ランダムアクセスと連続アドレスを統合した Read / Write を追加。アクセスに応じてメソッドを切り替える必要がなくなりました。
- 計画中
ラベル対応
iQ-R / iQ-F シリーズのグローバルラベルへのアクセスに対応。
- 計画中
テストカバレッジの向上
継続的にテストを拡充し、カバレッジをさらに引き上げます。
// GET STARTED
さっそく始めよう
パッケージを追加して IP を指定するだけ。 数行のコードで、最初の読み書きがすぐ動きます。 無償・商用利用可の MIT ライセンス。

