如何过滤掉OPC UA Milo中进入UaMonitor oredItem的事件?

j2cgzkjk  于 2022-09-21  发布在  Eclipse
关注(0)|答案(1)|浏览(221)

我正在尝试写一个基于UaMonitor oredItem及其setValueConsumer(ValueConsumer ValueConsumer)方法的内部应用事件日志。是否可以过滤掉setValueConsumer(ValueConsumer ValueConsumer)方法“初始化”/“首次使用”后,而不是在“初始化”/“第一次使用”过程中进入UaMonitor oredItems的事件?在这种情况下,使用托管数据项托管事件项是一个好的做法吗?

代码例如:

public void subscribeOnComponentsEvent(List list) {

    //....

    //Created in MonitoringMode.Sampling to avoid race condition
    for (UaMonitoredItem item : monitoredItems) {
        allMonitoredItems.add(item);
        item.setValueConsumer((e, vs) -> {
            logger.info("Received from {}", e.getReadValueId().getNodeId());
        });
    }
}

public void setMonitoringMode(MonitoringMode mode) {

    try {
        subscription.setMonitoringMode(mode, allMonitoredItems).get();
    } catch (InterruptedException | ExecutionException e) {
        logger.error(e.getMessage());
    }
}

public static void main(String[] args) {

    //...

    client.subscribeOnComponentsEvent(list);
    client.setMonitoringMode(MonitoringMode.Reporting);
}

代码示例的输出:

[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_open}
[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_closed}
[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_alarm}

当应用程序启动时,此代码立即启动,因此,来自可能已在日志中的监视器的数据将被重写到日志中。

有什么方法可以避免将数据重写到日志中吗?

ctrmrzij

ctrmrzij1#

这段代码不会立即启动或运行,它只会在创建Monitor Item并且服务器发送通知后运行。

相关问题