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 → 自定义设备类型),便于复用。
OPC UA 地址空间分层结构 Root (根) Objects Types Views DataTypes 设备组 模拟量 状态量 温度1 压力1 电流A 转速 地址空间特性 • 有向图结构 • 节点自描述 • 类型继承

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,自动完成单位归一化和异常值过滤。
节点与引用关系示例 Motor_01 (Object) Temperature (Variable) Speed (Variable) Status (Variable) EngineeringUnits EURange HasComponent HasComponent HasComponent HasProperty HasProperty 引用方向 Source → Target 客户端从 Source 浏览到 Target

2.4 网关视角:地址空间浏览与数据清洗

工业网关在部署时,需要完成以下步骤来利用 OPC UA 基础架构:

  1. 发现与连接: 通过 Discovery Endpoint 找到服务器,建立安全会话。
  2. 浏览地址空间: 从 Root 节点开始,递归遍历 HasComponent/Organizes 引用,构建本地变量映射表。
  3. 读取元数据: 对每个 Variable 节点,通过 HasProperty 引用读取 DataType、EngineeringUnits、EURange。
  4. 数据清洗规则注入: 根据元数据自动执行单位换算、越限标记、无效值过滤。
  5. 订阅与发布: 创建 Subscription,将清洗后的数据通过 MQTT/Sparkplug 转发到上层平台。
常见陷阱: 部分老旧设备服务器可能不完整实现地址空间浏览(如缺少 HasProperty 引用),此时网关需配置手动节点映射表作为降级方案。

2.5 小结