跳到主要内容

Triggering Links

概述

OPC UA Part 4 §5.12.5 SetTriggering 把一个 MI 设为 trigger, 触发时把一组 linked MI 一并 burst 上报。

API

方法类别读写说明
sub.AddTriggeringLinks(trigger_mi, linked_mis)添加, 返回 vector<StatusCode>
sub.RemoveTriggeringLinks(trigger_mi, linked_mis)移除

代码示例

#include <darra/opcua.h>
using namespace darra::opcua;

DarraOpcUa ua("opc.tcp://localhost:4840");
ua.Connect();
auto sub = ua.CreateSubscription(100);

// 1) trigger - Reporting
auto trig_mi = sub->Add("ns=2;s=Temp.High", AttributeId::Value, 200);

// 2) linked - Sampling, 平时不上报
auto mi1 = sub->Add("ns=2;s=Vibration.X", AttributeId::Value, 50,
MonitoringMode::Sampling, 10, true, nullptr);
auto mi2 = sub->Add("ns=2;s=Vibration.Y", AttributeId::Value, 50,
MonitoringMode::Sampling, 10, true, nullptr);
auto mi3 = sub->Add("ns=2;s=Vibration.Z", AttributeId::Value, 50,
MonitoringMode::Sampling, 10, true, nullptr);

// 3) 设置联动
auto add_res = sub->AddTriggeringLinks(trig_mi, { mi1, mi2, mi3 });
for (size_t i = 0; i < add_res.size(); ++i)
std::cout << "link[" << i << "] = " << add_res[i] << "\n";

sub->OnDataChanged([](const DataChangeEventArgs& e) {
std::cout << "[mi=" << e.client_handle << "] " << e.value.value << "\n";
});

// 4) 解除
sub->RemoveTriggeringLinks(trig_mi, { mi3 });

实现说明

  • Stack 不提供 SetTriggering 时返回每项 BadNotSupported 并推 Diagnostic Warn

与 MonitoringMode 配合

trigger Modelinked Mode行为
ReportingSamplingtrigger fire 时 linked burst 上报 (典型)
ReportingDisabledlinked 完全不上报
SamplingSampling都不上报, 无效

最佳实践

  • 录波场景: trigger 阈值 + Reporting, linked 高频 + Sampling
  • trigger 数 ≤ 10
  • trigger 和 linked 必须在同一 Subscription
  • 退出窗口前主动 Remove

跨语言对照

C#PythonJavaC++RustC
AddTriggeringLinksadd_triggering_linksaddTriggeringLinksAddTriggeringLinksadd_triggering_linksDarraUa_Subscription_AddTriggeringLinks

下一步