OPC UA:极限是多少个变量?


标题是一个很容易回答的常见问题:“没有固定的限制”。

然而,有多种可能性可以降低 OPC UA 服务器的性能需求,从而减轻控制器的负载。本文忽略硬件的影响。

所有值均指在线模式。不检查通过客户端登录或浏览数据点期间的负载峰值。

使用 Raspberry Pi 3 作为控制器,Unified Automation UaExpert 作为客户端。 测试项目创建了具有 1000 个 UDINT 类型变量的 POU。 可以在变量处打开或关闭值更改:

图1

然后可以根据需要经常复制此 POU,使用 10,000 个“准备好的”变量。

使用 PLC_PRG 的代码调用复制的 POU 。

图2

简单地提供数据点对 CPU 负载没有负面影响,因为数据未被使用。

但是,编译过程需要更长的时间。

在测试项目中,CPU 的负载约为 8%,此时 CODESYS IDE 的监控一直处于活动状态。

图3

客户端一连接,负载就会增加到 ~9%,这是基本负载。

图4

值的变化

当客户端激活前 1000 个数据点时,负载增加到 ~17%。

图5

当我们启动计数器时,我们有一个恒定的变量值变化。 这会将负载增加到 ~23%。

图6

数据点数量递增的测量结果总结如下表:

数据点数 订阅的数据点没有值的变化 订阅的数据点值发生变化
0 ~10%(基本负载) ~10%(基本负载)
1000 ~17% ~23%
2000 ~25% ~25%
3000 ~30% ~45%
4000 ~36% ~55%
5000 ~41% ~67%

第一个结论可以得出如下:

CPU 负载以及变量的数量取决于值更改的数量。 采样率也可以由此推导出来。

采样率

以上测量结果是 OPCUA 客户端默认设置刷新率 500 毫秒记录的。

客户端较慢的刷新率实际上对许多值和参数没有影响。

这里以室温或预设值/设定值,例如 PID 控制器的参数为例。

从上表中最坏的情况开始,现在不断降低采样率,而其他的保持不变:

采样率/数据点数 0 1000 2000 3000 4000 5000
1000 ~67% ~65% ~64% ~62% ~60% ~59%
2000 ~67% ~64% ~62% ~59% ~58% ~56%
5000 ~67% ~64% ~61% ~59% ~56% ~54%

1000 个变量的混合运算,每个变量的采样率为 500、1000、2000、3000 和 4000 毫秒,导致 CPU 负载约为 59%。

第二个结论可以得出如下:

还可以通过将变量分成具有不同刷新率的组来减少 CPU 负载。

将数据点组合成一个数组

项目的变量不仅可以通过 OPCUA 客户端组合成基于时间的组,还可以根据控制器上的数据类型组合。

出于演示目的,将程序进行了一些扩展:

图7

同样,这一次,在值被更改和不被更改的情况下记录这些值。

同样,采样率为 500 毫秒。

图8

数据点数 值没有变化 值发生变化
1000 ~10% ~11%
2000 ~10% ~12%
3000 ~11% ~13%
4000 ~11% ~14%
5000 ~12% ~14%

即使将不同组/数组中的数据点组合意味着实际项目中的更多工作量,也应该为更大的工厂进行这种投资。

请注意,所有测试都是在仅连接一个客户端的情况下执行的。 当然,每增加一个客户端也会增加 CPU 负载。 这是两个连接的 OPCUA 客户端的第一次测量(1000 个具有值变化的独立变量):

图9