3. OPC UA 通信模型:客户端/服务器架构、发现服务、会话管理、安全模型

OPC UA 采用面向服务的架构(SOA),其通信模型围绕 客户端(Client) 与 服务器(Server) 两个角色展开。服务器负责提供数据、告警、历史数据等地址空间资源;客户端则负责发起连接、读取/写入数据、订阅事件。理解这一模型是构建可靠工业数据采集通道的基础。

3.1 客户端/服务器架构

OPC UA 的通信架构并非简单的点对点连接,而是包含 发现、会话建立、安全握手 三个核心阶段。下图展示了客户端与服务器之间的典型交互流程:

OPC UA 客户端/服务器架构交互流程 OPC UA 客户端/服务器架构交互流程 OPC UA 客户端 (数据消费者) 发现请求 创建会话 数据读写/订阅 OPC UA 服务器 (数据生产者) 发现响应 会话确认 数据推送/响应 双向通信:请求/响应模式
架构要点:
  • 服务器:托管地址空间(AddressSpace),包含所有节点(变量、对象、方法)。
  • 客户端:通过服务调用(Service Call)访问服务器资源,不直接操作底层硬件。
  • 传输层:支持 OPC UA 二进制(UA Binary)和 OPC UA XML(UA XML)两种协议。

3.2 发现服务(Discovery Service)

发现服务允许客户端在不知道服务器具体端点的情况下,找到可用的 OPC UA 服务器及其支持的协议、安全策略。这是工业物联网自动组网的关键环节。

服务名称 功能描述 典型使用场景
FindServers 客户端向已知的发现服务器(LDS)查询可用服务器列表 首次连接时扫描网络中的 OPC UA 设备
GetEndpoints 获取指定服务器的所有端点信息(协议、安全策略、证书要求) 客户端选择匹配的安全模式进行连接
RegisterServer 服务器向发现服务器注册自身信息 服务器启动时自动注册,便于客户端发现
实践建议: 在工业现场,建议部署 本地发现服务器(LDS) 或 全局发现服务器(GDS),统一管理所有 OPC UA 服务器的注册与发现,避免客户端逐个扫描 IP 地址。

3.3 会话管理(Session Management)

会话是客户端与服务器之间逻辑上的持久连接。一个会话对应一个客户端身份,服务器通过会话 ID 跟踪客户端的操作状态。会话管理包含创建、激活、续约和关闭四个阶段。

OPC UA 会话生命周期 OPC UA 会话生命周期 1. 创建会话 CreateSession 2. 激活会话 ActivateSession 3. 续约会话 RenewSession 4. 关闭会话 CloseSession 续约循环(默认超时 30 分钟) 会话超时后服务器自动释放资源,客户端需重新创建 续约操作可重置超时计时器
常见陷阱: 会话创建后必须调用 ActivateSession 才能进行数据操作。部分 SDK 在连接成功后自动完成激活,但手动实现时容易遗漏此步骤,导致后续读写请求被拒绝。

3.4 安全模型(Security Model)

OPC UA 的安全模型是工业物联网的核心保障,涵盖 身份认证、消息签名、加密传输 三个层面。安全模式(SecurityMode)决定了通信的保护等级。

安全模式 签名 加密 适用场景
None 无 无 仅用于测试或隔离网络环境
Sign 有 无 需要验证消息来源,但数据可明文传输
SignAndEncrypt 有 有 生产环境推荐,同时保证完整性和机密性

安全模型还定义了以下关键组件:

  • 应用证书(Application Certificate):每个 OPC UA 应用(客户端/服务器)必须拥有 X.509 证书,用于身份标识。
  • 信任列表(Trust List):服务器维护可信任的客户端证书列表,拒绝未授权连接。
  • 安全策略(SecurityPolicy):指定加密算法(如 AES-256、SHA-256)和密钥长度。
安全最佳实践:
  • 生产环境始终使用 SignAndEncrypt 模式。
  • 定期轮换应用证书,避免使用自签名证书长期有效。
  • 部署 GDS(全局发现服务器)统一管理证书生命周期。

3.5 通信模型总结

下表对比了 OPC UA 通信模型各核心要素的职责与关系:

要素 职责 关键服务/方法
发现服务 定位可用服务器和端点 FindServers, GetEndpoints
会话管理 维护客户端身份与状态 CreateSession, ActivateSession, CloseSession
安全模型 认证、签名、加密 OpenSecureChannel, CloseSecureChannel
地址空间 组织和管理数据节点 Browse, Read, Write, Subscribe