C# 通过 MX Component(三菱官方的 PLC 通信组件)控制三菱 PLC(如 FX、Q 系列),需通过 MX Component 提供的 API(如 ActiveX 控件或.NET 库)实现通信,核心步骤包括环境配置、连接 PLC、读写数据(软元件)等。以下是详细实现方法,以FX3U PLC为例,使用 C# WinForm 程序演示:
一、前期准备
1. 安装软件
2. 配置 MX Component 通信参数
打开 MX Component 的 “连接配置工具”(ActHost),创建一个新连接:
二、C# 项目配置(引用 MX Component 组件)
三、核心代码实现(读写 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}) |
五、常见问题与解决
六、扩展功能
通过以上步骤,C# 程序可通过 MX Component 实现与三菱 PLC 的稳定通信,适用于工业自动化中上位机对 PLC 的远程监控与控制场景。

