如何解决在 .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()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。