2. OPC UA基础

OPC UA(统一架构)是工业自动化领域实现平台无关、安全可靠数据交换的核心标准。本章从协议栈分层、通信模型和信息建模三个维度,拆解 OPC UA 的技术骨架,为后续 SCADA 集成接口调试打下理论基础。

2.1 OPC UA 协议栈架构

OPC UA 协议栈采用分层设计,每一层封装特定的功能,上层依赖下层提供的服务。与传统的 OPC Classic(基于 COM/DCOM)不同,OPC UA 原生支持 TCP/IP、WebSocket 和 HTTPS 等多种传输协议,不再受 Windows 平台限制。

核心分层(从下至上):
  • 传输层:定义底层网络通信机制,包括 UA TCP(二进制)、HTTPS(SOAP/XML)和 WebSocket。
  • 安全层:提供会话加密(AES)、签名(RSA/SHA)和证书管理,确保数据机密性与完整性。
  • 协议层:实现 OPC UA 服务接口(如 Read、Write、Browse、Subscribe),封装请求/响应消息结构。
  • 应用层:用户自定义的业务逻辑,包括地址空间建模、方法调用和报警事件处理。
OPC UA 协议栈分层架构 应用层(Application Layer) 地址空间建模 · 方法调用 · 报警与事件 协议层(Services Layer) Read / Write / Browse / Subscribe / Call 安全层(Security Layer) 证书管理 · 加密(AES) · 签名(RSA) 传输层(Transport Layer) UA TCP(二进制) · HTTPS(SOAP/XML) · WebSocket 分层解耦:每一层可独立升级,下层对上层透明
实战要点:在 SCADA 集成调试中,90% 的连接问题出在安全层(证书不匹配或过期)和传输层(端口未开放或防火墙拦截)。建议先用 UA Expert 等工具测试裸连接,再集成到 SCADA 项目。

2.2 客户端/服务器模型

OPC UA 采用经典的 C/S 架构,但与传统工业协议(如 Modbus TCP)不同,OPC UA 的会话是有状态的,且支持多种交互模式。

角色 职责 典型实例
OPC UA 服务器 暴露地址空间、响应读写请求、推送订阅数据、管理会话与安全 PLC 内置 UA 服务器、边缘网关、Kepware
OPC UA 客户端 发现服务器、建立安全通道、浏览地址空间、订阅数据变化 SCADA 驱动、UA Expert、自定义上位机

通信流程分为三个阶段:

  1. 发现与握手:客户端通过 Discovery Endpoint 获取服务器支持的协议版本和安全策略。
  2. 安全通道建立:交换证书、协商加密算法、创建会话(Session)。
  3. 数据交互:客户端调用 Read/Write/Browse/Subscribe 等服务,服务器返回响应或推送通知。
OPC UA 客户端/服务器交互流程 OPC UA 客户端 SCADA / UA Expert OPC UA 服务器 PLC / 网关 / Kepware ① 发现 & 获取 Endpoint ② 证书交换 & 安全通道建立 ③ 创建会话(CreateSession) ④ 浏览 / 读写 / 订阅数据 会话有状态:客户端断开后需显式关闭会话,否则服务器保留资源 订阅模式:服务器按采样间隔推送变化,减少轮询负载 适用于 SCADA 实时数据采集场景
常见陷阱:部分 SCADA 平台(如 WinCC、iFIX)的 OPC UA 客户端默认使用短连接,每次读写都重新建会话,导致性能低下。务必在驱动配置中启用“会话复用”或“订阅模式”。

2.3 地址空间与节点模型

地址空间(AddressSpace)是 OPC UA 服务器的核心,它以层次化结构组织所有可访问的数据、方法和事件。地址空间由节点(Node)和引用(Reference)构成,类似于文件系统的目录和文件。

2.3.1 节点类型

节点类型 用途 示例
Object(对象) 代表物理或逻辑实体,如设备、控制器、传感器 “泵站 #1”、“温度传感器”
Variable(变量) 存储数值或状态,可读可写 “当前温度”、“电机转速”
Method(方法) 可调用的服务,带输入/输出参数 “复位报警”、“启动批次”
View(视图) 地址空间的子集,用于简化浏览 “关键参数视图”、“报警视图”

2.3.2 节点标识与引用

每个节点由 NodeId 唯一标识,格式为 NamespaceIndex:Identifier。引用(Reference)定义节点之间的语义关系,常见类型包括:

  • Organizes:父子层级关系(如文件夹包含子对象)。
  • HasComponent:对象包含子组件。
  • HasProperty:变量或对象的属性。
  • HasTypeDefinition:指向类型定义节点。
OPC UA 地址空间节点模型示例 Root(根) Objects 泵站 #1 反应釜 #2 传感器组 出口压力 电机转速 温度值 振动频率 复位报警 校准传感器 节点标识格式:ns=2;i=1001(NamespaceIndex=2, Identifier=1001) 引用类型:Organizes(实线) / HasComponent(虚线)

2.3.3 浏览地址空间(Browse)

SCADA 系统通过 Browse 服务遍历服务器地址空间,获取节点层次结构和属性。典型 Browse 请求返回的信息包括:

  • 节点的 NodeId 和 BrowseName
  • 节点类型(Object / Variable / Method)
  • 所有出向引用(Forward References)的目标节点
  • 节点的 DisplayName(用于 UI 显示)
调试技巧:使用 UA Expert 的“地址空间”面板可以直观查看节点树。如果 SCADA 无法浏览到某些节点,检查服务器是否启用了“匿名浏览”或当前用户权限是否包含 Browse 权限。

2.4 本章小结

知识点 关键要点
协议栈架构 传输层 → 安全层 → 协议层 → 应用层,分层解耦
客户端/服务器模型 有状态会话,支持发现、安全通道、订阅推送
地址空间与节点 NodeId 唯一标识,引用定义关系,支持对象/变量/方法/视图