NEW v0.11 — 新增远程 RUN/STOP 与多块读写 →
MITSUBISHI PLC — MELSEC

三菱电机 PLC通信,几行代码即可实现。

McpX 是一个通过 MC 协议与三菱电机(MELSEC)PLC 通信的 .NET 库。通过 TCP/UDP 读写设备内存,凭借直观且类型安全的 API,无需编写协议样板代码。

NUGET
16k+
LICENSE
MIT
PLATFORM
Win · Linux · macOS
PLC
Q · iQ-R · iQ-F

// USE CASES

采用案例

realvirtual
realvirtual

realvirtual GmbH 的工业仿真与数字孪生平台 realvirtual Professional,其三菱 PLC 通信接口采用了 McpX。

EnvisionSCADA

EnvisionSCADA

Omnicon Automation 的工业 SCADA 平台 EnvisionSCADA 采用了 McpX。

正在使用 McpX?欢迎作为采用案例刊登。 联系刊登事宜 →

// WHY McpX

简单、安全的 PLC 通信

简单、安全、清晰。凭借直观且类型安全的 API,用极少的代码实现 PLC 通信。

直观且类型安全的 API

只需指定类型与点数。泛型且类型安全,bool 仍是 bool、short 仍是 short,错误的类型或地址会被检出,用简洁的代码安全通信。

以测试与架构保驾护航

以字节级验证 MC 协议请求/响应数据包的 MSTest 测试(覆盖率约 79%)。接口驱动的分层设计与类型化异常可尽早发现非法输入。

免费开源,不挑环境

采用 MIT 许可证的开源项目,无许可费用,当然也可商用。基于原生 .NET,不同于仅限 Windows 的 MX Component,可直接运行于 Linux、macOS 与 Raspberry Pi。

与 MX Component 的对比

项目McpXMX Component
许可费用免费(MIT、开源)收费
操作系统Linux / Windows / macOS仅 Windows
实现方式原生 .NET依赖 Windows 组件
安装从 NuGet 添加安装程序 / 授权流程
源代码开源(GitHub)闭源

※ 基于公开信息的一般性对比。

// CAPABILITIES

PLC 通信所需的功能,恰到好处

功能聚焦要点、API 直观。正因为不强加特定设计,McpX 能灵活融入监视、控制、日志等各类系统,自然地成为你应用的一部分。

01 COMBINED READ / WRITE NEW

连续与随机,一个构建器搞定

指定点数即为批量访问,不指定则为随机访问。只需把连续范围与分散设备放进同一个构建器,McpX 会自动选用合适的命令进行读写,无需再根据访问方式挑选方法。若连接对象支持,还可通过多块批量读写把多个范围合并为一次通信。

Example.cs
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));
02 GX SIMULATOR3 NEW

没有实机,也能用仿真器验证

使用 McpXSimulator,只需指定系统No.与号机No.即可连接 GX Simulator3。读写 API 与实机相同,手边没有 PLC 也能推进开发与测试。切换到实机时,只需把连接对象换成 McpX。

Example.cs
// 连接系统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);

其他命令

命令说明方法
单点读写 按指定类型直接读写单个设备。Read<T>/Write<T>
批量读写 连续设备即使数千点也能一次调用读写,超过点数上限时自动拆分。BatchRead<T>/BatchWrite<T>
随机读写 将分散的设备按类型分配为位/字/双字,一次读写。RandomRead(build)/RandomWrite(build)
多块读写 NEW把多个分散的连续范围合并,在一次通信中读写。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 仪表盘上实时显示运行状态与告警。

ASP.NET监视异步
SCADA 集成

SCADA 软件的通信底座

用 McpX 实现 SCADA 应用与 PLC 之间的通信层,凭借类型安全的读写,为标签采集与控制指令打下稳定基础。

通信底座SCADA类型安全
通信网关

PLC ↔ 服务器的 MQTT 联动

构建通信网关,将从 PLC 读取的设备值通过 MQTT 发布到服务器,经由 Broker 将现场数据轻量地送往云端。

MQTT网关IoT
测试自动化 / CI

PLC 软件的自动化测试与 CI

从代码验证 PLC 程序的输入输出,将“写入设备值 → 读取期望值”自动化,并纳入 CI 流水线。连接 GX Simulator3 后,无需实机即可运行测试。

CI自动化测试跨平台

// PLATFORMS

广泛的平台与协议支持

从最新的 .NET 到 .NET Framework,在主流操作系统上均可运行。以泛型支持 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-FGX Simulator3

协议与帧

TCPUDP3E Frame4E FrameBinaryASCII

数据类型

boolshortushortintuintlongulongfloatdouble

设备种类

XYMLFVBDWTSTCTNSSSCSNCSCCCNSBSWSDXDYSMSDZRZR

// QUICK START

两步即可运行

1 · 添加程序包

terminal
dotnet add package McpX

2 · 读写设备内存

Program.cs
using McpXLib;
using McpXLib.Enums;

// 指定 password 后,创建时解锁远程密码,释放时重新锁定
using (var mcpx = new McpX("192.168.12.88", 10000, password: "1234"))
{
    short[] block = [];
    int total = 0;

    // 一次读取范围(指定点数)与单个设备
    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 语句与类型指定的实现。

AI 掌握准确的 API

连接设置、设备指定(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 许可证。

$ dotnet add package McpX