我正在尝试使用opc ua与服务器和客户端进行通信,它工作得很好,直到我希望我的程序返回值。Im使用OnNotification函数:
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函数。我应该触发事件发生吗?我做错了什么?
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();发布于 2018-05-04 14:15:52
按照这个顺序,它对我来说是有效的:
session.AddSubscription(subscription);
subscription.Create();然后我创建MonitoredItems,然后将它们添加到订阅中,这是您错过的最后一步:
subscription.ApplyChanges();发布于 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);
https://stackoverflow.com/questions/50151922
复制相似问题