创建 Subscription
public OpcUaSubscription CreateSubscription(double publishingIntervalMs = 500.0);
前置阅读 / 配套
- 添加 MonitoredItem 请看 添加 MonitoredItem.
- DataChanged 事件字段请看 DataChanged 事件.
参数
| 参数 | 默认 | 说明 |
|---|---|---|
publishingIntervalMs | 500.0 | 服务端推送数据的最小间隔, 服务端可能 revise (调整) |
例子
using var sub = ua.CreateSubscription(publishingIntervalMs: 500);
Console.WriteLine($"Subscription created with id={sub.SubscriptionId}");
Console.WriteLine($"Actual interval = {sub.PublishingIntervalMs}ms"); // 服务端 revised
多订阅分流
如果一个应用既要 100 ms 高频订阅 (运动数据) 又要 5000 ms 低频订阅 (环境温度), 创建 2 个 Subscription 分流, 不要混在一个里:
using var fast = ua.CreateSubscription(100);
fast.Add("ns=2;s=AxisPosition");
using var slow = ua.CreateSubscription(5000);
slow.Add("ns=2;s=AmbientTemperature");
每个 Subscription 都是独立的发布节奏, 互不影响.
OpcUaSubscription 公共属性
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 标识 | SubscriptionId | uint | R | 服务端视角的订阅 ID |
Handle | uint | R | C 层句柄 (internal) | |
Session | DarraOpcUa | R | 所属 Session | |
| 配置 | PublishingIntervalMs | double | R | 实际生效的发布间隔 (revised) |
PublishingEnabled | StatusCode | W | (set only) 启停整条订阅的发布 (Good=on, Bad=off) | |
| MonitoredItems | MonitoredNodeIds | IReadOnlyList<string> | R | 当前所有 MI 的 NodeId 快照 |
OpcUaSubscription 公共方法
| 方法 | 说明 |
|---|---|
Add(nodeId, attribute = Value, samplingIntervalMs = -1) | 添加单 MI |
AddMany(nodeIds, attribute = Value) | 批量添加 |
Remove(monitoredItemHandle) | 移除单 MI |
RemoveByNodeId(nodeId) | 按 NodeId 移除全部对应 MI |
Modify(publishingInterval, lifetime, keepAlive, ...) | 改订阅参数 |
SetMonitoringMode(mode, miHandles) | 批量切 mode |
SetMode(handle, mode) | 切单个 MI mode |
ModifyMonitoredItems(requests) | 批量改采样 |
ModifyItem(handle, samplingInterval, queueSize, discardOldest) | 改单 MI |
Republish(seqNo) | 请求重发 |
Dispose() | 释放, 服务端 DeleteSubscription |
事件
public event EventHandler<DataChangeEventArgs> DataChanged;
详见 DataChanged 事件.