4. OPC UA协议栈
OPC UA 之所以能同时胜任车间现场采集与跨网段数据集成,关键在于它并不是“一个协议”,而是一套分层协议栈。应用层定义信息模型与服务,下面的传输映射、安全通道、会话与订阅则决定数据如何可靠、安全、实时地流动。理解这四层,才能在实际平台中正确选型、排障和调优。
一、协议栈分层:从信息模型到字节流
OPC UA 的协议栈自上而下大致分为:应用层(信息模型与服务)、安全层(安全通道)、会话层(会话与订阅)、传输映射层(二进制/HTTPS/WebSocket)以及底层 TCP/HTTP。应用层负责 Read、Write、Browse、CreateSubscription 等服务;安全层负责签名与加密;会话层维护客户端身份与订阅生命周期;传输层则把消息编码成字节流。
其中最关键的分叉在传输映射:UA-TCP + 二进制编码是工业现场最常用的组合,报文紧凑、解析快;HTTPS 与 WebSocket 则用于穿透防火墙、浏览器接入或云端集成。两者共享同一套服务语义,只是“外壳”不同。
二、二进制协议:现场采集的首选
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-TCP | 4840 | 二进制 | 车间现场、网关采集 | 需开放 4840,性能最佳 |
| UA-TCP + TLS | 4843 | 二进制 | 跨网段安全采集 | 需证书互信 |
| HTTPS | 443 | SOAP/二进制 | 企业 IT、云端集成 | 报文较大,注意超时 |
| WebSocket | 80/443 | 二进制 | 浏览器、云边协同 | 需代理支持 Upgrade |
四、安全通道、会话与订阅机制
安全通道(SecureChannel)是客户端与服务器之间的加密与签名通道。建立时先做非对称握手(交换证书、验证签名、协商对称密钥),之后所有消息用对称密钥加密和签名。安全策略从低到高包括 None、Basic128Rsa15、Basic256、Basic256Sha256 等,生产环境应至少使用 Basic256Sha256 并启用证书校验。
会话(Session)建立在安全通道之上,代表一个已认证的客户端身份。CreateSession 分配会话 ID,ActivateSession 完成用户身份激活(匿名、用户名密码或证书)。会话有超时时间,断线后可在超时内重连并恢复订阅,这是平台稳定性的关键。
订阅(Subscription)是 OPC UA 实时采集的核心。客户端创建订阅并设定发布间隔(PublishingInterval),再为需要采集的节点创建监控项(MonitoredItem),指定采样间隔与队列大小。服务器按采样间隔读取值,变化时放入队列,按发布间隔批量推送。相比轮询 Read,订阅大幅降低网络与设备负载。
五、案例与常见误区
某汽车零部件产线使用网关采集 12 台机床。最初用轮询 Read 每台每秒读 200 个点,网关 CPU 占用高且数据延迟大。改为订阅后:发布间隔 200ms、采样间隔 100ms、队列 10,CPU 下降约 60%,数据延迟稳定在 300ms 内。跨网段的两台设备则改用 UA-TCP + TLS,证书统一由平台 CA 签发。
掌握协议栈分层、传输映射差异、安全通道与会话订阅的协作关系,才能在 OPC UA 采集平台中做出正确的连接配置与性能取舍,为后续 MQTT 上行与平台集成打下基础。