C# OPC 客户端示例:连接、读取和写入数据

本示例演示如何使用 C# 编写一个 OPC 客户端程序,连接到 OPC 服务器,读取和写入数据。代码示例中包含了异步读取和写入操作,以及异常处理等功能。

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OPCAutomation; // 添加OPC引用

namespace OPCClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            OPCServer server = new OPCServer(); // 创建OPCServer对象

            try
            {
                server.Connect("Kepware.KEPServerEx.V4", ""); // 连接OPC服务器

                OPCGroup group = server.OPCGroups.Add("Group1"); // 创建OPCGroup对象
                group.IsActive = true;
                group.IsSubscribed = true;
                group.UpdateRate = 1000; // 刷新频率

                group.AsyncReadComplete += OnAsyncReadComplete; // 添加异步读取完成事件处理方法
                group.AsyncWriteComplete += OnAsyncWriteComplete; // 添加异步写入完成事件处理方法

                OPCItem item = group.OPCItems.AddItem("Channel1.Device1.Tag1", 1); // 添加OPCItem对象
                Console.WriteLine("Initial value of Tag1: {0}", item.Value);

                // 异步读取Tag2和Tag3的值
                OPCItem tag2 = group.OPCItems.AddItem("Channel1.Device1.Tag2", 2);
                OPCItem tag3 = group.OPCItems.AddItem("Channel1.Device1.Tag3", 3);
                int transactionID = group.AsyncRead(2, new int[] { tag2.ServerHandle, tag3.ServerHandle }, out Array values, out Array errors, transactionID);
                Console.WriteLine("Async read started, transaction ID: {0}", transactionID);

                // 异步写入Tag1的值
                object newValue = 123;
                int writeTransactionID = group.AsyncWrite(new int[] { item.ServerHandle }, new object[] { newValue }, out Array writeErrors, writeTransactionID);
                Console.WriteLine("Async write started, transaction ID: {0}", writeTransactionID);

                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
            }
            finally
            {
                server.Disconnect(); // 断开OPC服务器连接
            }
        }

        static void OnAsyncReadComplete(int transactionID, int numItems, ref Array clientHandles, ref Array itemValues, ref Array qualities, ref Array timeStamps, ref Array errors)
        {
            Console.WriteLine("Async read completed, transaction ID: {0}", transactionID);
            for (int i = 1; i <= numItems; i++)
            {
                Console.WriteLine("Item {0} value: {1}", i, itemValues.GetValue(i));
            }
        }

        static void OnAsyncWriteComplete(int transactionID, int numItems, ref Array clientHandles, ref Array errors)
        {
            Console.WriteLine("Async write completed, transaction ID: {0}", transactionID);
        }
    }
}

功能:

  1. 连接 OPC 服务器
  2. 创建 OPCGroup 对象并设置属性
  3. 添加 OPCItem 对象并读取其值
  4. 异步读取 Tag2 和 Tag3 的值,并在读取完成后输出
  5. 异步写入 Tag1 的值,并在写入完成后输出
  6. 包含异常处理

注意事项:

  • 代码示例中使用了 Kepware.KEPServerEx.V4 作为 OPC 服务器。请根据您的实际情况修改连接字符串。
  • 代码示例中的 Tag 名称和值仅供参考,请根据您的实际需求进行修改。
  • 为了实现异步操作,代码示例中添加了异步读取和写入完成事件处理方法。
  • 代码示例中还包含了异常处理,以确保程序在遇到错误时能够正常退出。

更多学习:

您可以参考 OPC Foundation 官方网站了解更多关于 OPC 协议和相关技术的知识。

免责声明:

本示例代码仅供参考,不保证完全正确或适用所有情况。请在实际应用中根据您的具体需求进行修改和完善。

代码版权:

本示例代码版权归作者所有,未经许可不得进行商业用途。

祝您编程顺利!

C# OPC 客户端示例:连接、读取和写入数据

原文地址: https://www.cveoy.top/t/topic/jPth 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录