下一代三菱 PLC 通信库:mc-protocol-next 深度解析与实战指南
McProtocol-Next 是一个专为三菱PLC通信设计的高性能、完全异步的库,旨在满足现代工业自动化应用对性能和功能的需求。它基于原始 McProtocol 库进行了重构,提供了两倍的性能提升、降低的延迟以及一系列现代化功能。McProtocol-Next 支持异步通信、结构化数据处理,并通过依赖注入和服务配置简化了集成到 .NET 系统的过程。开发者可以通过 WPF 演示应用快速上手,并利
McProtocol-Next 介绍
前言
在工业自动化领域,三菱PLC(可编程逻辑控制器)是许多应用的核心,提供可靠的控制功能。程序化地与这些PLC通信对于监控、控制和与其他系统的集成至关重要。然而,现有的 MC 协议库可能无法满足现代应用对性能和现代化功能的需求。 McProtocol-Next
应运而生,这是一个高性能、完全异步的库,专为三菱PLC通信设计
McProtocol-Next
基于原始McProtocol
库进行了重构,提供了两倍的性能提升、降低的延迟以及一系列现代化功能,使其成为工业自动化开发者的必备工具。本文将深入分析McProtocol-Next
的功能、代码示例及其优势,旨在吸引开发者探索这个强大的库
为什么需要 McProtocol-Next
在工业环境中,实时数据处理至关重要。通信延迟可能导致效率低下甚至安全问题。传统 PLC 通信库通常依赖同步操作或手动解析原始数据,这可能导致性能瓶颈和复杂代码。 McProtocol-Next
通过以下方式解决了这些问题
- 异步通信:非阻塞操作确保应用程序在处理大量通信任务时保持响应
- 结构化数据:允许开发者定义与 PLC 数据格式直接映射的 C# 结构体,消除手动解析字节数组或字符串的需要
- 高性能:据称提供两倍的性能提升(尽管具体基准测试数据未提供),通过优化的协议栈实现更快的通信
此外,McProtocol-Next
的现代化架构(依赖注入和服务配置)使其易于集成到 .NET 系统中,提高了代码的可维护性和可测试性
开始使用 McProtocol-Next
- 项目地址:mc-protocol-next
- 开发语言:C#
- 目标平台:Windows 7 SP1 及以上
- 依赖框架:.NET 8.0、WPF
- 项目设置:
- 克隆 GitHub 仓库:McProtocol-Next
- 在 Visual Studio 2022 中打开解决方案文件(.sln)
- 确保安装了 .NET 8.0 SDK
- 编译并运行
McProtocolNextDemo
项目以探索 WPF 演示应用
仓库的 README.md 提供了详细的设置说明,包括如何注册服务和配置通信。库通过IMcCommunicationConfig
接口提供灵活的配置选项,允许开发者根据需要自定义通信设置
功能
功能 | 描述 |
---|---|
🚀 两倍性能提升 | 通过优化的协议栈和降低的延迟,实现显著的性能提升,适合实时应用 |
🔄 100% 异步支持 | 基于 asyncio 的完全异步操作,确保非阻塞通信,提高应用响应性 |
🧱 结构化数据支持 | 支持直接读写 C# 结构体,简化数据处理,减少错误 |
🧩 现代化架构 | 使用依赖注入和服务配置,便于集成到各种 .NET 应用中 |
WPF 演示应用 | 提供 Windows GUI 演示应用,便于开发者快速上手和测试 |
🖥️ 完全开源 | 完全开源, MIT 许可证,开发者可以自由使用、修改和分发 |
结构化数据处理
结构体定义
定义一个结构体,并使用属性指定数据编码方式。例如:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct MixedDataStruct {
public bool IsActive; // 1 位 -> D3233.0
public bool IsAlarm; // 1 位 -> D3233.1
public bool IsOperational; // 1 位 -> D3233.2
public bool IsError; // 1 位 -> D3233.3
public short Id; // 2 字节 -> D3234, D3235
public float Temperature; // 4 字节 -> D3236 ~ D3239
public double Pressure; // 8 字节 -> D3240 ~ D3247
public int Volume; // 4 字节 -> D3248 ~ D3251
[MitsubishiString(20)]
public string DeviceName; // 20 字节 -> D3252 ~ D3271
[MitsubishiString(50)]
public string ManufacturerName; // 50 字节 -> D3272 ~ D3321
}
写入结构体
要将结构体写入 PLC,可以使用WriteStructAsync
方法:
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"
};
// 从 D3233 开始写入
await _mcProtocol.WriteStructAsync(writeData, address).ConfigureAwait(false);
读取结构体
private readonly IMcProtocol _mcProtocol;
var address = 3233;
// 从 D3233 开始读取
var readResult = await _mcProtocol.ReadStructAsync(typeof(MixedDataStruct), address).ConfigureAwait(false);
// 或使用泛型
// var readResult = await _mcProtocol.ReadStructAsync<MixedDataStruct>(address).ConfigureAwait(false);
结语
无论你是希望提高现有PLC
通信效率,还是开始一个新项目,McProtocol-Next
都值得一试
更多推荐
所有评论(0)