在 .Net Core OPC UA 客户端上使用基于事件的 MonitoredItem 处理 Sinumerik 警报

问题描述

我正在尝试使用基于事件的监控项目来监控 OPC UA 客户端上的警报事件。我订阅了节点:ns=2;s=Sinumerik添加了相应的属性和过滤器。稍后我会在 OnNotification() 方法上处理通知,如下面的代码所示。

var list = new List<MonitoredItem> { new MonitoredItem(_subscription.DefaultItem) {StartNodeId = "ns=2;s=Sinumerik" } };

foreach (MonitoredItem item in list)
{
    item.AttributeId = Attributes.EventNotifier;
    item.MonitoringMode = MonitoringMode.Reporting;
    item.SamplingInterval = -1;
    item.QueueSize = 100;
    item.discardOldest = false;
    EventFilter filter = new EventFilter();
    filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.browseNames.Message);
    filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.browseNames.Severity);
    item.Filter = filter;
    item.Notification += OnNotification;
}

_subscriptions[subscriptionNum].Create();
_subscriptions[subscriptionNum].ApplyChanges();

OnNotification() 方法如下所示:

private void OnNotification(MonitoredItem item,MonitoredItemNotificationEventArgs e)
{
    foreach (var value in item.DequeueValues())
    {
        Console.WriteLine("display Name: " + item.displayName + "Value: " + value.Value);
    }
}

我收到了事件通知,但 MonitoredItem 中没有值。

这是使用 OPC UA 为 Sinumerik 警报监控基于事件的监控项目的正确方法吗?

解决方法

您订阅的是 Events,而不是其他数据属性,因此请尝试使用 item.DequeueEvents()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...