2. OPC UA 基础架构:客户端/服务器模型、地址空间、节点与引用
OPC UA 的核心设计围绕客户端/服务器(C/S)通信模型展开,并通过地址空间(AddressSpace)将工业现场的所有数据、类型、方法和事件组织成一张可浏览的图。理解这四个概念是部署工业网关和进行数据清洗的前提。
2.1 客户端/服务器模型
OPC UA 采用非对称的 C/S 架构,服务器负责暴露数据,客户端负责消费数据。工业网关通常同时扮演两种角色:向下作为客户端连接 PLC/传感器,向上作为服务器向 MES/SCADA 提供数据。
| 角色 | 职责 | 典型实例 |
|---|---|---|
| OPC UA 服务器 | 维护地址空间;响应读写请求;订阅通知;管理会话与安全 | 西门子 S7-1500、罗克韦尔 CompactLogix、KEPServerEX |
| OPC UA 客户端 | 发现服务器;浏览地址空间;读写变量;订阅数据变化/事件 | Ignition SCADA、Node-RED、自定义 C#/Python 应用 |
| 工业网关 | 桥接不同协议(Modbus/Profinet → OPC UA);缓存与清洗数据 | 西门子 IoT2050、Advantech WISE-5000、树莓派 + open62541 |
网关部署要点: 网关作为客户端时需配置服务器 Endpoint URL 和安全策略;作为服务器时需规划地址空间结构,避免将所有原始变量平铺在根节点下。
2.2 地址空间(AddressSpace)
地址空间是 OPC UA 服务器的核心数据模型,它不是一个平面列表,而是一个由节点(Node)和引用(Reference)构成的有向图。服务器通过地址空间向客户端暴露所有可访问的信息。
- 分层结构: 从根节点(Root)开始,经过 Objects、Types、Views 等标准文件夹组织。
- 元数据自描述: 节点不仅包含数值,还包含数据类型、工程单位、描述、历史配置等元信息。
- 类型系统: 支持继承(如 BaseObjectType → FolderType → 自定义设备类型),便于复用。
2.3 节点(Node)与引用(Reference)
地址空间中的每个元素都是一个节点,节点之间通过引用连接。引用定义了节点之间的关系,使客户端可以“浏览”整个地址空间。
2.3.1 节点分类
OPC UA 定义了 8 种标准节点类,工业网关最常操作的是 Variable 和 Object:
| 节点类 | 用途 | 网关关注点 |
|---|---|---|
| Object | 代表物理或逻辑实体(如电机、泵、控制器) | 作为变量容器,用于组织数据层次 |
| Variable | 存储数值(温度、压力、状态字) | 数据采集的直接目标,需关注 DataType 与 EngineeringUnits |
| Method | 可调用的服务(如复位、启动) | 网关可通过调用方法执行远程操作 |
| ObjectType | 定义 Object 的模板(如 MotorType) | 用于解析自定义设备结构 |
| DataType | 定义变量数据类型(如 TemperatureType) | 数据清洗时需按 DataType 做类型转换 |
| ReferenceType | 定义引用语义(如 HasComponent、HasProperty) | 决定如何遍历地址空间 |
| View | 地址空间的子集视图 | 可缩小浏览范围,提高采集效率 |
| Property | 附加元数据(如工程单位、范围) | 数据清洗时用于单位换算和异常检测 |
2.3.2 引用类型
引用是连接两个节点的有向边,每个引用都有一个类型。常见的引用类型包括:
- HasComponent: 表示包含关系(如电机包含温度传感器)
- HasProperty: 表示属性关联(如变量关联工程单位)
- HasTypeDefinition: 表示实例与类型的关系
- Organizes: 表示层次组织关系(如文件夹包含变量)
数据清洗提示: 在网关中编写地址空间遍历逻辑时,优先使用
HasProperty 引用读取 EngineeringUnits 和 EURange,自动完成单位归一化和异常值过滤。
2.4 网关视角:地址空间浏览与数据清洗
工业网关在部署时,需要完成以下步骤来利用 OPC UA 基础架构:
- 发现与连接: 通过 Discovery Endpoint 找到服务器,建立安全会话。
- 浏览地址空间: 从 Root 节点开始,递归遍历 HasComponent/Organizes 引用,构建本地变量映射表。
- 读取元数据: 对每个 Variable 节点,通过 HasProperty 引用读取 DataType、EngineeringUnits、EURange。
- 数据清洗规则注入: 根据元数据自动执行单位换算、越限标记、无效值过滤。
- 订阅与发布: 创建 Subscription,将清洗后的数据通过 MQTT/Sparkplug 转发到上层平台。
常见陷阱: 部分老旧设备服务器可能不完整实现地址空间浏览(如缺少 HasProperty 引用),此时网关需配置手动节点映射表作为降级方案。