python多节点订阅opcua
时间: 2023-12-08 11:39:32 浏览: 235
以下是Python多节点订阅opcua的示例代码:
```python
from opcua import Client
from opcua import ua
# 定义订阅的节点ID
node_ids = [
"ns=2;i=1",
"ns=2;i=2",
"ns=2;i=3"
]
# 定义订阅的节点名称
node_names = [
"Node1",
"Node2",
"Node3"
]
# 定义订阅的节点数据类型
node_datatypes = [
ua.NodeId(ua.ObjectIds.Int16),
ua.NodeId(ua.ObjectIds.Float),
ua.NodeId(ua.ObjectIds.String)
]
# 定义订阅的节点值变化处理函数
def datachange_notification(node, val, data):
print("Node {} value changed to: {}".format(node, val))
if __name__ == "__main__":
# 创建OPC UA客户端
client = Client("opc.tcp://localhost:4840/freeopcua/server/")
# 连接到OPC UA服务器
client.connect()
# 创建订阅对象
subscription = client.create_subscription(500, datachange_notification)
# 添加订阅的节点
for i in range(len(node_ids)):
node = client.get_node(node_ids[i])
handle = subscription.subscribe_data_change(node, data=node_datatypes[i])
print("Subscribed to node {} with handle {}".format(node_names[i], handle))
# 等待订阅的节点值变化
try:
while True:
pass
finally:
# 取消订阅
subscription.unsubscribe_all()
# 断开连接
client.disconnect()
```
该示例代码中,我们首先定义了三个订阅的节点ID、名称和数据类型,然后定义了一个处理节点值变化的函数。在主函数中,我们创建了一个OPC UA客户端并连接到OPC UA服务器,然后创建了一个订阅对象,并添加了三个订阅的节点。最后,我们等待订阅的节点值变化,直到程序被中断。当节点值发生变化时,处理函数会被调用并输出节点名称和新的节点值。
阅读全文