创建 Subscription
def create_subscription(self, publishing_interval_ms: float = 500.0) -> Subscription: ...
前置阅读 / 配套
- 添加 MonitoredItem 请看 添加 MonitoredItem.
- data_changed 字段请看 data_changed 事件.
参数
| 参数 | 默认 | 说明 |
|---|---|---|
publishing_interval_ms | 500.0 | 服务端推送数据的最小间隔, 服务端可能 revise (调整) |
例子
with ua.create_subscription(publishing_interval_ms=500) as sub:
print(f"Subscription created with id={sub.subscription_id}")
print(f"Actual interval = {sub.publishing_interval_ms}ms") # 服务端 revised
多订阅分流
如果一个应用既要 100 ms 高频订阅 (运动数据) 又要 5000 ms 低频订阅 (环境温度), 创建 2 个 Subscription 分流, 不要混在一个里:
with ua.create_subscription(100) as fast, ua.create_subscription(5000) as slow:
fast.add_node("ns=2;s=AxisPosition")
slow.add_node("ns=2;s=AmbientTemperature")
# ...
每个 Subscription 都是独立的发布节奏, 互不影响.
OpcUaSubscription 公共属性
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 标识 | subscription_id | int | R | 服务端视角的订阅 ID |
handle | int | R | C 层句柄 (internal) | |
session | OpcUaSession | R | 所属 Session | |
| 配置 | publishing_interval_ms | float | R | 实际生效的发布间隔 (revised) |
| MonitoredItems | monitored_node_ids | List[str] | R | 当前所有 MI 的 NodeId 快照 |
len(sub) | int | R | MI 数量 (用 Python 内置 len()) | |
| 事件 (List[Callable]) | data_changed | List[Callable[[DataChangeEventArgs], None]] | RW | 数据变更回调列表 |
迭代支持: for mi_handle, node_id in sub: ...
OpcUaSubscription 公共方法
| 方法 | 说明 |
|---|---|
add_node(node_id, callback=None, attribute=Value, sampling_interval_ms=-1) | 添加单 MI |
add_many(node_ids, callback=None, attribute=Value) | 批量添加 |
remove(mi_handle) | 移除单 MI |
remove_by_node_id(node_id) | 按 NodeId 移除全部对应 MI |
set_publishing_enabled(enabled) | 开/关整条订阅的发布 |
modify(publishing_interval_ms, lifetime_count, ...) | 改订阅参数 |
set_monitoring_mode(mode, mi_handles) | 批量切 mode |
set_mode(handle, mode) | 切单个 MI mode |
modify_monitored_items(requests) | 批量改采样 |
modify_item(handle, sampling_interval_ms, queue_size=1, discard_oldest=True) | 改单 MI |
republish(retransmit_sequence_number) | 请求重发 |
dispose() / close() | 释放, 服务端 DeleteSubscription |
事件
sub.data_changed: List[Callable[[DataChangeEventArgs], None]]
详见 data_changed 事件.