跳到主要内容

Triggering Links

概述

OPC UA Part 4 §5.12.5 SetTriggering 把一个 MI 设为 trigger, 触发时把一组 linked MI 一并 burst 上报。典型场景: 阈值触发时回吐窗口数据。

API

方法类别读写说明
sub.addTriggeringLinks(triggerMi, linkedMis)添加联动, 返回每条 link 的 StatusCode 列表
sub.removeTriggeringLinks(triggerMi, linkedMis)移除

代码示例

import com.darra.opcua.*;
import java.util.List;

try (DarraOpcUa ua = new DarraOpcUa("opc.tcp://localhost:4840")) {
ua.connect();
OpcUaSubscription sub = ua.createSubscription(100);

// 1) trigger - Reporting
long trigMi = sub.add("ns=2;s=Temp.High", AttributeId.Value, 200);

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

// 3) 设置联动
List<StatusCode> addRes = sub.addTriggeringLinks(trigMi, List.of(mi1, mi2, mi3));
for (int i = 0; i < addRes.size(); i++)
System.out.println("link[" + i + "] = " + addRes.get(i));

sub.addDataChangedListener(args ->
System.out.printf("[mi=%d] %s%n", args.clientHandle, args.value.value));

// 4) 解除
sub.removeTriggeringLinks(trigMi, List.of(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

下一步