2. OPC UA基础架构

OPC UA 的架构设计兼顾了传统工业控制中的请求-响应模式与新兴物联网场景下的事件驱动模式。理解其两大通信模型和核心数据组织方式,是进行安全配置与高效数据采集的前提。

2.1 客户端/服务器(C/S)模型

这是 OPC UA 最经典的交互模式,适用于点对点、高可靠性的实时数据访问场景,如 PLC 与 SCADA 之间的周期性变量读取。

核心特征:客户端主动发起请求,服务器被动响应。连接由客户端建立,会话由客户端管理。

2.1.1 通信流程

  1. 发现端点:客户端通过 DiscoveryUrl 获取服务器支持的端点列表(协议、安全策略)。
  2. 创建通道:基于安全策略(如 Basic256Sha256)建立加密通信通道。
  3. 创建会话:客户端发送 CreateSessionRequest,服务器返回 SessionId 与认证令牌。
  4. 激活会话:客户端提供用户身份令牌(匿名、用户名/密码、证书)完成激活。
  5. 数据交互:执行 Read、Write、Browse、Subscribe 等服务调用。
  6. 关闭会话:客户端主动调用 CloseSession 或超时断开。

2.1.2 适用场景对比

特性 客户端/服务器模型 发布/订阅模型
通信方向 客户端→服务器(请求/响应) 发布者→订阅者(单向推送)
实时性 中等(受轮询周期限制) 高(事件驱动,低延迟)
连接数 点对点,连接数与客户端数成正比 一对多,发布者无需维护大量连接
典型应用 HMI 读取 PLC 变量、配置工具写入参数 传感器数据上报、边缘节点向云端推送
网络穿透 需固定 IP/端口,防火墙配置复杂 支持 Broker 中转,NAT 穿透友好
实战建议:在车间内网进行 PLC 数据采集时,优先使用 C/S 模型;当需要跨网段、跨防火墙将数据发送到企业级平台时,应切换到发布/订阅模型。

2.2 发布/订阅(Pub/Sub)模型

Pub/Sub 模型是 OPC UA 规范第 14 部分定义的新一代通信模式,专为大规模分布式系统和物联网边缘计算设计。它解耦了数据生产者和消费者,支持 MQTT 和 AMQP 作为底层传输协议。

2.2.1 核心角色

  • 发布者(Publisher):负责采集数据并按照配置的 DataSet 周期发布消息。
  • 订阅者(Subscriber):接收并处理发布者发送的消息,无需知道发布者地址。
  • 消息中间件(Broker):可选组件,用于消息路由、缓存和转发,典型实现如 Mosquitto、RabbitMQ。

2.2.2 工作模式

模式 描述 适用场景
Broker 模式 发布者将消息发送到 Broker 的 Topic,订阅者从 Topic 拉取 跨网络、跨企业、云边协同
无 Broker 模式(UDP) 发布者通过组播或单播直接发送 UDP 数据报 同一网段内的高频数据同步
安全注意:Pub/Sub 模型默认不提供端到端加密。在生产环境中,必须启用 OPC UA PubSub 安全机制(如使用 JWS 签名)或依赖底层 TLS 加密传输。
OPC UA 双模型架构对比 客户端/服务器模型 客户端 服务器 请求 响应 核心服务: Read / Write / Browse CreateSession / ActivateSession Subscribe / MonitoredItem 特点 点对点连接,状态保持 适合内网实时控制 防火墙配置复杂 发布/订阅模型 发布者 Broker 订阅者 发布 推送 特点 解耦生产者和消费者 支持 MQTT/AMQP 传输 适合跨网络、云边协同

2.3 地址空间与节点概念

OPC UA 地址空间(AddressSpace)是服务器端所有可用数据的结构化组织方式。它采用全连接图(Fully Meshed Graph)模型,所有信息都以节点(Node)的形式存在,并通过引用(Reference)相互关联。

2.3.1 节点(Node)

节点是地址空间中的基本单元,每个节点都有一个唯一的 NodeId(由 NamespaceIndex + Identifier 组成)。节点分为以下核心类型:

节点类型 作用 示例
对象(Object) 代表物理或逻辑实体 PLC、电机、温度传感器
变量(Variable) 存储数值或状态 当前温度值、电机转速
方法(Method) 可调用的操作 启动电机、复位报警
对象类型(ObjectType) 定义对象的模板 MotorType、SensorType
变量类型(VariableType) 定义变量的数据类型与属性 AnalogItemType、DiscreteItemType
引用类型(ReferenceType) 定义节点间的关系语义 HasComponent、Organizes、HasProperty
视图(View) 地址空间的子集,用于简化浏览 设备视图、报警视图

2.3.2 引用(Reference)

引用是连接两个节点的有向边,它定义了节点之间的语义关系。常见的引用类型包括:

  • Organizes:用于构建层次结构(如文件夹包含子对象)。
  • HasComponent:表示整体与部件的关系(如电机包含温度传感器)。
  • HasProperty:表示属性关系(如变量具有 EngineeringUnits 属性)。
  • HasTypeDefinition:表示实例与类型的关系。
关键理解:地址空间不是树形结构,而是图结构。一个节点可以被多个父节点引用,从而支持多维度数据组织(如按设备位置、按功能类型同时浏览)。

2.3.3 地址空间浏览示例

以下代码展示了使用 OPC UA .NET 客户端浏览地址空间根节点下第一级子节点的基本操作:

// 连接到服务器并浏览根节点
var session = await client.ConnectAsync(endpointUrl);

// 获取 Objects 文件夹节点(NodeId=ObjectsFolder)
var objectsFolderId = ObjectIds.ObjectsFolder;

// 浏览子节点
var references = await session.BrowseAsync(
    nodeId: objectsFolderId,
    nodeClassMask: (uint)NodeClass.Object,
    resultMask: (uint)BrowseResultMask.All
);

foreach (var ref in references)
{
    Console.WriteLine($"DisplayName: {ref.DisplayName.Text}, NodeId: {ref.NodeId}");
}
OPC UA 地址空间:节点与引用结构 Root (Objects) PLC_01 (Object) Motor_02 (Object) Sensor_03 (Object) Temperature (Var) Speed (Var) Status (Var) Value (Var) Start (Method) Organizes Organizes Organizes HasComponent HasComponent HasProperty HasComponent HasComponent Object Variable Method Reference

2.4 模型选择与数据采集策略

在实际的工业物联网项目中,两种模型往往混合使用:

  • 边缘层:使用 C/S 模型从 PLC、CNC 等控制器采集实时数据,保证低延迟和确定性。
  • 平台层:使用 Pub/Sub 模型将边缘处理后的数据上报到云端或企业级平台,实现大规模数据汇聚。
架构建议:在边缘网关中同时实现 OPC UA 客户端(采集设备)和 OPC UA 发布者(上报平台),形成“采集-处理-转发”的完整链路。地址空间的设计应遵循 ISA-95 标准,将设备、生产线、工厂层级映射为对象节点,便于后续维护和扩展。