WPF + 高性能异步 MC 协议库,直连三菱 PLC(MC1E/3E/4E)
目录
前言
项目简介
开发环境
项目使用
1、项目配置
2、服务注册(依赖注入)
3、配置通信参数
核心功能:结构化数据读写(推荐方式)
定义结构体
写入结构体
读取结构体
WPF 示例应
项目效果
系统主页
系统连接
项目源码
总结
前言
工业自动化领域,稳定、高效地与 PLC(可编程逻辑控制器)通信是开发智能控制系统的核心环节。传统三菱 MC 协议实现往往受限于同步阻塞模型、低效的内存管理以及缺乏现代化软件架构支持,难以满足高并发、低延迟的现代工业场景需求。
本文推荐一个基于全新设计思想重构的高性能、纯异步、现代化 C# 三菱 MC 协议通信库。它不仅大幅提升了通信效率,还深度集成 .NET 的依赖注入、结构化数据序列化等先进特性,并配套提供了一个开箱即用的WPF 图形界面程序,帮助大家快速上手、直观调试、高效集成。
项目简介
项目是对经典 MC 协议通信库的现代化重写,专为 .NET 8 及以上平台打造,面向工业 4.0 与 IIoT(工业物联网)应用场景。
相比传统实现,它具备以下显著优势:
2 倍性能提升:优化底层协议栈,显著降低通信延迟
100% 异步支持:基于async/await模型,避免线程阻塞,提升系统吞吐量
结构化数据支持:直接读写 C# 结构体(struct),无需手动解析字节流
现代化架构:全面支持依赖注入(DI)、配置即服务(Configuration as a Service)
WPF GUI 示例:提供完整图形界面 Demo,开箱即用,加速开发验证
开发环境
项目 | 要求 |
|---|---|
IDE | Visual Studio 2022 |
语言 | C# |
UI 框架 | WPF (Windows Presentation Foundation) |
操作系统 | Windows 7 SP1 或更高版本 |
.NET SDK | .NET 8.0 |
项目使用
1、项目配置
克隆仓库后,打开.sln解决方案文件,确保已安装.NET 8.0 SDK。WPF 示例项目McProtocolNextDemo已预配置所有依赖,直接编译运行即可。
2、服务注册(依赖注入)
mc-protocol-next 采用 .NET 标准依赖注入容器管理生命周期:
using McProtocolNext; using Microsoft.Extensions.DependencyInjection; namespaceMcProtocolNext; publicstaticclassServiceCollectionExtensions { /// <summary> /// 注册三菱 MC 协议通信服务 /// </summary> public static IServiceCollection AddMcProtocolService(this IServiceCollection services) { return services.AddSingleton<IMcProtocol, McProtocol>(); } }在应用程序启动时注册服务:
var services = new ServiceCollection(); services.AddMcProtocolService(); var serviceProvider = services.BuildServiceProvider();3、配置通信参数
实现IMcCommunicationConfig接口以提供 PLC 连接信息:
public class McProtocolConfig : IMcCommunicationConfig { // 实现 IP、端口、超时等属性 }注入配置:
_ = services.AddSingleton<IMcCommunicationConfig>(_ => AppConfig.McProtocols);核心功能:结构化数据读写(推荐方式)
定义结构体
通过[StructLayout]和自定义特性[MitsubishiString]映射 PLC 寄存器布局:
[StructLayout(LayoutKind.Sequential, Pack = 1)] internalstruct MixedDataStruct { publicbool IsActive; // D3233.0 publicbool IsAlarm; // D3233.1 publicbool IsOperational; // D3233.2 publicbool IsError; // D3233.3 publicshort Id; // D3234–D3235 publicfloat Temperature; // D3236–D3239 publicdouble Pressure; // D3240–D3247 publicint Volume; // D3248–D3251 [MitsubishiString(20)] publicstring DeviceName; // D3252–D3271 [MitsubishiString(50)] publicstring ManufacturerName; // D3272–D3321 }
[MitsubishiString(N)]确保字符串以固定长度(N 字节)编码,兼容 PLC 存储格式。
写入结构体
private readonly IMcProtocol _mcProtocol; var address = 3233; MixedDataStruct writeData = new() { IsActive = true, IsAlarm = false, IsOperational = true, IsError = false, Id = 12345, Temperature = 25.5f, Pressure = 101.325, Volume = 500, DeviceName = "DeviceName-003", ManufacturerName = "ManufacturerName-XYZ" }; await _mcProtocol.WriteStructAsync(writeData, address).ConfigureAwait(false);读取结构体
var address = 3233; // 方式一:通过 Type var readResult = await _mcProtocol.ReadStructAsync(typeof(MixedDataStruct), address).ConfigureAwait(false); // 方式二:泛型(推荐) var readResult = await _mcProtocol.ReadStructAsync<MixedDataStruct>(address).ConfigureAwait(false);返回结果为object或强类型实例,可直接用于业务逻辑或 UI 绑定。
WPF 示例应
配套的WPF 应用不仅展示了如何初始化通信服务、绑定配置、执行读写操作,还提供了:
实时寄存器监控面板
结构体数据可视化编辑器
通信状态与错误日志反馈
配置动态加载与热更新支持
大家无需编写额外代码即可验证通信链路,极大缩短调试周期。
项目效果
系统主页
系统连接
项目源码
GitHub:https://github.com/MAS-Copilot/wpf-mc-protocol-next
总结
项目代表了工业通信库向现代化、高性能、开发者、友好方向演进的重要一步。它通过:
全异步 I/O 模型释放系统资源
结构体映射简化数据交互逻辑
依赖注入与配置解耦提升可测试性与可维护性
WPF 示例提供直观、高效的开发体验
不管是用于 CNC 控制、产线监控、设备物联还是数字孪生系统,都能作为可靠、高效的通信基础。对于 .NET 开发而言,这是拥抱工业自动化领域的不错参考。
引入地址
