首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventHandler OPC UA

EventHandler OPC UA
EN

Stack Overflow用户
提问于 2018-05-03 17:47:02
回答 2查看 917关注 0票数 0

我正在尝试使用opc ua与服务器和客户端进行通信,它工作得很好,直到我希望我的程序返回值。Im使用OnNotification函数:

代码语言:javascript
复制
public void OnNotification(MonitoredItem item, MonitoredItemNotificationEventArgs e)
{
   // Debug.Log("Entre aqui");

    foreach (var value in item.DequeueValues())
    {
       // Debug.Log("Entre aqui otra vez");
        //Console.WriteLine("{0}: {1}, {2}, {3}", item.DisplayName, value.Value, value.SourceTimestamp, value.StatusCode);
        Debug.Log("{0}: {1}, {2}, {3}" + item.DisplayName + value.Value + value.SourceTimestamp + value.StatusCode);
        //rotZ = float.Parse(value.Value.ToString());
        //J1.Rotate(0, 0, rotZ);
    }
}

这是我创建监视项并将MonitoredItem EventHandler添加到函数的地方,但我不知道为什么i.Notification的事件从不发生,所以它从不运行OnNotification函数。我应该触发事件发生吗?我做错了什么?

代码语言:javascript
复制
        var filter = new EventFilter();


        var triggeringItemId = new MonitoredItem(subscription.DefaultItem)
        {
            NodeClass = NodeClass.Object,
            StartNodeId = ObjectIds.Server,
            AttributeId = Attributes.EventNotifier,
            MonitoringMode = MonitoringMode.Reporting,
            SamplingInterval = -1,
            QueueSize = 100,
            CacheQueueSize = 100,
            Filter = filter 
        };
        // Log("Step 5 - Add a list of items you wish to monitor to the subscription.");
        var list = new List<MonitoredItem> {
            triggeringItemId,
            /*
            monitoredItem,
            monitoredItem2
            */
        };

        list.ForEach(i => i.Notification += OnNotification);

        Debug.Log(list);

        subscription.AddItems(list);

        // Log("Step 6 - Add the subscription to the session.");
        session.AddSubscription(subscription);
        subscription.Create();
EN

回答 2

Stack Overflow用户

发布于 2018-05-04 14:15:52

按照这个顺序,它对我来说是有效的:

代码语言:javascript
复制
session.AddSubscription(subscription);
subscription.Create();

然后我创建MonitoredItems,然后将它们添加到订阅中,这是您错过的最后一步:

代码语言:javascript
复制
subscription.ApplyChanges();
票数 0
EN

Stack Overflow用户

发布于 2018-05-05 00:27:59

尝试向EventFilter添加一些“Select”子句。以下列表与基本事件类型相对应。AlarmCondition类型提供了更多的字段。

var filter =新的EventFilter();

filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.EventType);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.SourceName);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.SourceName);filter.AddSelectClause(ObjectTypes.BaseEventType,filter.AddSelectClause(ObjectTypes.BaseEventType,);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.EventId);Opc.Ua.BrowseNames.EventType Opc.Ua.BrowseNames.SourceNode);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.Time);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.LocalTime);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.Message);filter.AddSelectClause(ObjectTypes.BaseEventType,Opc.Ua.BrowseNames.Severity);

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

https://stackoverflow.com/questions/50151922

复制
相关文章

相似问题

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