返回主站|会员中心|保存桌面

倍福模块专营    

倍福模块

联系方式
  • 联系人:姚经理
  • 电话:18520143666
新闻分类
  • 暂无分类
首页 > 新闻中心 > C#通过MX Component控制PLC!
新闻中心
C#通过MX Component控制PLC!
发布时间:2025-10-17        浏览次数:0        返回列表

C# 通过 MX Component(三菱官方的 PLC 通信组件)控制三菱 PLC(如 FX、Q 系列),需通过 MX Component 提供的 API(如 ActiveX 控件或.NET 库)实现通信,核心步骤包括环境配置、连接 PLC、读写数据(软元件)等。以下是详细实现方法,以FX3U PLC为例,使用 C# WinForm 程序演示:

一、前期准备

1. 安装软件

  • MX Component:三菱三菱官网下载并安装(需匹配 PLC 型号,如 V4.0 及以上版本),安装时勾选 “API 组件”(确保生成ActUtlTypeLib.dll等组件)。

  • 编程环境:Visual Studio(2019/2022),需在项目中引用 MX Component 的 ActiveX 控件。

2. 配置 MX Component 通信参数

打开 MX Component 的 “连接配置工具”(ActHost),创建一个新连接:

  • 连接名称:自定义(如 “PLC_Connection”);

  • PLC 类型:选择对应型号(如 “FX3U”);

  • 通信方式:常用 “以太网”(需 PLC 和电脑在同一网段,如 PLC IP:192.168.3.3,电脑 IP:192.168.3.100);

  • 端口号:默认 5006(三菱 PLC 以太网通信端口);

  • 测试连接:点击 “测试”,确认通信正常(显示 “连接成功”)。

二、C# 项目配置(引用 MX Component 组件)

  1. 新建 C# WinForm 项目(.NET framework 4.5+);

  2. 右键 “引用”→“添加引用”→“COM”→找到 “ActUtlType Library”(MX Component 的 ActiveX 控件),勾选并确定;

  3. 此时项目中会生成ActUtlTypeLib命名空间,包含ActUtlType类(核心通信类)。

三、核心代码实现(读写 PLC 软元件)

以下示例实现 “连接 PLC→读取 D 寄存器→写入 Y 输出→断开连接” 的完整流程。

1. 初始化连接对象

csharp

using System;using System.Windows.Forms;using ActUtlTypeLib; // 引用MX Component组件namespace PLCControlDemo{
    public partial class MainForm : Form
    {
        // 声明PLC通信对象
        private ActUtlType plc = new ActUtlType();
        private int connectResult; // 连接结果(0=成功,非0=失败)

        public MainForm()
        {
            InitializeComponent();
        }
    }}

2. 连接 PLC(按钮事件)

csharp

private void btnConnect_Click(object sender, EventArgs e){
    // 连接配置:使用MX Component中创建的连接名称
    string connectName = "PLC_Connection"; // 需与ActHost中配置的名称一致

    // 连接PLC(0=成功)
    connectResult = plc.Open(connectName);

    if (connectResult == 0)
    {
        MessageBox.Show("PLC连接成功!");
        btnRead.Enabled = true;
        btnWrite.Enabled = true;
        btnDisconnect.Enabled = true;
    }
    else
    {
        MessageBox.Show($"连接失败,错误码:{connectResult}\n请检查通信配置!");
    }}

3. 读取 PLC 软元件(如 D0 寄存器的值)

csharp

private void btnRead_Click(object sender, EventArgs e){
    if (connectResult != 0)
    {
        MessageBox.Show("请先连接PLC!");
        return;
    }

    // 读取D0的值(参数:软元件类型,起始地址,长度,输出缓冲区)
    // 软元件类型:"D"=数据寄存器,"X"=输入,"Y"=输出,"M"=辅助继电器
    short[] readData = new short[1]; // 存储读取结果(长度1,读取1个D寄存器)
    int readResult = plc.ReadDeviceBlock("D", 0, 1, readData);

    if (readResult == 0)
    {
        txtReadValue.Text = readData[0].ToString(); // 显示D0的值
        MessageBox.Show($"读取D0成功:{readData[0]}");
    }
    else
    {
        MessageBox.Show($"读取失败,错误码:{readResult}");
    }}

4. 写入 PLC 软元件(如控制 Y0 输出点)

csharp

private void btnWrite_Click(object sender, EventArgs e){
    if (connectResult != 0)
    {
        MessageBox.Show("请先连接PLC!");
        return;
    }

    // 写入Y0(1=导通,0=断开)
    // 参数:软元件类型,起始地址,写入值
    int writeResult = plc.WriteDevice("Y", 0, 1); // 写入Y0=1

    if (writeResult == 0)
    {
        MessageBox.Show("Y0写入成功(导通)");
        // 延时后断开Y0(示例)
        System.Threading.Thread.Sleep(1000);
        plc.WriteDevice("Y", 0, 0);
        MessageBox.Show("Y0已断开");
    }
    else
    {
        MessageBox.Show($"写入失败,错误码:{writeResult}");
    }}

5. 断开 PLC 连接

csharp

private void btnDisconnect_Click(object sender, EventArgs e){
    if (connectResult == 0)
    {
        plc.Close(); // 断开连接
        connectResult = -1;
        MessageBox.Show("已断开PLC连接");
        btnRead.Enabled = false;
        btnWrite.Enabled = false;
    }}

6. 窗体关闭时断开连接

csharp

private void MainForm_FormClosing(object sender, FormClosingEventArgs e){
    if (connectResult == 0)
    {
        plc.Close();
    }}

四、关键 API 说明

MX Component 的ActUtlType类提供核心通信方法,常用如下:

方法功能说明参数示例
Open(string name)连接 PLC(使用 ActHost 配置的连接名)Open("PLC_Connection")
Close()断开连接-
ReadDeviceBlock(string type, int start, int length, short[] buffer)批量读取软元件读取 D0-D2:ReadDeviceBlock("D", 0, 3, buffer)
WriteDevice(string type, int address, int value)写入单个软元件写入 M10=1:WriteDevice("M", 10, 1)
WriteDeviceBlock(string type, int start, int length, short[] data)批量写入软元件写入 D0-D1:WriteDeviceBlock("D", 0, 2, new short[]{10, 20})

五、常见问题与解决

  1. 连接失败(错误码非 0)

    • 检查 ActHost 中连接名称是否与代码一致;

    • 确认 PLC IP 与电脑在同一网段,关闭防火墙或添加端口 5006 例外;

    • 用 MX Component 自带的 “测试工具” 验证通信是否正常。

  2. 读取 / 写入无响应

    • 软元件类型是否正确(如 “D”“Y” 区分大小写);

    • PLC 是否处于 “RUN” 模式(停止模式下无法读写);

    • 检查 PLC 程序是否占用目标软元件(如 Y0 被程序强制输出)。

  3. 错误码查询

    • 打开 MX Component 安装目录下的 “错误码手册”(如Error Code.pdf),根据错误码(如 1001 = 连接超时)排查原因。

六、扩展功能

  • 实时监控:使用定时器(Timer)定时调用ReadDeviceBlock,实现软元件实时显示;

  • 异常处理:添加try-catch捕获通信异常,避免程序崩溃;

  • 多类型软元件:支持读写 X(输入)、M(辅助继电器)、T(定时器)、C(计数器)等,方法类似。

通过以上步骤,C# 程序可通过 MX Component 实现与三菱 PLC 的稳定通信,适用于工业自动化中上位机对 PLC 的远程监控与控制场景。

收缩
  • QQ咨询

  • 电话咨询

  • 18520143666
  • 添加微信客服