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接口提供灵活的配置选项,允许开发者根据需要自定义通信设置

WPF

功能

功能 描述
🚀 两倍性能提升 通过优化的协议栈和降低的延迟,实现显著的性能提升,适合实时应用
🔄 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都值得一试

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐