跳到主要内容

Triggering Links

概述

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

API

函数类别读写说明
DarraUa_Subscription_AddTriggeringLinks(sub, trigger_mi, linked_mis, n, &out_results)添加, 输出每条 link 的 StatusCode
DarraUa_Subscription_RemoveTriggeringLinks(sub, trigger_mi, linked_mis, n, &out_results)移除

out_resultsDarraUa_StatusCode* 数组, 长度 = n, 调用方 DarraUa_FreeStatusCodes 释放。

代码示例

#include <opcua.h>

DarraUa_Session* ua;
DarraUa_Session_New("opc.tcp://localhost:4840", &ua);
DarraUa_Session_Connect(ua);

DarraUa_Subscription* sub;
DarraUa_Session_CreateSubscription(ua, 100.0, &sub);

// 1) trigger - Reporting
uint32_t trig_mi;
DarraUa_Subscription_Add(sub, "ns=2;s=Temp.High", ATTR_VALUE,
200.0, MM_REPORTING, 1, 1, &trig_mi);

// 2) linked - Sampling, 平时不上报
uint32_t mi1, mi2, mi3;
DarraUa_Subscription_Add(sub, "ns=2;s=Vibration.X", ATTR_VALUE,
50.0, MM_SAMPLING, 10, 1, &mi1);
DarraUa_Subscription_Add(sub, "ns=2;s=Vibration.Y", ATTR_VALUE,
50.0, MM_SAMPLING, 10, 1, &mi2);
DarraUa_Subscription_Add(sub, "ns=2;s=Vibration.Z", ATTR_VALUE,
50.0, MM_SAMPLING, 10, 1, &mi3);

// 3) 设置联动
uint32_t linked[] = { mi1, mi2, mi3 };
DarraUa_StatusCode* add_res = NULL;
DarraUa_Subscription_AddTriggeringLinks(sub, trig_mi, linked, 3, &add_res);
for (size_t i = 0; i < 3; ++i)
printf("link[%zu] = 0x%08X\n", i, add_res[i]);
DarraUa_FreeStatusCodes(add_res);

// 4) 解除
uint32_t to_remove[] = { mi3 };
DarraUa_StatusCode* rm_res = NULL;
DarraUa_Subscription_RemoveTriggeringLinks(sub, trig_mi, to_remove, 1, &rm_res);
DarraUa_FreeStatusCodes(rm_res);

DarraUa_Session_Free(ua);

实现说明

  • 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
  • 释放 out_results 数组

跨语言对照

C#PythonJavaC++RustC
AddTriggeringLinksadd_triggering_linksaddTriggeringLinksAddTriggeringLinksadd_triggering_linksDarraUa_Subscription_AddTriggeringLinks

下一步