【Net】OPC UA(OPC Unified Architecture)协议
OPC UA(OPC Unified Architecture)协议
OPC UA 是什么?
- OPC UA 是由 OPC Foundation 制定的工业自动化通信标准,遵循 IEC 62541,旨在实现跨平台、跨系统的安全数据交换 ([en.wikipedia.org][1])。
- 支持 Client–Server 与 Pub/Sub 两种通信模式,可运行在嵌入式设备、PLC、PC 或云端 ([en.wikipedia.org][1])。
- 支持基于 UA Binary/TCP(标准端口 4840)和基于 HTTPS (SOAP/XML) 的协议绑定 ([ascolab.com][2])。
OPC UA 架构层次
-
信息模型层(Address Space)
采用节点/属性/方法/事件方式组织数据,面向对象、语义化强 ([en.wikipedia.org][1])。 -
服务层(Services)
定义读写、浏览、订阅、历史访问、方法调用、报警等操作 ([en.wikipedia.org][1])。 -
传输层(Mappings)
- UA Binary/TCP(高性能、最小开销)
- SOAP/XML WebService(可通过 HTTP 443)
- Hybrid(二进制嵌入 HTTPS) ([ascolab.com][2])。
-
安全层(Security)
支持 X.509 证书认证、消息签名、加密、会话控制和审计 ([en.wikipedia.org][1])。
核心功能特点
- 跨平台、安全、可扩展,适用从嵌入式设备到云端的各种场景 ([en.wikipedia.org][1])。
- 支持主动感知数据变化的 Pub/Sub 与传统的 Client–Server 模式 。
- 可发布报警、历史数据访问等丰富工业特性 。
应用场景
- 工业自动化:PLC、传感器、SCADA 系统数据交互。
- 过程控制:化工、电力、石化等实时监控流程。
- 智能制造与 IIoT:平台、MES、云端与设备互联。
- 嵌入式设备:如 STM32/ARM 装置可嵌入轻量 OPC UA Server ([hms-networks.com][3])。
上下位机示例:C++ 客户端 & C Server
下位机:C (嵌入式 OPC UA Server)
使用开源 ANSI C UA Stack(如 from OPC Foundation),重要步骤包括:
// 初始化 UA_ServerConfig 默认配置
UA_ServerConfig config = UA_ServerConfig_standard;
UA_Server *server = UA_Server_new(config);// 添加变量节点
UA_VariableAttributes attr = UA_VariableAttributes_default;
UA_Double temperature = 23.5;
UA_Variant_setScalar(&attr.value, &temperature, &UA_TYPES[UA_TYPES_DOUBLE]);
UA_Server_addVariableNode(server,UA_NODEID_STRING(1, "temperature"),UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),UA_QUALIFIEDNAME(1, "Temperature"),UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),attr, NULL, NULL);// 启动服务器,监听默认端口
UA_Server_run(server, &running);
上位机:C++ OPC UA 客户端
使用 open62541(开源 C++)库示例:
UA_Client *client = UA_Client_new();
UA_ClientConfig_setDefault(UA_Client_getConfig(client));
UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://192.168.1.50:4840");
if(retval == UA_STATUSCODE_GOOD) {UA_Variant value;UA_Client_readValueAttribute(client, UA_NODEID_STRING(1, "temperature"), &value);double temp = *(UA_Double*)value.data;std::cout << "Temperature=" << temp << std::endl;
}
UA_Client_disconnect(client);
UA_Client_delete(client);
工业案例概述
某化学品船通过 OPC UA 实现上位机(WinForms/C#)与 PLC 的实时数据交互:
- 订阅方式读取上万个数据点
- 控制命令通过事件写回控制 PLC
- 延时 <500ms,支持双 OPC UA 服务器冗余切换 ([hanspub.org][4], [pdf.hanspub.org][5])
总结
维度 | 特点 |
---|---|
平台 | 跨 Windows、Linux、嵌入式、云 |
协议绑定 | UA Binary/TCP、HTTPS SOAP/XML、Hybrid |
通信模式 | Client–Server、Pub/Sub |
安全 | 证书认证、消息签名加密、审计 |
应用优势 | 统一、语义化、安全、工业友好 |
参考资料
“OPC Unified Architecture - Wikipedia”
“OPC UA Protocols - ascolab GmbH”
“OPC UA protocol | HMS Networks 2024”
“基于Winform框架的OPC UA通信方法研究与实现 - 汉斯出版社”
“[PDF] 基于Winform框架的OPC UA通信方法研究与实现”