C# 上位机与台达 PLC 通过 Modbus TCP 通信开发实践及 Halcon 视觉检测融合

C#上位机与台达PLC通信,modbus TCP协议。 1.真实使用项目,该程序框架完整,适合在此基础上开发项目。 2.使用VS2019开发。 3.项目还涉及到halcon视觉检测功能。

最近在实际项目中完成了一个颇为有趣且具有实用价值的开发,用 C# 打造上位机与台达 PLC 进行通信,采用的是 Modbus TCP 协议,同时还融入了 Halcon 视觉检测功能。这里就跟大家分享一下整个开发过程,此程序框架完整,非常适合在这个基础上进行相关项目的二次开发。

开发环境:VS2019

选择 VS2019 作为开发工具,是因为它功能强大且对 C# 开发的支持十分友好。安装好 VS2019 后,创建一个新的 C# Windows 应用程序项目,这就是我们整个上位机程序的基础框架。

Modbus TCP 通信实现

引入相关库

在 C# 中实现 Modbus TCP 通信,我们需要引入 Modbus.Device 相关的库。可以通过 NuGet 包管理器来安装,非常方便。在解决方案资源管理器中,右键点击项目,选择"管理 NuGet 包",然后搜索 Modbus.Device 并安装。

连接 PLC

csharp 复制代码
using System;
using System.Net.Sockets;
using Modbus.Device;

namespace PlcCommunication
{
    class PlcConnector
    {
        private TcpClient client;
        private ModbusIpMaster master;

        public void Connect(string ip, int port)
        {
            try
            {
                client = new TcpClient(ip, port);
                master = ModbusIpMaster.CreateIp(client);
                Console.WriteLine("Connected to PLC successfully!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Connection failed: {ex.Message}");
            }
        }

        public void Disconnect()
        {
            if (master!= null)
            {
                master.Dispose();
            }
            if (client!= null)
            {
                client.Close();
            }
            Console.WriteLine("Disconnected from PLC.");
        }
    }
}

在这段代码中,我们定义了一个 PlcConnector 类。Connect 方法接受 PLC 的 IP 地址和端口号作为参数,尝试建立 TCP 连接并创建 ModbusIpMaster 对象。如果连接成功,会在控制台输出成功信息;若失败,则输出错误信息。Disconnect 方法用于释放资源并关闭连接。

读写数据

csharp 复制代码
public void ReadData(int startAddress, int numberOfPoints)
{
    try
    {
        ushort[] data = master.ReadHoldingRegisters(0, startAddress, numberOfPoints);
        foreach (ushort value in data)
        {
            Console.WriteLine($"Read value: {value}");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Read operation failed: {ex.Message}");
    }
}

public void WriteData(int startAddress, ushort[] values)
{
    try
    {
        master.WriteMultipleRegisters(0, startAddress, values);
        Console.WriteLine("Data written successfully.");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Write operation failed: {ex.Message}");
    }
}

ReadData 方法用于从 PLC 的保持寄存器中读取数据,需要指定起始地址和读取的点数。读取成功后,会将每个值输出到控制台。WriteData 方法则是将数据写入到 PLC 的保持寄存器,传入起始地址和要写入的数据数组。成功写入后输出成功信息,失败则输出错误信息。

Halcon 视觉检测功能融合

在项目中集成 Halcon 视觉检测功能,首先要安装 Halcon 开发环境,并在 C# 项目中引用 Halcon 相关的库文件。

Halcon 图像采集与处理示例

csharp 复制代码
using HalconDotNet;

class HalconVision
{
    public void ProcessImage()
    {
        HImage image = new HImage("test.jpg");
        HOperatorSet.GaussianFilter(image, out HImage filteredImage, 3);
        HRegion region;
        HOperatorSet.Threshold(filteredImage, out region, 128, 255);
        // 这里可以继续进行更多复杂的视觉处理操作
        image.Dispose();
        filteredImage.Dispose();
        region.Dispose();
    }
}

在上述代码中,我们先创建了一个 HalconVision 类。ProcessImage 方法加载一张名为 test.jpg 的图像,然后使用高斯滤波对图像进行平滑处理,接着通过阈值分割得到一个区域。当然,在实际项目中,会根据具体的检测需求进行更复杂的图像处理和分析。

整体项目整合

将 Modbus TCP 通信与 Halcon 视觉检测功能整合到上位机程序中。在界面上可以添加按钮来控制 PLC 的连接、读写操作以及触发 Halcon 视觉检测。

csharp 复制代码
private void btnConnect_Click(object sender, EventArgs e)
{
    string ip = txtIp.Text;
    int port = int.Parse(txtPort.Text);
    plcConnector.Connect(ip, port);
}

private void btnRead_Click(object sender, EventArgs e)
{
    int startAddress = int.Parse(txtStartAddress.Text);
    int numberOfPoints = int.Parse(txtNumberOfPoints.Text);
    plcConnector.ReadData(startAddress, numberOfPoints);
}

private void btnProcessImage_Click(object sender, EventArgs e)
{
    halconVision.ProcessImage();
}

在这部分代码中,btnConnectClick**事件处理函数获取用户在界面上输入的 IP 和端口号,调用 plcConnectorConnect 方法连接 PLC。btnRead Click 事件处理函数获取起始地址和读取点数,调用 ReadData 方法读取数据。btnProcessImage_Click 事件处理函数则触发 Halcon 视觉检测的图像处理操作。

通过这样的方式,我们成功实现了 C# 上位机与台达 PLC 的 Modbus TCP 通信,并融合了 Halcon 视觉检测功能,为相关自动化项目开发提供了一个完整且实用的框架。希望这个分享能给大家在类似项目开发中带来一些启发和帮助。

相关推荐
autobaba8 小时前
XPath 1.0 完整用法指南
selenium·rpa
掌心向暖RPA自动化2 天前
用影刀RPA获取公呺搜索关键词文章数据,如何判断文章条目元素是否在可视区域?| 文章列表的循环点击方案拆解
经验分享·自动化·新媒体运营·rpa·影刀rpa
天空属于哈夫克32 天前
利用 RPA 绕过 API 限制,实现企业微信外部群主动触达
企业微信·rpa
天空属于哈夫克33 天前
基于 RPA 自动化实现企业微信外部群消息触达的逻辑与实现
自动化·企业微信·rpa
天空属于哈夫克33 天前
基于 RPA 自动化实现企微外部群消息触达的逻辑与实践
自动化·企业微信·rpa
天空属于哈夫克33 天前
企业微信外部群RPA自动化实战
自动化·企业微信·rpa
RPA机器人就选八爪鱼3 天前
RPA在银行IT运维领域的应用场景与价值分析
大数据·运维·数据库·人工智能·机器人·rpa
天空属于哈夫克34 天前
利用剪贴板“管道”实现超大文本的极速填充
自动化·企业微信·api·rpa
梦想的旅途27 天前
三语言实现企微外部群消息推送
自动化·企业微信·rpa
AI_56788 天前
Python RPA解放Excel生产力
python·excel·rpa