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),封装请求/响应消息结构。
- 应用层:用户自定义的业务逻辑,包括地址空间建模、方法调用和报警事件处理。
实战要点:在 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、自定义上位机 |
通信流程分为三个阶段:
- 发现与握手:客户端通过 Discovery Endpoint 获取服务器支持的协议版本和安全策略。
- 安全通道建立:交换证书、协商加密算法、创建会话(Session)。
- 数据交互:客户端调用 Read/Write/Browse/Subscribe 等服务,服务器返回响应或推送通知。
常见陷阱:部分 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:指向类型定义节点。
2.3.3 浏览地址空间(Browse)
SCADA 系统通过 Browse 服务遍历服务器地址空间,获取节点层次结构和属性。典型 Browse 请求返回的信息包括:
- 节点的 NodeId 和 BrowseName
- 节点类型(Object / Variable / Method)
- 所有出向引用(Forward References)的目标节点
- 节点的 DisplayName(用于 UI 显示)
调试技巧:使用 UA Expert 的“地址空间”面板可以直观查看节点树。如果 SCADA 无法浏览到某些节点,检查服务器是否启用了“匿名浏览”或当前用户权限是否包含 Browse 权限。
2.4 本章小结
| 知识点 | 关键要点 |
|---|---|
| 协议栈架构 | 传输层 → 安全层 → 协议层 → 应用层,分层解耦 |
| 客户端/服务器模型 | 有状态会话,支持发现、安全通道、订阅推送 |
| 地址空间与节点 | NodeId 唯一标识,引用定义关系,支持对象/变量/方法/视图 |