#!/usr/bin/env python3 import json import redis import asyncio import tracemalloc from asyncua import Client from datetime import datetime opc_server_url = "opc.tcp://10.71.190.71:8098/TM.LongWallMind.OPCUAServer5.x" # OPC UA服务器的URL redis_ip = '127.0.0.1' tracemalloc.start() # OPC.电液控.支架集.052.立柱压力.后柱压力 point_arr = [f"OPC.电液控.支架集.{num:03d}.立柱压力.后柱压力" for num in range(1, 141)] async def connect_and_read_opcua_data(): ns = 2 result_arr = { "sys_id": "support_2", "sys_name": "工作面支架压力", "data_time": "", "sys_point": { "support": [] } } try: async with Client(url=opc_server_url, timeout=1) as client: await client.connect() for i in range(len(point_arr)): try: data = point_arr[i] node = f"ns={ns};s={data}" tag = client.get_node(node) value = await tag.read_value() res = { "key": data, "name": f"{i}号立柱压力", "unit": "Mpa", "val": round(value, 2) } result_arr["sys_point"]["support"].append(res) finally: continue now = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') result_arr["data_time"] = now json_data = json.dumps(result_arr, indent=4) return json_data 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()) redis_conn = redis.StrictRedis(host=redis_ip, port=6379, decode_responses=True) redis_conn.set("jinjiaqu_support_2", result)