跳到主要内容

Subscription 订阅

darra::opcua::Subscription 是订阅容器, 管理一批 MonitoredItem (MI), 通过 std::function 回调推送 DataValue. Move-only, 析构自动 DeleteSubscription.

子页跳转

一分钟速览

// 创建
auto sub = s.CreateSubscription(/*publishing_interval_ms=*/500.0);

// 添加 MI + 回调 (lambda)
auto h = sub.AddNode("ns=2;s=Counter", [](DataValue const& dv) {
std::cout << dv.Value().AsString() << "\n";
});

// 批量添加
std::vector<std::string> nodes;
for (int i = 1; i <= 100; ++i) nodes.push_back("ns=2;s=T" + std::to_string(i));
auto results = sub.AddMany(nodes, [](DataValue const& dv) {
std::cout << dv.Value().AsString() << "\n";
});

// 改单个 MI 的采样间隔
sub.ModifyItem(h, /*sampling_interval_ms=*/100.0);

// 暂停 / 恢复采集
sub.SetMode(h, MonitoringMode::Disabled);
sub.SetMode(h, MonitoringMode::Reporting);

// 移除
sub.Remove(h);

订阅生命周期事件

s.Events().on_any = [](OpcUaEventEntry const& e) {
if (e.category == OpcUaEventCategory::SubscriptionCreated) { /* ... */ }
if (e.category == OpcUaEventCategory::MonitoredItemAdded) { /* ... */ }
if (e.category == OpcUaEventCategory::SubscriptionLost) { /* ... */ }
};

详见 Session 事件.

下一步