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 和端口号,调用 plcConnector 的 Connect 方法连接 PLC。btnRead Click 事件处理函数获取起始地址和读取点数,调用 ReadData 方法读取数据。btnProcessImage_Click 事件处理函数则触发 Halcon 视觉检测的图像处理操作。

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

相关推荐
知之AI6 天前
桌面 RPA 入门:企业微信日常流程怎么拆、怎么选型(2026)
企业微信·rpa·选型·流程自动化·桌面自动化
Land03296 天前
财务RPA落地指南:银企对账、发票三单匹配、ERP台账自动化,RPA离线方案解析
服务器·自动化·rpa
AAwangzong10 天前
AI时代RPA技术解析:如何构建兼顾流程执行与智能决策的自动化平台?
人工智能·经验分享·rpa·智能体
赤龙ERP10 天前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
西瓜拿铁好喝10 天前
AI 办公和 RPA 不是一回事:自动化与智能化的分工
人工智能·自动化·rpa
中屹指纹浏览器svip11 天前
指纹浏览器RPA自动化靠谱吗?先分清适用边界
运维·自动化·rpa
极致了12 天前
飞书插件、RPA、API三条路的真实分界线
飞书·rpa
️公子13 天前
GPT-6.1 Terra 上线之后:自建 Computer-Use Agent 先过模型路由、屏幕动作白名单、提交前确认、推理强度预算与回放审计闸门
openai·rpa·ai agent·审计·agent安全·computer use·gpt-6.1 terra
shaibdoio14 天前
RPA自动化获客怎么落地?瞬维AI评论区工程实践
前端·自动化·rpa·长沙瞬维ai
AAwangzong14 天前
企业级AI智能体厂商对比:模型服务、Agent平台与流程自动化如何选择?
人工智能·经验分享·rpa·智能体