3. OPC UA核心回顾
OPC UA FX 并不是一套全新的协议,而是建立在经典 OPC UA 基础之上的现场级扩展。要理解 FX 为什么能在控制器之间实现确定性、互操作的通信,必须先回到 OPC UA 的六大核心支柱:信息模型、地址空间、服务集、发布订阅、安全模型与传输协议。本节把它们串成一条完整的认知链,为后续 FX 的工程配置打基础。
一、信息模型:把设备“翻译”成可理解的对象
OPC UA 的信息模型用面向对象的方式描述现实世界。最基础的构建块是节点(Node),节点通过引用(Reference)相互连接,形成有向图。常见的节点类别包括对象、变量、方法、类型、视图等。变量节点携带值、数据类型、访问级别和时间戳;对象节点用于组织设备、通道、轴等实体;方法节点则暴露可调用的行为。
信息模型的关键价值在于类型系统。通过对象类型和变量类型,可以定义“电机”“伺服轴”“安全模块”等可复用模板,实例化时自动继承结构与语义。FX 正是基于这套机制,把控制器、IO 设备、运动轴抽象为标准化的功能单元,使不同厂商的设备在语义层面对齐。
二、地址空间:节点如何被寻址与浏览
地址空间是信息模型的运行时载体。每个节点由 NodeId 唯一标识,包含命名空间索引和标识符。命名空间用于隔离不同厂商或标准的语义,避免命名冲突。节点之间通过层次引用(如 HasComponent、HasProperty)和类型引用(如 HasTypeDefinition)建立关系。
客户端通常从 Root 或 Objects 文件夹开始,通过 Browse 服务逐层发现节点。这种“浏览式”寻址让系统具备自描述能力,但也带来性能开销。因此在 FX 中,常通过 NodeId 直接访问关键变量,减少浏览深度。
NodeId 示例:
ns=2;s=Machine.Axis1.Position
ns=2;i=5012
ns=1;g=8f3a-...-c2d1
三、服务集:客户端与服务器的交互契约
OPC UA 把通信能力抽象为一组服务,客户端通过服务请求与服务器交互。核心服务集包括:
- 发现服务:
FindServers、GetEndpoints,用于定位服务器和端点。 - 会话服务:
CreateSession、ActivateSession、CloseSession,管理连接生命周期。 - 浏览服务:
Browse、BrowseNext,遍历地址空间。 - 读写服务:
Read、Write,访问变量值。 - 订阅服务:
CreateSubscription、CreateMonitoredItems、Publish,实现变化通知。 - 方法调用:
Call,执行服务器端方法。
服务集是“请求—响应”模式的,天然适合配置、诊断和低频数据访问。但现场级通信要求高频、多对多、确定性,这正是发布订阅要解决的问题。
四、发布订阅:从点对点到多对多
传统客户端/服务器模式中,每个客户端与服务器建立独立会话,数据流向是点对点的。发布订阅模式则引入发布者(Publisher)和订阅者(Subscriber),通过中间的消息中间件或组播网络解耦。发布者把数据集(DataSet)编码为网络消息,订阅者根据配置接收并解析。
发布订阅的关键参数包括:发布间隔、数据集字段、编码方式(UADP 或 JSON)、传输协议(UDP、MQTT、AMQP 等)。在 FX 中,UDP 组播配合 UADP 编码是常见组合,因为它能提供低延迟和确定性。
五、安全模型:从证书到会话的信任链
OPC UA 的安全模型覆盖三个层面:传输安全、应用安全和用户安全。传输安全通过 TLS 或 UA 安全通道实现,使用 X.509 证书完成非对称握手,随后协商对称密钥对报文加密和签名。应用安全通过应用实例证书验证对端身份,防止中间人攻击。用户安全则通过用户名密码、令牌或证书确认操作者权限。
在 FX 现场级场景中,安全配置需要权衡性能与保护强度。高实时性数据流通常采用签名但不加密的方式,以降低 CPU 开销;而配置和诊断通道则启用完整加密。
六、传输协议:承载一切的网络底座
OPC UA 支持多种传输映射。经典客户端/服务器模式常用 opc.tcp://,基于 TCP 提供可靠有序的字节流。发布订阅模式则支持 UDP、MQTT、AMQP 等。UDP 适合低延迟组播,MQTT 适合跨网段和云边协同,AMQP 适合企业级消息队列。
| 传输方式 | 典型场景 | 优势 | 注意事项 |
|---|---|---|---|
| opc.tcp | 客户端/服务器、配置、诊断 | 可靠、有序、成熟 | 点对点,连接数受限 |
| UDP 组播 | FX 控制器间实时数据 | 低延迟、多对多 | 需网络支持组播,无重传 |
| MQTT | 云边协同、跨网段 | 轻量、易穿透 | 依赖 Broker,延迟较高 |
| AMQP | 企业集成、消息队列 | 可靠、事务支持 | 配置复杂,资源占用高 |
七、案例:一条 FX 数据流的完整旅程
假设一台 FX 控制器需要把轴位置发送给另一台控制器。首先,发布者根据信息模型找到 Axis1.Position 变量节点,将其加入数据集。然后,DataSetWriter 按发布间隔把值编码为 UADP 报文,通过 UDP 组播发出。订阅者根据预配置的 DataSetReader 接收报文,解析出字段并写入本地地址空间。整个过程不经过会话层,因此延迟远低于传统读写服务。
Publisher 配置片段:
DataSet: AxisData
Field1: Axis1.Position (Double)
Field2: Axis1.Status (UInt16)
PublishingInterval: 4 ms
Encoding: UADP
Transport: udp://239.0.0.1:4840
八、复盘:六个支柱如何协同
信息模型和地址空间回答“数据是什么、在哪里”;服务集回答“如何交互”;发布订阅回答“如何高效分发”;安全模型回答“如何可信”;传输协议回答“如何承载”。六者缺一不可。FX 的工程实践,本质上就是在这六个维度上做正确的配置与取舍。理解它们之间的边界与协作关系,才能在后续的 FX 组态、诊断和优化中快速定位问题。