MITSUBISHI PLC — MELSEC

三菱電機PLCとの通信を、数行で実装。

McpX は、MCプロトコルで三菱電機PLC(MELSEC)と通信する .NET ライブラリです。TCP/UDP でデバイスメモリを読み書きでき、直感的で型安全な API により、プロトコルの定型処理は不要です。

NUGET
16k+
LICENSE
MIT
PLATFORM
Win · Linux · macOS
PLC
Q · iQ-R · iQ-F
FIG. 01 — READ / WRITE Program.cs
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]);
}
採用製品 realvirtualEnvisionSCADA

// 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 との違い

項目McpXMX Component
ライセンス費用無償(MIT・OSS)有償
対応 OSLinux / Windows / macOSWindows のみ
実装方式.NET ネイティブWindows コンポーネント依存
導入NuGet で追加インストーラ / ライセンス手続き
ソースコード公開(GitHub)非公開

※ 公開情報に基づく一般的な比較です。

// CAPABILITIES

PLC 通信に必要な機能を、過不足なく

機能は要点に絞りつつ、API は直感的に。監視・制御・ロギングなどさまざまなシステムに柔軟に溶け込み、お客様のアプリの一部として自然に組み込めます。

01 READ / WRITE

単一 & 一括読み書きを、型安全に

単一の値も、連続アドレスの数千点も、1 回の呼び出しで読み書き。読み書きするデータ型はジェネリックで指定するので、bool・short・int などをそのままの型で扱えます。

Example.cs
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]);
02 SYNC & ASYNC

同期・非同期、すべての操作に対応

すべての読み書き・監視コマンドに async/await 対応の Async 版を用意。通信待ちの間も UI や Web サーバーの応答性を保ち、複数の PLC や長時間ポーリングも並列に処理できます。

Example.cs
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"));
03 RANDOM ACCESS

非連続アドレスを、1 往復で

散在するワード/ダブルワードアドレスを 1 回のランダム読み書きにまとめて処理。無駄なフレームも手動バッチングも不要です。

Example.cs
var words  = new[] { (Prefix.D, "100"), (Prefix.D, "205") };
var dwords = new[] { (Prefix.D, "300") };

var (w, dw) = mcpx.RandomRead<short, int>(words, dwords);
04 MONITORING

一度登録すれば、最新値をポーリング

対象デバイスを登録しておき、必要なタイミングで現在値を取得。ダッシュボードや監視ループに最適です。

Example.cs
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

事例

実際の採用事例と、代表的なユースケースを紹介します。

採用事例

realvirtual

realvirtual GmbH の産業用シミュレーション/デジタルツイン基盤「realvirtual Professional」の Mitsubishi PLC 通信インターフェースに採用されています。

EnvisionSCADA

Omnicon Automation の産業用 SCADA プラットフォーム「EnvisionSCADA」で利用されています。

ユースケース

設備稼働監視

リアルタイム監視ダッシュボード

監視対象デバイスを登録し、現在値を周期取得。Web ダッシュボードに稼働状況やアラームをリアルタイム表示します。

ASP.NET監視非同期
SCADA 連携

SCADA ソフトの通信基盤

SCADA アプリと PLC 間の通信レイヤーを McpX で実装。型安全な読み書きで、タグ収集や制御指令の土台を安定して構築できます。

通信基盤SCADA型安全
通信ゲートウェイ

PLC ↔ サーバーの MQTT 連携

PLC から読み出したデバイス値を MQTT でサーバーへ publish する通信ゲートウェイを構築。現場データをブローカー経由でクラウドへ軽量に配信します。

MQTTゲートウェイIoT
テスト自動化 / CI

PLC ソフトの自動テスト・CI

PLC プログラムの入出力をコードから検証。デバイス値の書き込み→期待値の読み出しを自動化し、CI パイプラインに組み込めます。

CI自動テストクロスプラットフォーム

// PLATFORMS

幅広いプラットフォーム & プロトコル対応

最新の .NET から .NET Framework まで主要な OS で動作。9 種のデータ型と 28 種のデバイスにジェネリックで対応します。

フレームワーク

.NET 7.0+.NET 8.0+.NET 9.0+.NET Core 2.0+.NET Framework 4.6.1+

オペレーティングシステム

LinuxWindowsmacOS

対応PLC

MELSEC-QMELSEC iQ-RMELSEC iQ-F

プロトコル & フレーム

TCPUDP3E Frame4E FrameBinaryASCII

データ型

boolshortushortintuintlongulongfloatdouble

デバイス種別

XYMLFVBDWTSTCTNSSSCSNCSCCCNSBSWSDXDYSMSDZRZR

// QUICK START

2 ステップで動かせます

1 · パッケージを追加

terminal
dotnet add package McpX

2 · デバイスメモリを読み書き

Program.cs
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 が思い込みでなく正確なコードを書きます。

関連エコシステム MCP サーバー Python (mcpxpy)

// PROJECT HEALTH

安心して採用できる理由

オープンに開発・保守され、本番投入に必要な足回りが整っています。

活発にメンテナンス

継続的にアップデートし、変更は CHANGELOG で公開。不具合や要望には GitHub で対応します。

CI で自動検証

すべての変更をビルド & テスト。バイトレベルのテストで通信電文を検証します。

幅広い実行環境 & AOT

.NET Framework 対応から最新 .NET 9、Native AOT まで幅広くターゲット。

2024 年から着実にリリースを重ね、機能追加はマイナー・修正はパッチで管理しています。

// ROADMAP

今後の予定

現場での使いやすさを高める機能を継続的に追加していきます。

  • 実装中

    GX Simulator3 対応

    シミュレータと連携し、PLC 実機がなくても動作確認が可能に。

  • 計画中

    インターフェースの改善

    ランダムアクセスと連続アドレスを統合したインターフェースを追加。アクセスに応じてメソッドを切り替える必要がなくなります。

  • 計画中

    ラベル対応

    iQ-R / iQ-F シリーズのグローバルラベルへのアクセスに対応。

  • 計画中

    テストカバレッジの向上

    継続的にテストを拡充し、カバレッジをさらに引き上げます。

// GET STARTED

さっそく始めよう

パッケージを追加して IP を指定するだけ。 数行のコードで、最初の読み書きがすぐ動きます。 無償・商用利用可の MIT ライセンス。

$ dotnet add package McpX