第三章 通信协议栈:OPC UA二进制协议、OPC UA UA-TCP协议、HTTPS协议、协议选择策略

各位工程师,咱们今天聊聊OPC UA的通信协议栈。说实话,这可能是整个课程里最容易被忽视、但坑最多的地方。我见过太多项目,选错了协议,最后性能死活上不去,还找不到原因。

OPC UA的协议栈,说白了就是数据怎么打包、怎么传输。它不像HTTP那样只有一种玩法。OPC UA给了你三种选择:二进制协议、UA-TCP协议、HTTPS协议。每种都有自己的脾气。

3.1 OPC UA二进制协议

这是我最常用的协议,也是性能最好的。为什么?因为它紧凑。

二进制协议把数据直接编码成字节流。没有多余的标签,没有冗余的头部。你想想看,一个温度值32.5,用二进制协议可能只占4个字节。换成JSON呢?至少得十几个字节。

核心特点:

  • 编码效率极高,带宽利用率可达90%以上
  • CPU开销小,解析速度快
  • 支持所有OPC UA数据类型
  • 适合实时控制场景

我记得有一次给一个钢铁厂做项目,现场有2000多个数据点,每秒要采集10次。一开始他们用的HTTPS,结果服务器CPU直接飙到80%。换成二进制协议后,CPU降到15%。差距就这么大。

我的建议:如果你的网络带宽有限,或者对实时性要求高,优先选二进制协议。特别是PLC到上位机这种场景,二进制协议几乎是唯一选择。

3.2 OPC UA UA-TCP协议

UA-TCP协议,很多人搞不清楚它和二进制协议的关系。其实很简单:UA-TCP是传输层协议,二进制协议是应用层编码方式。两者是搭档关系。

UA-TCP协议在TCP基础上加了一层自己的头部。这个头部包含了安全信息、序列号、确认机制等。说白了,它让OPC UA的通信更可靠、更安全。

特性 UA-TCP 原生TCP
连接管理 支持会话恢复 不支持
安全机制 内置加密和认证
消息分片 自动处理大消息 需手动处理
心跳检测 支持 需额外实现

嗯,这里要注意一点:UA-TCP协议虽然功能强大,但头部开销比原生TCP大。每个消息会多出几十个字节。对于小数据包来说,这个开销占比不小。

避坑指南:我曾经遇到过一个项目,现场网络延迟很大,他们用了UA-TCP的默认配置,结果频繁超时重连。后来我把超时时间从5秒调到了15秒,问题就解决了。记住,UA-TCP的参数要根据实际网络环境调整。

3.3 HTTPS协议

HTTPS协议,说白了就是把OPC UA数据包塞进HTTP的body里,再用TLS加密。这样做的好处是兼容性好,能穿透大部分防火墙。

但代价也很明显——性能差。HTTP头部本身就大,再加上TLS握手,一个请求的延迟可能比二进制协议高10倍以上。

我个人习惯,只在两种情况下用HTTPS:

  • 需要穿越企业防火墙,且IT部门不允许开其他端口
  • 客户端是浏览器或移动设备,只能用HTTP

其他场景,我建议你慎重。特别是实时控制,HTTPS基本不靠谱。

性能对比(实测数据):

  • 二进制协议:延迟约0.5ms,吞吐量10000 msg/s
  • UA-TCP:延迟约1ms,吞吐量8000 msg/s
  • HTTPS:延迟约10ms,吞吐量2000 msg/s

数据来自我去年做的一个汽车生产线项目,仅供参考。

3.4 协议选择策略

讲了这么多,到底怎么选?我总结了一个简单的决策流程:

  1. 先看网络环境:内网还是外网?延迟多少?带宽多少?
  2. 再看实时性要求:是毫秒级还是秒级?
  3. 最后看客户端类型:是PLC、上位机,还是手机浏览器?

举个例子:

  • PLC到上位机(内网,毫秒级):二进制协议 + UA-TCP
  • 上位机到云平台(外网,秒级):HTTPS
  • 移动端监控(外网,秒级):HTTPS
  • 边缘计算节点(内网,毫秒级):二进制协议 + UA-TCP

我的经验:别在一棵树上吊死。很多项目其实是混合使用的。比如现场设备用二进制协议,网关转成HTTPS上云。这样既保证了实时性,又解决了穿透问题。

最后说一句,协议选择没有银弹。你想想看,每个项目都有自己的特点。我建议你在选型前,先做个简单的性能测试。花半天时间,跑几个场景,数据会告诉你答案。

好了,这一章就到这里。下一章咱们聊聊OPC UA的安全配置,那也是个容易踩坑的地方。