我有一个包含一些节点的 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 的第三方客户端应用程序更改属性。
但是我无法触发通知事件处理程序。
我做错了什么吗? 有人对如何解决/调试这个问题有建议吗?
您能同时解决您的问题吗? 我也在同一点上挣扎。另一个用于会话保持活动的事件处理程序工作正常,但对于受监视的项目,似乎没有触发任何通知。
我正在使用 B&R 服务器的模拟,并使用 Softing dataFeed 进行检查。数据显示 dataFeed 中的监控项目工作正常。 我自己写的nodeJS中的另一个客户端也可以工作,只是.NET似乎根本忽略了受监控的项目......