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

本示例演示使用 C# 编写 OPC 客户端程序,连接 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 对象
            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);
            Console.ReadLine();
            // 异步写入 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();
            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 服务器: 使用 OPCServer 对象连接指定的 OPC 服务器。
  2. 创建 OPC 组: 使用 OPCGroups.Add() 方法创建 OPC 组,并设置相关属性,如 IsActiveIsSubscribedUpdateRate
  3. 添加 OPC 项目: 使用 OPCItems.AddItem() 方法添加 OPC 项目,并指定项目名称和服务器句柄。
  4. 异步读取: 使用 AsyncRead() 方法异步读取指定项目的值,并设置事件处理方法 OnAsyncReadComplete,在读取完成时处理结果。
  5. 异步写入: 使用 AsyncWrite() 方法异步写入指定项目的值,并设置事件处理方法 OnAsyncWriteComplete,在写入完成时处理结果。

注意事项

  • 以上代码示例仅供参考,需要根据实际情况进行调整和完善。
  • 连接 OPC 服务器需要安装相应的驱动程序。
  • 确保 OPC 服务器和客户端程序在同一个网络中。
  • 实际应用中,还需要进行更多的操作和处理,例如设置异步通知、写入值等等。
C# OPC 客户端示例:连接、异步读取、写入数据

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

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