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_results 是 DarraUa_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 Mode | linked Mode | 行为 |
|---|---|---|
| REPORTING | SAMPLING | trigger fire 时 linked burst 上报 (典型) |
| REPORTING | DISABLED | linked 完全不上报 |
| SAMPLING | SAMPLING | 都不上报, 无效 |
最佳实践
- 录波场景: trigger 阈值 + REPORTING, linked 高频 + SAMPLING
- trigger 数 ≤ 10
- trigger 和 linked 必须在同一 Subscription
- 退出窗口前主动 Remove
- 释放 out_results 数组
跨语言对照
| C# | Python | Java | C++ | Rust | C |
|---|---|---|---|---|---|
| AddTriggeringLinks | add_triggering_links | addTriggeringLinks | AddTriggeringLinks | add_triggering_links | DarraUa_Subscription_AddTriggeringLinks |