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对象
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 客户端示例能够对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/jPsF 著作权归作者所有。请勿转载和采集!