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

库卡机器人及配件服务商    

库卡机器人、库卡机器人备品配件

联系方式
  • 联系人:吴经理
  • 电话:18576370666
新闻分类
  • 暂无分类
首页 > 新闻中心 > C#怎么通过三菱的MX Component写入小数!
新闻中心
C#怎么通过三菱的MX Component写入小数!
发布时间:2025-07-23        浏览次数:3        返回列表

在C#中通过三菱的MX Component(如MX Component 4.0)写入小数(浮点数)到PLC,需注意以下关键步骤:


1. 准备工作

  • 安装MX Component:确保已安装MX Component(如ActUtlTypeActFxDriver控件)。

  • 添加引用:在C#项目中引用ActUtlType.dll(通常位于C:\Program Files (x86)\MELSFX\MX Component)。

  • PLC配置:确认PLC支持浮点数存储(如D寄存器存储32位浮点数)。


2. 关键步骤

(1) 初始化MX Component

csharp

using ActUtlTypeLib; // 引用MX Component库

ActUtlType plc = new ActUtlType();
plc.ActLogicalStationNumber = 1; // 设置逻辑站号(与PLC配置一致)
int result = plc.Open(); // 连接PLC
if (result != 0)
{
Console.WriteLine("连接失败,错误代码: " + result);
return;
}

(2) 写入浮点数

三菱PLC的浮点数(如REAL类型)通常占用2个连续的16位寄存器(共32位),需按大端序(Big-Endian)小端序(Little-Endian)格式写入。MX Component默认按字节数组处理数据。

方法1:直接写入字节数组

csharp

float value = 123.456f; // 待写入的浮点数
byte[] bytes = BitConverter.GetBytes(value); // 转换为字节数组

// 三菱PLC通常使用大端序,需调整字节顺序(如果系统是小端序)
if (BitConverter.IsLittleEndian)
{
Array.Reverse(bytes); // 反转字节顺序
}

// 将字节数组写入PLC的连续寄存器(例如D100和D101)
int startRegister = 100; // 起始寄存器地址
int[] registerValues = new int[2]; // 2个寄存器

// 将字节数组拆分为两个16位整数(每个寄存器16位)
registerValues[0] = (bytes[0] << 8) | bytes[1]; // 高字节在前(大端序)
registerValues[1] = (bytes[2] << 8) | bytes[3];

// 写入寄存器
result = plc.WriteDeviceBlock("D" + startRegister, 2, ref registerValues[0]);
if (result != 0)
{
Console.WriteLine("写入失败,错误代码: " + result);
}
方法2:使用SetDevice逐个写入

csharp

// 将浮点数拆分为两个16位整数(大端序)
int highWord = (int)((bytes[0] << 8) | bytes[1]);
int lowWord = (int)((bytes[2] << 8) | bytes[3]);

// 分别写入D100和D101
plc.SetDevice("D100", highWord);
plc.SetDevice("D101", lowWord);

3. 注意事项

  1. 字节序(Endianness)

    • 三菱PLC默认使用大端序(高位在前),而x86/x64系统为小端序,需通过Array.Reverse或手动调整字节顺序。

    • 测试时建议先用PLC监控工具(如GX Works2)验证写入的值是否正确。

  2. 寄存器地址

    • 确保目标寄存器是连续的(如D100D101),且未被其他程序占用。

  3. 错误处理

    • 检查Open()WriteDeviceBlock的返回值,非零表示错误(参考MX Component手册的错误代码)。

  4. 浮点数精度

    • PLC中的浮点数可能存在精度损失(如123.456可能存储为123.456001),需在HMI或程序中处理显示格式。


4. 完整示例代码

csharp

using System;
using ActUtlTypeLib;

class Program
{
static void Main()
{
ActUtlType plc = new ActUtlType();
plc.ActLogicalStationNumber = 1;

try
{
// 连接PLC
if (plc.Open() != 0) throw new Exception("PLC连接失败");

// 写入浮点数
float value = 123.456f;
byte[] bytes = BitConverter.GetBytes(value);

if (BitConverter.IsLittleEndian)
Array.Reverse(bytes); // 转换为大端序

int[] registers = new int[2];
registers[0] = (bytes[0] << 8) | bytes[1];
registers[1] = (bytes[2] << 8) | bytes[3];

// 写入D100和D101
if (plc.WriteDeviceBlock("D100", 2, ref registers[0]) != 0)
throw new Exception("写入寄存器失败");

Console.WriteLine("浮点数写入成功!");
}
catch (Exception ex)
{
Console.WriteLine("错误: " + ex.Message);
}
finally
{
plc.Close(); // 断开连接
}
}
}

5. 替代方案

如果MX Component操作复杂,可考虑:

  • 使用OPC UA:通过OPC服务器(如MX OPC UA)与PLC通信。

  • 三菱EZSocket:通过以太网协议(如MC协议)直接通信(需自行实现协议)。


通过以上方法,可以准确地将C#中的浮点数写入三菱PLC的寄存器。务必在测试阶段验证字节序和寄存器地址的正确性!

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服