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对象
            server.Connect('Kepware.KEPServerEx.V4', ''); // 连接OPC服务器
            OPCGroup group = server.OPCGroups.Add('Group1'); // 创建OPCGroup对象
            group.IsActive = true;
            group.IsSubscribed = true;
            group.UpdateRate = 1000; // 刷新频率
            OPCItem item = group.OPCItems.AddItem('Channel1.Device1.Tag1', 1); // 添加OPCItem对象
            Console.WriteLine('Initial value of Tag1: {0}', item.Value);
            Console.ReadLine();
            server.Disconnect(); // 断开OPC服务器连接
        }
    }
}

以上代码实现了连接 OPC 服务器、创建 OPCGroup 对象、添加 OPCItem 对象以及读取 Tag1 的值。

完整示例:

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');
            Console.ReadLine();
            // 异步写入Tag1的值为100
            item.Write(100);
            Console.WriteLine('Async write started');
            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 complete');
            for (int i = 1; i <= numItems; i++)
            {
                Console.WriteLine('Value of Tag{0}: {1}', clientHandles.GetValue(i), itemValues.GetValue(i));
            }
        }
        static void OnAsyncWriteComplete(int transactionID, int numItems, ref Array clientHandles, ref Array errors)
        {
            Console.WriteLine('Async write complete');
        }
    }
}

以上代码实现了异步读取 Tag2 和 Tag3 的值,并在读取完成后输出结果;同时,也实现了异步写入 Tag1 的值为 100,并在写入完成后输出结果。

注意:

  • 以上示例代码需要引用 OPCAutomation 库。
  • 实际应用中,需要根据具体情况调整代码,例如设置异步通知、读取历史数据等等。
  • 请确保您已正确配置 OPC 服务器和客户端。
  • 本示例仅供参考,具体实现方式可能会有所不同。

希望这个完整的 OPC 客户端示例能够对您有所帮助。

C# OPC 客户端示例 - 连接、读取、写入和异步操作

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

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