跳到主要内容

Subscription 订阅

OpcUaSubscription 是订阅容器, 管理一批 MonitoredItem (MI), 提供 data_changed 事件 (List[Callable]).

SubscriptionOpcUaSubscription 的别名 (OpcUaSubscription = Subscription), 二者等价.

子页跳转

一分钟速览

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 事件.

下一步