C#开发OPC-UA客户端订阅节点,只有订阅的时候会触发一次,而不是服务器有变化就触发

OrdinaryCoder 2019-11-27 03:23:43
如题,下面上代码

public MonitoredItem CreateMonitoredItem(NodeId nodeId, string displayName)
{

if (m_subscription == null)
{
m_subscription = new Subscription(m_session.DefaultSubscription);
m_subscription.PublishingEnabled = true;
m_subscription.PublishingInterval = 1000;
m_subscription.KeepAliveCount = 10;
m_subscription.LifetimeCount = 10;
m_subscription.MaxNotificationsPerPublish = 1000;
m_subscription.Priority = 100;
m_session.AddSubscription(m_subscription);
m_subscription.Create();
}
// add the new monitored item
MonitoredItem monitoredItem = new MonitoredItem(m_subscription.DefaultItem);
monitoredItem.StartNodeId = nodeId;
monitoredItem.AttributeId = Attributes.Value;
monitoredItem.DisplayName = displayName;
monitoredItem.MonitoringMode = MonitoringMode.Reporting;
monitoredItem.SamplingInterval = 1000;
monitoredItem.QueueSize = 0;
monitoredItem.DiscardOldest = true;
monitoredItem.Handle = nodeId;
monitoredItem.Notification += m_MonitoredItem_Notification;
m_subscription.AddItem(monitoredItem);
m_subscription.ApplyChanges();
if (ServiceResult.IsBad(monitoredItem.Status.Error))
{
string tmpStr = monitoredItem.Status.Error.StatusCode.ToString();
}
return monitoredItem;

}
//订阅回调

protected virtual void m_MonitoredItem_Notification(MonitoredItem monitoreditem, MonitoredItemNotificationEventArgs e)
{
// 这个回调函数只在订阅的时候会触发一次,之后服务器对应节点变化不会触发
int a = 0;

}





前台订阅一个节点textBox4.Text为节点NodeId
[/code]
NodeId nodeId = new NodeId(textBox4.Text);
var item = m_OpcUaClient.CreateMonitoredItem(nodeId,"");
[code=csharp]

请问怎样才能服务器节点一变化,客户端的回调就被触发
...全文
1389 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-11-28
  • 打赏
  • 举报
回复 1
找到原因了 服务器修改节点之后需要函数之后 0.0
OrdinaryCoder 2019-11-28
  • 打赏
  • 举报
回复
引用 1 楼 by_封爱 的回复:
这个好像就跟tcp异步收数据一样.. 收完这次 下次就不收了. 所以你在回调里面 在注册一次Notification是不是就行了?
我试一下 昨天试 好像服务器修改 节点值不对 我注册原程序里自带的节点就能实时更新
glb21 2019-11-27
  • 打赏
  • 举报
回复
类设置成opc回调接口的派生
by_封爱 版主 2019-11-27
  • 打赏
  • 举报
回复
这个好像就跟tcp异步收数据一样.. 收完这次 下次就不收了. 所以你在回调里面 在注册一次Notification是不是就行了?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧