本页内容使用 ChatGPT 进行中文翻译,仅供参考。

前言

要在PC与三菱电机生产的PLC(MELSEC)之间进行数据通信,需要使用专用的通信协议——MC协议(MELSEC Communication Protocol)

虽然MC协议的官方手册可以在三菱电机官网上获取,但内容多达500多页……
哪怕只是想读取一个值,也必须了解“帧格式”、“命令结构”、“地址表示方法”等知识,对于初学者而言门槛不低。

此外,虽然三菱官方提供了名为 MX Component 的库,但这是收费且仅支持Windows的工具,因此在Linux或树莓派等环境中用于批处理、日志记录、物联网集成时,会受到授权和运行环境的限制。

在这篇文章中,我们将介绍用C#实现PLC通信的最短代码,简单易上手。

使用的库

运行环境

  • Windows 11 Professional

  • Visual Studio 2017 Professional(社区版亦可)

  • .NET Framework 4.6.2

  • GX Works2

  • Q03UDECPU

PLC参数设置

使用 GX Works 设置PLC参数。
请根据您的环境修改IP地址和端口号。
图文说明详见这里

设置内容示例:

  • IP地址:192.168.12.88

  • 端口:10000

  • 协议:TCP

  • 打开方式:MC协议

  • 通信数据编码:二进制

安装库

  1. 启动 Visual Studio

  2. 「文件」→「新建项目」,选择「控制台应用程序」,输入项目名称后点击“确定”

  3. 「工具」→「NuGet 包管理器」,搜索 mcpx

  4. 选择 McpX,指定安装项目后点击“安装”即可

编写代码

在解决方案资源管理器中打开 Program.cs,将以下代码粘贴到 Main 方法中。
请根据您的环境修改 ipport

该代码一次性读取PLC中从D0到D999共1000个字的数据,并在控制台中逐行输出。

using (var mcpx = new McpXLib.McpX(ip: "192.168.12.88", port: 10000))
{
    var dArr = mcpx.BatchRead<short>(McpXLib.Enums.Prefix.D, "0", 1000);
    for (int i = 0; i < 1000; i++)
    {
        Console.WriteLine($"D{i}:{ dArr[i] }");
    }
    Console.ReadLine();
}

最终代码如下

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
           using (var mcpx = new McpXLib.McpX(ip: "192.168.12.88", port: 10000))
           {
               var dArr = mcpx.BatchRead<short>(McpXLib.Enums.Prefix.D, "0", 1000);
                
               for (int i = 0; i < 1000; i++)
               {
                   Console.WriteLine($"D{i}:{ dArr[i] }");
               }
               Console.ReadLine();
           }
        }
    }
}

运行结果

性能测试结果

以下为不同读取点数时的处理时间

点数 处理时间 (ms)
500 2.36
1000 4.16
2000 7.05
3000 10.05
4000 12.89
5000 15.25
6000 18.02
7000 21.02
8000 24.03
9000 27.01
10000 29.91
  • 实际处理时间会根据PC与PLC的通信状况而有所不同

  • 处理时间不会直接计入PLC的扫描周期,但仍建议在开发中考虑对扫描时间的影响

与三菱PLC进行极速通信!对比 McpX 与 MX Component 的性能差异-CSDN博客

总结

本文介绍了使用 C# 通信库 McpX,
实现与三菱PLC之间仅用9行代码完成数据通信的方法。

虽然本次演示基于 Windows 环境,但该库支持 .NET 7 及以上,亦可在 Linux 和 macOS 下使用

此外,McpX 不仅支持读取,还支持写入与位设备的访问
这些内容将在后续文章中进行更详细的介绍,敬请期待!

参考链接

💡 如果你对此项目感兴趣,欢迎访问 GitHub 项目页面
也欢迎为项目点个 ⭐Star 支持一下!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐