#!/usr/bin/env python3 import redis import asyncio import tracemalloc from asyncua import Client from datetime import datetime opc_server_url = "opc.tcp://10.71.208.71:8098/TM.LongWallMind.OPCUAServer4.x" # OPC UA服务器的URL redis_ip = '127.0.0.1' tracemalloc.start() point_arr = [f"OPC.电液控.支架集.{num:03d}.立柱压力.后柱压力" for num in range(1, 138)] async def connect_and_read_opcua_data(): ns = 2 result_arr = {} try: async with Client(url=opc_server_url, timeout=1) as client: await client.connect() # node = await client.nodes.root.get_children() # 获取所有子节点 # data_arr = [node.display_name.Text for node in node] for i in range(len(point_arr)): data = point_arr[i] node = f"ns=2;s={data}" tag = await client.get_node(node) value = await tag.read_value() result_arr[data] = value # 异步存储到 Redis 中,需要使用异步的 Redis 客户端库 # aioredis 或者其他异步库 # redis_conn = await aioredis.create_redis_pool(('localhost', 6379)) # await redis_conn.set(str(data), str(value)) # await redis_conn.close() # redis_conn.set(str(data_arr[i]), str(value)) # arr_key = node.split("=") # result_arr[arr_key[2]] = value # result_arr[data] = value # return node return result_arr except TimeoutError: msg = "连接超时,请检查网络、服务器状态和连接参数。" error = { "code": -1, "msg": msg } return error except Exception as e: msg = f"发生其他错误: {e}" error = { "code": -2, "msg": msg } return error if __name__ == '__main__': loop = asyncio.get_event_loop() result = loop.run_until_complete(connect_and_read_opcua_data()) print(result)