首页 > 解决方案 > OpcUa 客户端如何获取有关服务器配置的信息?像 max-pending-publish-requests 等

问题描述

我的 MILO OpcUa 客户端运行良好,直到我达到一定数量的订阅 - 10。然后它开始接收Bad_TooManyPublishRequests. 我按照这个答案的建议设置解决了这个问题OpcUaClientConfigBuilder#setMaxPendingPublishRequests = 10;,它又可以正常工作了。

但是我应该如何事先知道,服务器只能处理 10 个待处理的发布请求?

连接到服务器后,我可以读取一些服务器信息。如中所示的ServerStateCurrentTimeServerProductNameReadExample#readServerStateAndTime。但是我怎样才能获得服务器MaxPendingPublishRequestsMinSamplingInterval设置等?

Subscription 和 MonitoredItem 之间的关系是什么?我为每个订阅使用了一个 MonitoredItem,现在这似乎是一种不好的方法。如果要监控数百个节点,它们应该在一个订阅中,还是分成多个订阅?它们应该按 分组publishingInterval,或者分组它们的正确逻辑是什么?

欢迎编辑,谢谢。

标签: javaopc-uamilo

解决方案


我将分解您的问题并为您提供答案。

但是我怎样才能获得服务器 MaxPendingPublishRequests、MinSamplingInterval 设置等?

要读取 的值MinSupportedSamplingRate,您可以使用 OPC UA 的属性读取服务。MinSupportedSamplingRate节点的 nodeId是ns=0;i=2272。使用属性读取服务,您可以读取值属性以获取服务器支持的最小采样间隔。如果您使用的是 GUI 客户端,则可以浏览服务器地址空间以查找其值。它存在于Root->Object->Server->ServerCapabilities->MinSupportedSamplingRate

“那么 Subscription 和 MonitoredItem 之间是什么关系?”</p>

订阅用于向客户端报告通知。订阅有一组由客户端分配给它们的 MonitoredItem。MonitoredItems 生成要由订阅报告给客户端的通知

“如果你想监控数百个节点,它们应该在一个订阅中,还是分成多个订阅?”</p>

一个订阅足以监控数百个节点(甚至更多)。这取决于您的用例。

是否应该按发布间隔对它们进行分组,或者对它们进行分组的正确逻辑是什么?

订阅的发布间隔定义了订阅执行的循环速率。每次执行时,它都会尝试向客户端发送 NotificationMessage。NotificationMessages 包含尚未报告给客户端的通知。

如果以 1ms 的发布间隔创建订阅,则服务器每隔 1ms 发送一条通知消息,可以是

  1. 如果发生任何值更改,则数据更改通知或
  2. 如果没有值更改,则为空通知响应(仅当保持活动间隔已过时)

节点不必按发布间隔参数分组。

以下是您可能有兴趣尝试的其他一些开源实现:

如果您正在寻找更多实践信息,还可以查看以下资源:


推荐阅读