4. OPC UA协议栈

OPC UA 之所以能同时胜任车间现场采集与跨网段数据集成,关键在于它并不是“一个协议”,而是一套分层协议栈。应用层定义信息模型与服务,下面的传输映射、安全通道、会话与订阅则决定数据如何可靠、安全、实时地流动。理解这四层,才能在实际平台中正确选型、排障和调优。

一、协议栈分层:从信息模型到字节流

OPC UA 的协议栈自上而下大致分为:应用层(信息模型与服务)、安全层(安全通道)、会话层(会话与订阅)、传输映射层(二进制/HTTPS/WebSocket)以及底层 TCP/HTTP。应用层负责 Read、Write、Browse、CreateSubscription 等服务;安全层负责签名与加密;会话层维护客户端身份与订阅生命周期;传输层则把消息编码成字节流。

其中最关键的分叉在传输映射:UA-TCP + 二进制编码是工业现场最常用的组合,报文紧凑、解析快;HTTPS 与 WebSocket 则用于穿透防火墙、浏览器接入或云端集成。两者共享同一套服务语义,只是“外壳”不同。

OPC UA 协议栈与传输映射 应用层 信息模型(节点、变量、方法) + 服务(Read / Write / Browse / CreateSubscription / Publish) 安全层:安全通道 SecureChannel X.509 证书 · 非对称握手 · 对称密钥 · 签名 / 加密 / 仅签名 / 无 会话层:Session 与 Subscription CreateSession / ActivateSession · 订阅 · 监控项 MonitoredItem · 发布队列 传输映射层 UA-TCP + 二进制 HTTPS (SOAP/二进制) WebSocket (opcua+bin) 底层承载 TCP (4840) · TLS (4843) · HTTP/HTTPS (443) · WebSocket (80/443) 封装方向

二、二进制协议:现场采集的首选

UA-TCP 上的二进制编码(UA Binary)把每个服务请求编码为紧凑的字节序列,字段按类型顺序排列,字符串带长度前缀,结构体嵌套编码。相比 XML/SOAP,二进制报文体积通常只有其 1/5 到 1/10,解析开销也低得多,因此成为 PLC、DCS、网关等现场设备的主流选择。

一个典型的二进制消息由消息头(MessageHeader)、安全头(SecurityHeader)和序列化正文组成。安全头携带安全通道 ID、令牌 ID、序列号与签名;正文则是编码后的服务请求或响应。调试时若看到 TCP 4840 端口上出现大量小包,通常就是订阅发布(Publish)在持续推送数据变更。

# 使用 open62541 客户端连接二进制端点
$ ./ua_client opc.tcp://192.168.1.10:4840
[INFO] Connecting to opc.tcp://192.168.1.10:4840
[INFO] SecurityPolicy: None, Mode: None
[INFO] Session created: ns=1;i=2001
[INFO] Subscription id=1, publishing interval=500ms
[INFO] MonitoredItem node=ns=2;s=Machine1.Temp value=68.4

三、HTTPS 与 WebSocket:穿透与浏览器接入

当采集端位于云端、浏览器或受防火墙限制的网络时,二进制直连往往不可行。此时可选择两种映射:HTTPS 把 OPC UA 服务封装在 HTTP POST 中,天然复用 443 端口与 TLS,适合企业 IT 网络;WebSocket 则在 HTTP 升级后建立全双工长连接,既保留二进制编码的高效,又能穿透大多数代理,是浏览器端和云边协同的常用方案。

需要注意:HTTPS 映射的报文通常比二进制大,且部分旧设备仅支持 SOAP/XML,性能会明显下降。WebSocket 端点 URL 形如 opc.wss://host:443/ua,需确认服务端已启用对应映射。

传输映射默认端口编码典型场景注意事项
UA-TCP4840二进制车间现场、网关采集需开放 4840,性能最佳
UA-TCP + TLS4843二进制跨网段安全采集需证书互信
HTTPS443SOAP/二进制企业 IT、云端集成报文较大,注意超时
WebSocket80/443二进制浏览器、云边协同需代理支持 Upgrade

四、安全通道、会话与订阅机制

安全通道(SecureChannel)是客户端与服务器之间的加密与签名通道。建立时先做非对称握手(交换证书、验证签名、协商对称密钥),之后所有消息用对称密钥加密和签名。安全策略从低到高包括 None、Basic128Rsa15、Basic256、Basic256Sha256 等,生产环境应至少使用 Basic256Sha256 并启用证书校验。

会话(Session)建立在安全通道之上,代表一个已认证的客户端身份。CreateSession 分配会话 ID,ActivateSession 完成用户身份激活(匿名、用户名密码或证书)。会话有超时时间,断线后可在超时内重连并恢复订阅,这是平台稳定性的关键。

订阅(Subscription)是 OPC UA 实时采集的核心。客户端创建订阅并设定发布间隔(PublishingInterval),再为需要采集的节点创建监控项(MonitoredItem),指定采样间隔与队列大小。服务器按采样间隔读取值,变化时放入队列,按发布间隔批量推送。相比轮询 Read,订阅大幅降低网络与设备负载。

调优建议:发布间隔不宜小于采样间隔;队列大小要能覆盖一个发布周期内的变化次数,否则会丢数据。对高频变化的模拟量,可启用死区(Deadband)过滤微小波动。

五、案例与常见误区

某汽车零部件产线使用网关采集 12 台机床。最初用轮询 Read 每台每秒读 200 个点,网关 CPU 占用高且数据延迟大。改为订阅后:发布间隔 200ms、采样间隔 100ms、队列 10,CPU 下降约 60%,数据延迟稳定在 300ms 内。跨网段的两台设备则改用 UA-TCP + TLS,证书统一由平台 CA 签发。

常见误区:一是把 PublishingInterval 设得极小(如 10ms)却忽略设备能力,导致服务器过载;二是安全策略选 None 却暴露在公网;三是会话超时设置过短,网络抖动时频繁重建会话与订阅;四是监控项队列过小,快速变化时静默丢数。排障时应先看会话是否存活,再看订阅与监控项状态码。

掌握协议栈分层、传输映射差异、安全通道与会话订阅的协作关系,才能在 OPC UA 采集平台中做出正确的连接配置与性能取舍,为后续 MQTT 上行与平台集成打下基础。