首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPC UA Milo -回调onDataChangeNotification中监控项的集合

OPC UA Milo -回调onDataChangeNotification中监控项的集合
EN

Stack Overflow用户
提问于 2020-01-22 22:50:25
回答 1查看 610关注 0票数 1

我正在用Eclipse Milo OPC-UA项目(https://github.com/eclipse/milo)的SubscriptionExample测试一些东西,发现了一个我不确定是有意为之的行为。我为Milo测试服务器上的两个不同节点创建了两个MonitoredItemCreateRequests (opc.tcp://milo.digitalpetri.com:62541/milo/),并将它们传递给订阅的createMonitoredItems()方法。两个项目的状态代码都正常。由于我希望一次获得两个受监视项目的所有收集的值,因此我向订阅中添加了一个NotificationListener。

代码语言:javascript
复制
NodeId dynNodeId = NodeId.parse("ns=2;s=Dynamic/RandomInt32");
NodeId statNodeId = NodeId.parse("ns=2;s=Dynamic/RandomDouble");

以下是接收数据值的回调方法:

代码语言:javascript
复制
@Override
public void onDataChangeNotification(UaSubscription subscription, List<UaMonitoredItem> monitoredItems, List<DataValue> dataValues, DateTime publishTime) {
        Iterator<UaMonitoredItem> itemIterator = monitoredItems.iterator();
        Iterator<DataValue> dataValueIterator = dataValues.iterator();

        while(itemIterator.hasNext() && dataValueIterator.hasNext()) {
            logger.info("subscription value received: item={}, value={}",
                    itemIterator.next().getReadValueId().getNodeId(), dataValueIterator.next().getValue());
        }
    }

我期望monitoredItems列表按照与dataValues列表相对应的顺序包含具有OPC-UA节点ID的项。通过调试,可以看到两个集合的大小是相等的--这很好。但是回调中所有被监控的项都有相同的节点ID吗?记录的双精度值的节点ID应为: ns=2;s=Dynamic/RandomDouble。

代码语言:javascript
复制
15:32:01.221 [milo-shared-thread-pool-0] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.19167566173987927}
15:32:01.221 [milo-shared-thread-pool-0] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.17914743791503218}
15:32:01.221 [milo-shared-thread-pool-0] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=-1911450762}
15:32:01.221 [milo-shared-thread-pool-0] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=-238565139}
15:32:02.172 [milo-shared-thread-pool-1] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.004420353528696297}
15:32:02.173 [milo-shared-thread-pool-1] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=1391780361}
15:32:03.171 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.5815483661983246}
15:32:03.172 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=560950904}
15:32:04.245 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.18123040450226635}
15:32:04.246 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=521198031}
15:32:05.258 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=0.42193483414925215}
15:32:05.258 [milo-shared-thread-pool-2] INFO  o.e.m.e.client.SubscriptionExample - subscription value received: item=NodeId{ns=2, id=Dynamic/RandomInt32}, value=Variant{value=680732464}

我意识到为每个节点使用单独回调的可能性,但我希望一次性处理所有这些回调。

这种行为是有意为之,还是可能是服务器实现中的一个bug?

编辑:

在调试过程中,我发现回调中的monitoredItems集合包含x倍于相同对象(相同内存地址)的值,但x个dataValues有所不同。

如果我在milo示例中的本地OPC服务器上尝试,行为也是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 06:04:16

在创建项目MonitoringParameters时,您可能在这两个项目中使用了相同的clientHandle值。

如果没有,你可以发布你的整个示例代码吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59862342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档