OPC UA 订阅和通知

OPC UA Subscriptions and Notifications

我在使用 ANSI C 堆栈中的 OPC UA 订阅和通知时遇到问题。 OPC UA 第 4 部分,服务说:

5.13.1 Subscription model 5.13.1.1 Description c) NotificationMessages are sent to the Client in response to Publish requests.

怎么发的?我真的很期待某种回调,但似乎没有。它确实说这些是对 'Publish' 请求的响应,但是发布服务调用确认收到通知,它似乎没有请求。此外,那将是轮询,而订阅和监控的全部意义在于不进行轮询。

任何人都可以提供一个示例来显示在 ANSI C 中监视数据值吗?

PublishRequests 在服务器上排队,响应仅在通知准备就绪或需要发送保持活动状态时才 returned(或一堆其他内容,请查看第 4 部分中的状态机描述).

它们确实也包括对先前收到的通知的确认,但想法是不会立即收到响应,并且客户端通常会不断发送 PublishRequests,以便服务器有一个队列准备好 return 订阅需要时通知。

是的,正在轮询。严格来说它不是主动提供的,这有点令人失望,但这就是它的工作原理。

__

编辑:

这不是真正的轮询。它是异常的批量报告,具有QoS保证和后续PublishRequests提供的背压机制。

这是 C# 代码。希望对你有所帮助。

private NotificationMessageReceivedEventHandler
    m_NotificationMessageReceived;

// ...

m_NotificationMessageReceived = 
    new NotificationMessageReceivedEventHandler
       (Subscription_NotificationMessageReceived);
m_subscription.NotificationMessageReceived +=
    Subscription_NotificationMessageReceived;

// ...

private void Subscription_NotificationMessageReceived
    (Subscription subscription,
     NotificationMessageReceivedEventArgs e)
{
    if (e.NotificationMessage.NotificationData == null ||
        e.NotificationMessage.NotificationData.Count == 0)
    {
        LogMessage("{0:HH:mm:ss.fff}: KeepAlive",
                   e.NotificationMessage.PublishTime.ToLocalTime());
    }
}