1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/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)
|