OPC UA 完整介绍、官网、C# 简单使用
OPC UA(Open Platform Communications Unified Architecture),开放平台通信统一架构,工业自动化主流跨厂商通信标准,IEC 62541 国际标准。 你的印花机‑烘干机一体化设备,可以用 OPC UA 实现:设备状态采集、工艺参数下发、报警推送、上位机 / MES 对接。
一、基础介绍
核心特点
- 跨平台:Windows、Linux、嵌入式设备都可运行,不再依赖老 OPC‑DA 的 DCOM(仅 Windows)OPC Founda...。
- 安全:证书加密、身份认证、权限控制,支持 UA‑TCP 二进制(高性能)、HTTP‑SOAP、WebSocket。
- 信息模型:不只是传数值,可定义设备对象、变量、方法、事件,支持复杂设备模型(机器模型、报警、历史数据)。
- 角色
- OPC UA Server(服务端):设备 / PLC 侧,对外暴露变量节点(印花温度、烘干转速、故障码等)。
- OPC UA Client(客户端) :上位机软件,连接 Server,读、写、订阅数据、调用方法。
- 典型端口:
4840(无加密)、4841(加密);连接地址格式:opc.tcp://127.0.0.1:4840。
老 OPC‑DA:淘汰,仅限 Windows DCOM;新项目一律 OPC‑UA。
二、官方网站 & 资源
- OPC 基金会主站 :https://opcfoundation.org/
- 标准文档在线查阅(最重要) :OPC UA Online Reference 全部规范免费在线看、下载OPC Connec...
- 官方.NET 开源库 GitHub :https://github.com/OPCFoundation/UA‑.NETStandard (客户端 + 服务端源码,MIT 协议可商用)GitHub
- 官方示例仓库 :https://github.com/OPCFoundation/UA‑.NETStandard‑Samples 大量客户端、服务端 DemoGitHub
NuGet 官方包:
OPCFoundation.NetStandard.Opc.Ua
三、C# .NET 简单可运行示例(OPC UA 客户端)
场景:连接 OPC UA 服务器,读取变量、写入变量、订阅实时变化(印花 / 烘干温度实时监控) 新建 .NET6/.NET8 控制台项目,NuGet 安装包:
OPCFoundation.NetStandard.Opc.Ua
cs
using Opc.Ua;
using Opc.Ua.Client;
namespace OpcUaDemo;
class Program
{
static async Task Main(string[] args)
{
// OPC UA服务端地址,可使用Prosys/KEPServerEX模拟器测试
string serverUrl = "opc.tcp://127.0.0.1:4840";
// 配置:关闭证书校验(开发调试用;生产环境必须证书)
var config = new ApplicationConfiguration
{
ApplicationName = "MyOpcUaClient",
ApplicationUri = $"urn:{Environment.MachineName}:MyOpcUaClient",
SecurityConfiguration = new SecurityConfiguration
{
AutoAcceptUntrustedCertificates = true //开发调试打开,生产关闭!
},
TransportConfigurations = new TransportConfigurationCollection(),
TransportQuotas = TransportQuotas.Default,
ClientConfiguration = new ClientConfiguration()
};
await config.ValidateAsync(ApplicationType.Client);
Session? session = null;
try
{
Console.WriteLine($"正在连接 {serverUrl}");
// 创建会话连接
session = await Session.CreateAsync(config, new ConfiguredEndpoint(null, new EndpointDescription(serverUrl), EndpointConfiguration.Create(config)));
Console.WriteLine("连接成功!");
// ==========1.读取节点值,示例节点 ns=2;s=DryingTemp 烘干温度==========
NodeId readNodeId = new NodeId("DryingTemp", 2);
DataValue readVal = await session.ReadAsync(readNodeId);
Console.WriteLine($"读取烘干温度:{readVal.Value}");
// ==========2.写入节点值:设置目标烘干温度==========
NodeId writeNodeId = new NodeId("SetDryingTemp", 2);
DataValue writeVal = new DataValue((double)85.5);
await session.WriteAsync(writeNodeId, writeVal);
Console.WriteLine("写入目标烘干温度=85.5成功");
// ==========3.订阅(实时推送,工业最常用:监控印花机状态、报警)==========
Subscription sub = new Subscription(session.DefaultSubscription);
sub.PublishingInterval = 200; //200ms推送一次
sub.KeepAliveCount = 10;
// 添加监控节点
MonitoredItem item = new MonitoredItem(sub.DefaultItem);
item.StartNodeId = readNodeId;
item.Notification += (sender, evt) =>
{
if (evt.NotificationValue is MonitoredItemNotification notify)
{
Console.WriteLine($"【订阅实时】烘干温度={notify.Value.WrappedValue.Value}");
}
};
sub.AddItem(item);
await session.AddSubscriptionAsync(sub);
await sub.CreateAsync();
Console.WriteLine("订阅已开启,按回车退出");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine($"异常:{ex.Message}");
}
finally
{
if(session != null && !session.Disposed)
{
await session.CloseAsync();
session.Dispose();
}
}
}
}
开发注意点
- AutoAcceptUntrustedCertificates = true 仅开发调试;生产环境必须证书管理,禁止自动接受不信任证书。
- NodeId 格式 :
ns=命名空间索引;s=节点字符串ID,例如ns=2;s=DryingTemp,需要和 OPC UA 服务端节点保持一致。 - 测试工具:Prosys OPC‑UA Simulator,免费模拟器,本机快速调试客户端代码。
四、OPC UA 服务端简单说明(如果你要给印花烘干机设备做 OPC UA 服务端)
官方库同样支持写 UA Server,可以把设备内部变量(印花速度、烘干温度、风机转速、故障代码)对外暴露成 OPC UA 节点。
- 对外提供节点:
- 读节点:实际温度、设备运行状态、故障码
- 写节点:设定烘干温度、印花速度
- 事件:设备报警事件推送
五、工业项目踩坑要点(印花烘干机设备场景)
- 网络断连:OPC UA 客户端要做重连机制,生产现场网络抖动很常见。
- 订阅不要设置过小 PublishingInterval,避免 CPU / 网络压力。
- 区分:读(Read)是主动一次性取;订阅(Subscription)服务端主动推送变化,实时监控优先用订阅。
- 防火墙开放端口 4840/4841。