jjq_support_2.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. import json
  3. import redis
  4. import asyncio
  5. import tracemalloc
  6. from asyncua import Client
  7. from datetime import datetime
  8. opc_server_url = "opc.tcp://10.71.190.71:8098/TM.LongWallMind.OPCUAServer5.x" # OPC UA服务器的URL
  9. redis_ip = '127.0.0.1'
  10. tracemalloc.start()
  11. # OPC.电液控.支架集.052.立柱压力.后柱压力
  12. point_arr = [f"OPC.电液控.支架集.{num:03d}.立柱压力.后柱压力" for num in range(1, 141)]
  13. async def connect_and_read_opcua_data():
  14. ns = 2
  15. result_arr = {
  16. "sys_id": "support_2",
  17. "sys_name": "工作面支架压力",
  18. "data_time": "",
  19. "sys_point": {
  20. "support": []
  21. }
  22. }
  23. try:
  24. async with Client(url=opc_server_url, timeout=1) as client:
  25. await client.connect()
  26. for i in range(len(point_arr)):
  27. try:
  28. data = point_arr[i]
  29. node = f"ns={ns};s={data}"
  30. tag = client.get_node(node)
  31. value = await tag.read_value()
  32. res = {
  33. "key": data,
  34. "name": f"{i}号立柱压力",
  35. "unit": "Mpa",
  36. "val": round(value, 2)
  37. }
  38. result_arr["sys_point"]["support"].append(res)
  39. finally:
  40. continue
  41. now = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
  42. result_arr["data_time"] = now
  43. json_data = json.dumps(result_arr, indent=4)
  44. return json_data
  45. except TimeoutError:
  46. msg = "连接超时,请检查网络、服务器状态和连接参数。"
  47. error = {
  48. "code": -1,
  49. "msg": msg
  50. }
  51. return error
  52. except Exception as e:
  53. msg = f"发生其他错误: {e}"
  54. error = {
  55. "code": -2,
  56. "msg": msg
  57. }
  58. return error
  59. if __name__ == '__main__':
  60. loop = asyncio.get_event_loop()
  61. result = loop.run_until_complete(connect_and_read_opcua_data())
  62. redis_conn = redis.StrictRedis(host=redis_ip, port=6379, decode_responses=True)
  63. redis_conn.set("jinjiaqu_support_2", result)