C# OPC客户端开发指南:附详细代码示例

本指南旨在帮助您使用C#编写一个简单的OPC客户端应用程序,涵盖连接OPC服务器、读取和写入数据、处理异步操作以及异常处理等方面。

1. 项目设置

  • 创建一个新的C#控制台应用程序项目。
  • 添加对OPC Automation库的引用。
    • 在 '解决方案资源管理器' 中,右键单击 '引用',然后选择 '添加引用...'。
    • 在 '.NET' 选项卡中,找到 'OPC Automation 2.0' 并添加引用。

2. 代码实现

以下是完整的C#代码示例:

using System;
using System.Collections.Generic;
using OPCAutomation;

namespace OPCClientDemo
{
    class Program
    {
        static OPCServer server;
        static OPCGroup group;
        static OPCItem item;

        static void Main(string[] args)
        {
            try
            {
                // 连接到OPC服务器
                server = new OPCServer();
                server.Connect('Kepware.KEPServerEx.V4', '');

                // 创建OPC组
                group = server.OPCGroups.Add('Group1');
                group.IsActive = true;
                group.IsSubscribed = true;
                group.UpdateRate = 1000;
                group.AsyncReadComplete += OnAsyncReadComplete;
                group.AsyncWriteComplete += OnAsyncWriteComplete;

                // 添加OPC项
                item = group.OPCItems.AddItem('Channel1.Device1.Tag1', 1);

                // 同步读取初始值
                Console.WriteLine('Initial value of Tag1: {0}', item.Value);

                // 异步读取多个项
                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);

                // 异步写入值
                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: ' + ex.Message);
            }
            finally
            {
                // 断开与OPC服务器的连接
                if (server != null)
                {
                    server.Disconnect();
                }
            }
        }

        // 异步读取完成事件处理程序
        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);
        }
    }
}

3. 代码说明

  • 连接到OPC服务器: 使用 OPCServer 对象连接到OPC服务器,需要指定服务器的ProgID和主机名。
  • 创建OPC组: 使用 OPCGroups.Add() 方法创建OPC组,并设置其属性,例如更新频率、是否激活等。
  • 添加OPC项: 使用 OPCItems.AddItem() 方法将OPC项添加到组中,需要指定项的标识符和客户端句柄。
  • 读取OPC数据: 使用 item.Value 属性同步读取OPC项的值,或使用 group.AsyncRead() 方法异步读取多个项的值。
  • 写入OPC数据: 使用 group.AsyncWrite() 方法异步写入OPC项的值。
  • 处理异步操作: 使用事件处理程序 OnAsyncReadCompleteOnAsyncWriteComplete 处理异步读取和写入操作的完成事件。
  • 异常处理: 使用 try-catch 块捕获和处理可能发生的异常。

4. 运行程序

  • 编译并运行程序,您应该能够看到从OPC服务器读取的数据以及异步操作的完成消息。

注意:

  • 请将代码中的服务器名称 'Kepware.KEPServerEx.V4' 替换为实际的OPC服务器名称。
  • 将项名称 'Channel1.Device1.Tag1' 等替换为实际的OPC项名称。

本指南提供了一个简单的C# OPC客户端示例,您可以根据自己的需求进行扩展和修改。建议您参考OPC Automation库的文档以了解更多高级功能。

C# OPC客户端开发指南:附详细代码示例

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

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