|
@@ -0,0 +1,71 @@
|
|
|
|
+#!/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, 138)]
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+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": value
|
|
|
|
+ }
|
|
|
|
+ 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)
|
|
|
|
+
|