jjq_support_1.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env python3
  2. import redis
  3. import asyncio
  4. import tracemalloc
  5. from asyncua import Client
  6. from datetime import datetime
  7. opc_server_url = "opc.tcp://10.71.208.71:8098/TM.LongWallMind.OPCUAServer4.x" # OPC UA服务器的URL
  8. redis_ip = '127.0.0.1'
  9. tracemalloc.start()
  10. point_arr = [f"OPC.电液控.支架集.{num:03d}.立柱压力.后柱压力" for num in range(1, 138)]
  11. async def connect_and_read_opcua_data():
  12. ns = 2
  13. result_arr = {}
  14. try:
  15. async with Client(url=opc_server_url, timeout=1) as client:
  16. await client.connect()
  17. # node = await client.nodes.root.get_children() # 获取所有子节点
  18. # data_arr = [node.display_name.Text for node in node]
  19. for i in range(len(point_arr)):
  20. data = point_arr[i]
  21. node = f"ns=2;s={data}"
  22. tag = await client.get_node(node)
  23. value = await tag.read_value()
  24. result_arr[data] = value
  25. # 异步存储到 Redis 中,需要使用异步的 Redis 客户端库
  26. # aioredis 或者其他异步库
  27. # redis_conn = await aioredis.create_redis_pool(('localhost', 6379))
  28. # await redis_conn.set(str(data), str(value))
  29. # await redis_conn.close()
  30. # redis_conn.set(str(data_arr[i]), str(value))
  31. # arr_key = node.split("=")
  32. # result_arr[arr_key[2]] = value
  33. # result_arr[data] = value
  34. # return node
  35. return result_arr
  36. except TimeoutError:
  37. msg = "连接超时,请检查网络、服务器状态和连接参数。"
  38. error = {
  39. "code": -1,
  40. "msg": msg
  41. }
  42. return error
  43. except Exception as e:
  44. msg = f"发生其他错误: {e}"
  45. error = {
  46. "code": -2,
  47. "msg": msg
  48. }
  49. return error
  50. if __name__ == '__main__':
  51. loop = asyncio.get_event_loop()
  52. result = loop.run_until_complete(connect_and_read_opcua_data())
  53. print(result)