4. OPC UA 通信栈:UA TCP、HTTPS、MQTT绑定、二进制编码与JSON编码、会话与通道
OPC UA 通信栈是设备接入的核心骨架,它定义了客户端与服务器之间如何建立连接、交换数据以及保障安全。本章将深入剖析通信栈的各个层次,包括传输协议绑定、数据编码方式以及会话与安全通道的建立机制。
4.1 OPC UA 通信栈分层架构
OPC UA 采用分层设计,将应用层语义与底层传输细节解耦。通信栈主要分为三层:传输层、编码层和会话/安全层。
4.2 传输协议绑定
OPC UA 定义了三种标准的传输协议绑定,分别适用于不同的网络环境和性能要求。
| 传输协议 | 默认端口 | 传输层安全 | 典型场景 |
|---|---|---|---|
| UA TCP | 4840 | 可选 (通过 UA Secure Conversation) | 工厂局域网内高性能实时通信 |
| HTTPS | 443 | 强制 (TLS) | 跨防火墙的 Web 服务集成、RESTful API |
| MQTT | 1883 / 8883 | 可选 (TLS) | 云平台对接、边缘网关、低带宽/高延迟网络 |
4.2.1 UA TCP 二进制协议
UA TCP 是 OPC UA 的原生高性能传输协议,专为工厂自动化设计。它采用二进制帧格式,支持全双工通信和异步消息处理,延迟极低。
- 特点: 无状态、轻量级、支持分片和重组。
- 握手流程: 客户端发送
HELLO消息,服务器回复ACK,随后进入安全通道建立阶段。 - 适用场景: PLC 与 SCADA 之间的高速数据采集、运动控制。
4.2.2 HTTPS 绑定
HTTPS 绑定将 OPC UA 服务封装在标准的 HTTP/HTTPS 请求中,主要用于 Web 客户端和跨企业网络集成。
- 特点: 兼容现有 Web 基础设施,易于穿透防火墙。
- 消息格式: 请求和响应体使用 JSON 或二进制编码,通过 HTTP 方法(如 POST)映射 OPC UA 服务调用。
- 适用场景: 基于浏览器的监控面板、第三方系统通过 REST API 访问 OPC UA 数据。
4.2.3 MQTT 绑定
MQTT 绑定是 OPC UA 向工业物联网(IIoT)扩展的关键协议,通过发布/订阅模式实现高效的数据分发。
- 特点: 一对多通信、支持 QoS 等级、保留消息和遗嘱消息。
- 主题映射: OPC UA 节点 ID 被映射为 MQTT 主题,例如
opcua/server1/ns=2;s=Temperature。 - 适用场景: 将现场设备数据发布到云端、跨地域的多站点数据汇聚。
4.3 数据编码方式
OPC UA 支持两种标准编码方式:UA Binary 和 UA JSON。编码层负责将应用层的数据结构(如变量值、方法参数)序列化为字节流。
| 编码方式 | 数据大小 | 解析速度 | 可读性 | 推荐场景 |
|---|---|---|---|---|
| UA Binary | 小(紧凑) | 快(原生解析) | 差(不可读) | 高性能实时通信、PLC 内部数据交换 |
| UA JSON | 大(文本冗余) | 较慢(需文本解析) | 好(人类可读) | Web 应用、日志记录、调试与诊断 |
4.3.1 UA Binary 编码
UA Binary 基于 OPC UA 定义的二进制序列化规则,使用紧凑的数据类型描述(如 Int32、Float、String)。它通过预定义的类型字典和编码规则,实现了极高的编解码效率。
// UA Binary 编码示例(伪代码)
// 写入一个 Int32 变量值
BinaryEncoder encoder = new BinaryEncoder(buffer);
encoder.WriteInt32(42); // 输出 4 字节: 2A 00 00 00
encoder.WriteString("Temperature"); // 输出长度前缀 + UTF-8 字节
4.3.2 UA JSON 编码
UA JSON 编码将 OPC UA 数据结构映射为 JSON 对象,便于 Web 前端和脚本语言处理。它遵循 OPC UA JSON 编码规范,使用标准 JSON 数据类型。
// UA JSON 编码示例
{
"NodeId": "ns=2;s=Temperature",
"Value": {
"Type": "Double",
"Body": 23.5
},
"SourceTimestamp": "2025-03-21T10:30:00Z"
}
4.4 会话与安全通道
会话(Session)和安全通道(Secure Channel)是 OPC UA 通信栈中保障连接可靠性和安全性的核心机制。
4.4.1 安全通道(Secure Channel)
安全通道是通信双方在传输层之上建立的加密隧道,用于保护消息的机密性和完整性。
- 建立过程: 客户端调用
OpenSecureChannel服务,交换证书并协商安全策略(如 Basic256Sha256)。 - 密钥管理: 支持对称密钥和非对称密钥混合使用,定期更新会话密钥。
- 生命周期: 安全通道有超时时间,客户端需定期发送
RenewSecureChannel请求续期。
4.4.2 会话(Session)
会话是应用层的逻辑连接,代表一个经过身份认证的客户端与服务器之间的交互上下文。
- 创建与激活: 先通过
CreateSession创建会话端点,再通过ActivateSession传入用户凭证(用户名/密码、证书)完成身份认证。 - 会话状态: 会话维护订阅、连续点(ContinuationPoint)等资源,客户端断开后服务器会清理相关资源。
- 多会话支持: 一个客户端可以同时打开多个会话,每个会话拥有独立的认证身份和订阅集合。
- 安全策略: 选择与服务器匹配的策略(如 None、Basic128Rsa15、Basic256Sha256)。
- 会话超时: 默认通常为 60 秒,可根据网络稳定性调整。
- 最大订阅数: 限制单个会话可创建的订阅数量,防止资源耗尽。
4.5 通信栈组合选型参考
在实际项目中,需要根据网络环境、性能需求和安全性要求,选择合适的传输协议与编码方式组合。下表总结了常见的组合方案:
| 组合方案 | 传输协议 | 编码方式 | 安全通道 | 推荐场景 |
|---|---|---|---|---|
| 高性能本地通信 | UA TCP | UA Binary | Sign & Encrypt | PLC ↔ SCADA 实时数据采集 |
| Web 集成 | HTTPS | UA JSON | TLS | 浏览器监控、第三方 REST 调用 |
| 云边协同 | MQTT | UA JSON | TLS (可选) | 边缘网关 → 云平台数据上报 |
| 混合模式 | UA TCP + MQTT | UA Binary + UA JSON | 按通道配置 | 网关同时服务本地客户端和远程云平台 |