C# 客户端应用程序中的 OPC UA 订阅不会触发事件处理程序

问题描述 投票:0回答:1

我有一个包含一些节点的 FactoryTalk 服务器,我需要监视多个属性值。

我制作了一个可以成功读取和写入数据的客户端,但我无法使订阅工作。

这是订阅配置:

subscription = new Subscription(session.DefaultSubscription)
{
    DisplayName = "Test subscription",
    PublishingEnabled = true,
    PublishingInterval = 500,
    LifetimeCount = 0,
};

我的监控项目:

monitoredItems = nodeAttrs
                .Select(nodeId => new MonitoredItem(subscription.DefaultItem)
                {
                    StartNodeId = nodeId,
                    AttributeId = Attributes.Value,
                    QueueSize = 1,
                    SamplingInterval = 500,
                    MonitoringMode = MonitoringMode.Reporting,
                })
                .ToList();

我为它们分配通知处理程序(我需要这里的协议对象实例,所以我调整了它):

MonitoredItemNotificationEventHandler monitoredItemEventHandler = (monitoredItem, e) => AttributeNotification(monitoredItem, e, protocol);

然后添加事件处理程序:

foreach (var monitoredItem in monitoredItems)
{
    monitoredItem.Notification += monitoredItemEventHandler;
}

我将项目添加到订阅并创建它:

subscription.AddItems(monitoredItems);
session.AddSubscription(subscription);
subscription.Create();

我已通过控制台进行检查,订阅已创建并由服务器分配了一个 ID。我也检查了所有受监控的项目,

CreateMonitoredItems
服务调用成功,并且它们还分配了客户端句柄,
NodeId
的已正确解析,没有错误
StatusCode
s。

我通过名为 UaExpert 的第三方客户端应用程序更改属性。

但是我无法触发通知事件处理程序。

我做错了什么吗? 有人对如何解决/调试这个问题有建议吗?

c# opc-ua opc
1个回答
0
投票

您能同时解决您的问题吗? 我也在同一点上挣扎。另一个用于会话保持活动的事件处理程序工作正常,但对于受监视的项目,似乎没有触发任何通知。

我正在使用 B&R 服务器的模拟,并使用 Softing dataFeed 进行检查。数据显示 dataFeed 中的监控项目工作正常。 我自己写的nodeJS中的另一个客户端也可以工作,只是.NET似乎根本忽略了受监控的项目......

© www.soinside.com 2019 - 2024. All rights reserved.