Subscription 订阅
OpcUaSubscription 是订阅容器, 管理一批 MonitoredItem (MI), 提供 data_changed 事件 (List[Callable]).
Subscription是OpcUaSubscription的别名 (OpcUaSubscription = Subscription), 二者等价.
子页跳转
- 创建订阅请参考 创建 Subscription.
- 添加 / 批量添加 MonitoredItem 请参考 添加 MonitoredItem.
- 改 publishing_interval / lifetime / sampling 请参考 Modify.
- 切 Disabled / Sampling / Reporting 请参考 SetMonitoringMode.
- 请求重发指定 SeqNo 请参考 Republish.
- data_changed 字段与线程模型请参考 data_changed 事件.
- OPC UA 报警 / 事件订阅请参考 事件订阅.
一分钟速览
from darra_opcua import MonitoringMode
# 创建
with ua.create_subscription(publishing_interval_ms=500) as sub:
# 数据变更回调 (list[callable], 多回调时直接 append)
sub.data_changed.append(
lambda e: print(f"{e.node_id} = {e.value_string} ({e.status.name})"))
# 添加 MI
h1 = sub.add_node("ns=2;s=Counter")
h2 = sub.add_node("ns=2;s=Temperature")
# 批量添加
nodes = [f"ns=2;s=T{i}" for i in range(1, 101)]
results = sub.add_many(nodes)
# 改单个 MI 的采样间隔
sub.modify_item(h1, sampling_interval_ms=100)
# 暂停 / 恢复采集
sub.set_mode(h1, MonitoringMode.Disabled)
sub.set_mode(h1, MonitoringMode.Reporting)
# 移除
sub.remove(h1)
# with 退出时自动 dispose (DeleteSubscription)
订阅生命周期事件
from darra_opcua import OpcUaEventCategory
def on_any(e):
if e.category == OpcUaEventCategory.SubscriptionCreated: pass
if e.category == OpcUaEventCategory.MonitoredItemAdded: pass
if e.category == OpcUaEventCategory.SubscriptionLost: pass
ua.events.any.append(on_any)
详见 Session 事件.