C# OPC 客户端示例:连接、读取和写入数据
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);
}
}
}
功能:
- 连接 OPC 服务器
- 创建 OPCGroup 对象并设置属性
- 添加 OPCItem 对象并读取其值
- 异步读取 Tag2 和 Tag3 的值,并在读取完成后输出
- 异步写入 Tag1 的值,并在写入完成后输出
- 包含异常处理
注意事项:
- 代码示例中使用了 Kepware.KEPServerEx.V4 作为 OPC 服务器。请根据您的实际情况修改连接字符串。
- 代码示例中的 Tag 名称和值仅供参考,请根据您的实际需求进行修改。
- 为了实现异步操作,代码示例中添加了异步读取和写入完成事件处理方法。
- 代码示例中还包含了异常处理,以确保程序在遇到错误时能够正常退出。
更多学习:
您可以参考 OPC Foundation 官方网站了解更多关于 OPC 协议和相关技术的知识。
免责声明:
本示例代码仅供参考,不保证完全正确或适用所有情况。请在实际应用中根据您的具体需求进行修改和完善。
代码版权:
本示例代码版权归作者所有,未经许可不得进行商业用途。
祝您编程顺利!
原文地址: https://www.cveoy.top/t/topic/jPth 著作权归作者所有。请勿转载和采集!