2

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

5.13.1 订阅模型 5.13.1.1 描述 c) NotificationMessages 被发送到客户端以响应发布请求。

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

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

4

2 回答 2

5

PublishRequests 在服务器上排队,只有在通知准备好或需要发送保持活动状态时才返回响应(或一堆其他东西,请检查第 4 部分中的状态机描述)。

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

是的,这是投票。这不是严格意义上的不请自来,这有点令人遗憾,但这就是它的工作方式。

__

编辑:

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

于 2015-04-09T03:11:31.333 回答
0

这是 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());
    }
}
于 2015-06-23T07:27:56.007 回答