创建 Subscription
public OpcUaSubscription createSubscription(double publishingIntervalMs);
前置阅读 / 配套
- 添加 MonitoredItem 请看 添加 MonitoredItem.
- DataChanged 回调字段请看 DataChanged 回调.
参数
| 参数 | 默认 | 说明 |
|---|---|---|
publishingIntervalMs | (无默认, 必填) | 服务端推送数据的最小间隔, 服务端可能 revise (调整) |
例子
try (OpcUaSubscription sub = ua.createSubscription(500.0)) {
System.out.println("Subscription created with id=" + sub.getSubscriptionId());
System.out.println("Actual interval = " + sub.getPublishingIntervalMs() + "ms");
}
多订阅分流
如果一个应用既要 100 ms 高频订阅 (运动数据) 又要 5000 ms 低频订阅 (环境温度), 创建 2 个 Subscription 分流, 不要混在一个里:
try (OpcUaSubscription fast = ua.createSubscription(100);
OpcUaSubscription slow = ua.createSubscription(5000)) {
fast.add("ns=2;s=AxisPosition", null);
slow.add("ns=2;s=AmbientTemperature", null);
Thread.sleep(60_000);
}
每个 Subscription 都是独立的发布节奏, 互不影响.
OpcUaSubscription 公共属性
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 标识 | getSubscriptionId() | int | R | 服务端视角的订阅 ID |
handle() | int | R | C 层句柄 (调试用) | |
getSession() | OpcUaSession | R | 所属 Session | |
| 配置 | getPublishingIntervalMs() | double | R | 实际生效的发布间隔 (revised) |
setPublishingEnabled(boolean) | Enums.StatusCode | W | 启停整条订阅的发布 | |
| MonitoredItems | size() | int | R | 当前 MI 数量 |
getMonitoredNodeIds() | List<String> | R | 当前所有 MI 的 NodeId 快照 |
OpcUaSubscription 公共方法
| 方法 | 说明 |
|---|---|
add(nodeId, Consumer) | 添加单 MI |
add(nodeId, Consumer, AttributeId, samplingMs) | 添加单 MI (全参) |
addMany(nodeIds, Consumer, AttributeId) | 批量添加 |
remove(int handle) | 移除单 MI |
removeByNodeId(String nodeId) | 按 NodeId 移除全部对应 MI |
modify(publishingMs, ...) | 改订阅参数 |
setMonitoringMode(mode, miHandles) | 批量切 mode |
setMode(handle, mode) | 切单 MI mode |
modifyMonitoredItems(requests) | 批量改采样 |
modifyItem(handle, samplingMs, queueSize, discardOldest) | 改单 MI |
republish(seqNo) | 请求重发 |
pump(timeoutMs) | 手动 Publish |
close() | 释放, 服务端 DeleteSubscription |
事件 (Java 风格)
public final List<Consumer<DataChangeEventArgs>> onDataChanged;
详见 DataChanged 回调.