第3章:OPC UA协议栈:二进制协议、UA-TCP协议、HTTPS协议与选择策略

各位同学,今天我们来聊聊OPC UA的协议栈。说实话,很多初学者一上来就被这些协议搞晕了——二进制、UA-TCP、HTTPS,到底该用哪个?我刚开始接触OPC UA时也踩过不少坑,今天就把我的经验分享给大家。

3.1 OPC UA二进制协议

二进制协议,说白了就是OPC UA最底层的通信方式。它直接把数据编码成二进制流,效率极高。我在一个工厂自动化项目中用过它,当时现场有2000多个数据点需要实时采集,每秒刷新一次。用二进制协议,CPU占用率才15%左右。

它的核心特点:

  • 编码效率高:数据包体积小,比JSON小5-10倍
  • 解析速度快:不需要复杂的文本解析,直接内存映射
  • 适合实时场景:延迟通常在毫秒级

但要注意,二进制协议是OPC UA的私有格式,不是标准HTTP。所以它不能直接穿透企业防火墙。嗯,这里有个坑——我曾经在一个项目中,客户IT部门死活不让开非标准端口,最后只能改用HTTPS。

核心要点:二进制协议适用于局域网内、对实时性要求高的场景。比如PLC与上位机之间的通信。

3.2 OPC UA UA-TCP协议

UA-TCP协议,你可以把它理解为二进制协议的"运输层"。它定义了如何在TCP连接上传输OPC UA的二进制消息。

我个人习惯把UA-TCP看作一个"信封"——二进制数据是信的内容,UA-TCP是信封,TCP是邮递员。UA-TCP负责:

  • 建立连接(Hello/Acknowledge握手)
  • 消息分片与重组
  • 安全通道管理
  • 心跳保活

我记得有一次调试一个OPC UA网关,客户端总是连不上服务器。抓包一看,UA-TCP的Hello消息里协议版本号写错了。服务器返回了Acknowledge,但版本不匹配,连接直接断开。这种问题,用Wireshark一抓一个准。

调试技巧:用Wireshark的OPC UA解析插件,可以直接看到UA-TCP的握手过程。我曾经靠这个插件解决过不下10个连接问题。

3.3 OPC UA HTTPS协议

HTTPS协议,说白了就是把OPC UA的数据包封装到HTTP/HTTPS里。为什么要这么做?因为企业网络通常只开放80和443端口。

HTTPS协议的特点:

  • 穿透性好:能过防火墙、代理服务器
  • 安全性高:基于TLS加密,证书管理成熟
  • 性能差:比二进制协议慢3-5倍

我曾经在一个跨地域的项目中,总部和工厂之间只能走HTTPS。数据量不大,每秒100个点,延迟在200ms左右,勉强能用。但如果数据量再大,HTTPS的头部开销就受不了了。

避坑指南:我曾经遇到过一个客户,用HTTPS传输大量历史数据,结果网关CPU跑满,内存溢出。后来改成二进制协议,问题立刻解决。记住:HTTPS适合控制指令、配置数据,不适合大批量实时数据。

3.4 协议选择策略

好了,三种协议都讲完了。你可能会问:到底该选哪个?我的经验是,没有最好的协议,只有最合适的协议。

我总结了一个选择矩阵,供你参考:

场景 推荐协议 原因
局域网内实时控制 二进制协议 延迟最低,效率最高
跨网段数据采集 UA-TCP 支持安全通道,性能适中
跨公网/防火墙 HTTPS 穿透性好,安全性高
移动端/Web端访问 HTTPS 浏览器原生支持
高并发数据采集 二进制协议 连接开销小,吞吐量大

我个人习惯的做法是:

  1. 先看网络环境:能不能开自定义端口?能开就用二进制或UA-TCP
  2. 再看数据量:每秒超过1000个点,坚决不用HTTPS
  3. 最后看安全要求:需要证书双向认证?HTTPS最省事

实战建议:如果你在做工业网关,我建议同时支持二进制和HTTPS两种协议。二进制用于内部高速采集,HTTPS用于对外接口。这样既保证了性能,又兼顾了兼容性。

最后说一句,协议选择不是一成不变的。我见过一个项目,刚开始用二进制,后来客户IT要求统一走HTTPS,最后又改回UA-TCP。你想想看,做工业通信,灵活应变才是王道。

好了,这一章就到这里。下一章我们讲OPC UA的安全机制,那可是个重头戏。