使用C#连接KepOPC服务器进行数据读写的基础示例
csharp
using System;
using Opc;
using System.Threading;
namespace KepOPCDemo
{
class Program
{
static void Main(string[] args)
{
// OPC服务器连接参数
string serverName = "Kepware.KEPServerEX.V6"; // 根据实际安装的服务器名称修改
string clsId = "F8582CF2-88FB-11D0-B850-00C0F0104305"; // 常用KepServer EX的CLSID
try
{
// 创建OPC服务器对象
var server = new Server(serverName, clsId);
// 连接到OPC服务器
server.Connect();
Console.WriteLine("成功连接到OPC服务器");
// 创建OPC组
Group group = server.OPCGroups.Add("MyGroup");
group.UpdateRate = 1000; // 设置更新频率(毫秒)
group.IsActive = true;
// 添加OPC项(需要知道具体的PLC标签路径)
Item item = group.Items.Add("Random.Real8"); // 示例标签名
item.DataChanged += new DataChangedEventHandler(Item_DataChanged); // 数据变化事件
// 手动读取数据示例
ItemValue value = item.Read(false);
Console.WriteLine($"初始值: {value.Value}");
// 写入数据示例
object writeValue = 123.45;
ItemResult result = item.Write(writeValue);
if (result == ItemResult.Succeeded)
{
Console.WriteLine($"写入成功: {writeValue}");
}
else
{
Console.WriteLine($"写入失败,错误代码: {(int)result}");
}
// 保持程序运行
Console.WriteLine("按任意键退出...");
Console.ReadKey();
// 断开连接
server.Disconnect();
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
// 数据变化事件处理
private static void Item_DataChanged(object sender, DataChangedEventArgs e)
{
Item item = (Item)sender;
Console.WriteLine($"数据变化: {item.Name} = {item.Value}");
}
}
}
关键步骤说明:
- 引用OPC库 :
- 需要安装OPC Foundation的OPC Automation库
- NuGet包管理器安装:
Install-Package OPCFoundation.NetStandard.Opc.Ua
- 服务器连接参数 :
serverName
:KepServer的实际名称(可在OPC Quick Client中查看)clsId
:服务器CLSID(KepServer EX常用F8582CF2-88FB-11D0-B850-00C0F0104305)
- 核心操作 :
Connect()
:建立服务器连接Add()
:创建OPC组和标签项Read()
/Write()
:执行数据读写操作- 事件驱动:通过
DataChanged
事件监听数据变化
必要准备:
- 安装Kepware OPC Server
- 配置正确的PLC标签路径(需有读写权限)
- 确保防火墙允许OPC通信(DCOM配置可能需要调整)
高级功能扩展建议:
- 异步操作:
csharp
// 异步读取示例
await item.ReadAsync();
- 批量读写:
csharp
var items = group.Items.ToArray();
server.Read(items);
- 安全连接:
csharp
server.SetClientName("MyClient");
server.SetSecurity(SECURITY_MODE.Sign, SECURITY_POLICY.None);
常见问题处理:
- 连接失败:
- 检查服务器名称和CLSID是否正确
- 确认KepServer服务正在运行
- 检查DCOM配置(组件服务 -> 计算机 -> 我的电脑 -> DCOM配置)
- 权限不足:
- 在KepServer中配置用户权限
- 确保运行程序的账户有OPC访问权限
- 超时错误:
csharp
// 设置超时时间(单位:毫秒)
server.ConnectTimeout = 5000;
建议通过OPC Quick Client工具预先验证服务器配置和标签可达性,再移植到代码实现。对于生产环境,建议使用OPC UA协议(更安全且跨平台)。