跳到主要内容

创建 Subscription

def create_subscription(self, publishing_interval_ms: float = 500.0) -> Subscription: ...
前置阅读 / 配套

参数

参数默认说明
publishing_interval_ms500.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_idintR服务端视角的订阅 ID
handleintRC 层句柄 (internal)
sessionOpcUaSessionR所属 Session
配置publishing_interval_msfloatR实际生效的发布间隔 (revised)
MonitoredItemsmonitored_node_idsList[str]R当前所有 MI 的 NodeId 快照
len(sub)intRMI 数量 (用 Python 内置 len())
事件 (List[Callable])data_changedList[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 事件.

下一步