OpcUa 客户端如何获取有关服务器配置的信息?像 max-pending-publish-requests 等

How can an OpcUa client get info about server configuration? Like max-pending-publish-requests etc

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

但是我怎么能事先知道服务器只能处理 10 个待处理的发布请求?

连接服务器后,我可以读取一些服务器信息。如 ServerStateCurrentTimeServerProductName,如 ReadExample#readServerStateAndTime 中所示。但是如何获取服务器 MaxPendingPublishRequestsMinSamplingInterval 设置等?

还有Subscription和MonitoredItem是什么关系?我为每个订阅使用了一个 MonitoredItem,现在这似乎是一种糟糕的方法。如果要监控上百个Node,是在一个Subscription里,还是分成多个Subscription?他们应该按 publishingInterval 分组,还是分组的正确逻辑是什么?

欢迎编辑,谢谢。

我会分解你的问题并为你提供答案。

But how can I get servers MaxPendingPublishRequests, MinSamplingInterval settings etc?

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

“Also what is the relation between Subscription and MonitoredItem?”

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

“If you want to monitor hundreds of Nodes, should they be in one Subscription, or divided in more Subscriptions?”

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

Should they be grouped by publishingInterval, or what is the right logic to group them?

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

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

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

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

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

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