From 7f1e794f4851887035eec825db4f43ba5fa24e22 Mon Sep 17 00:00:00 2001 From: gitea Date: Thu, 26 Sep 2024 17:09:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99socket=E6=89=A7=E8=A1=8C=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA=E8=A3=85?= =?UTF-8?q?=E9=A5=B0=E5=99=A8=EF=BC=8C=E6=AF=8F=E6=AC=A1=E5=8F=91=E9=80=81?= =?UTF-8?q?=E7=9A=84=E8=AF=B7=E6=B1=82=E9=83=BD=E8=A6=81=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=EF=BC=8C=E4=BF=AE=E6=AD=A3=E4=BA=86?= =?UTF-8?q?=E6=9F=A5=E6=89=BEid=E7=9A=84=E9=80=BB=E8=BE=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/openapi.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/code/openapi.py b/code/openapi.py index 4162b84..e06e33a 100644 --- a/code/openapi.py +++ b/code/openapi.py @@ -8,6 +8,8 @@ from time import time, sleep, strftime, localtime from pymodbus.client.tcp import ModbusTcpClient # from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder # from pymodbus.constants import Endian +from functools import wraps +from inspect import getcallargs from paramiko import SSHClient, AutoAddPolicy import clibs @@ -338,7 +340,8 @@ class HmiRequest(object): # 尝试连续三次发送心跳包,确认建联成功 self.__error_code = 0 for i in range(3): - self.execution("controller.heart") + self.execution.__wrapped__(self, "controller.heart") + # self.execution("controller.heart") sleep(clibs.interval/5) if not self.__error_code: self.__is_connected = True @@ -412,12 +415,12 @@ class HmiRequest(object): for _ in range(3): res = find_response(clibs.log_data_debug) if res is not None: - return res["data"] + return res.get("data", f"{msg_id} has no data item") sleep(clibs.interval*2) else: # 尝试在上一次分割的日志中查找,只做一次 - res = find_response("".join([clibs.log_path, listdir(clibs.log_path)[0]])) + res = find_response("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]])) if res is not None: - return res["data"] + return res.get("data", f"{msg_id} has no data item") elif flag == 1: for _ in range(3): res = find_response_xs(clibs.log_data_debug) @@ -425,14 +428,15 @@ class HmiRequest(object): return res sleep(clibs.interval*2) else: - res = find_response_xs("".join([clibs.log_path, listdir(clibs.log_path)[0]])) + res = find_response_xs("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]])) if res is not None: return res self.__sth_wrong(11, f"无法找到请求 {msg_id} 的返回结果") def __msg_storage(self, response, flag=0): # response是解码后的字符串 - clibs.logger.debug(f"{loads(response)}") + if "move.monitor" not in response: + clibs.logger.debug(f"{loads(response)}") messages = self.c_msg if flag == 0 else self.c_msg_xs if "move.monitor" in response: pass @@ -644,6 +648,17 @@ class HmiRequest(object): except Exception as Err: self.__sth_wrong(8, f"错误信息:{Err}") + @staticmethod + def validate_req(func): + @wraps(func) + def wrapper(self, *args, **kwargs): + all_args = getcallargs(func, self, *args, **kwargs) + _id = func(self, *args, **kwargs) + self.get_from_id(_id, flag=all_args["protocol_flag"]) + return _id + return wrapper + + @validate_req def execution(self, command, protocol_flag=0, **kwargs): def log_reqs(request): with open(clibs.log_data_reqs, mode="a", encoding="utf-8") as f_log: @@ -1052,7 +1067,7 @@ class HmiRequest(object): def set_diagnosis_params(self, display_pdo_params: list, frequency: int = 50, version: str = "1.4.1"): # OK """ - 设置诊断功能显示参数 + 设置诊断功能显示参数 [{"name": "hw_joint_vel_feedback", "channel": 0}, ] :param display_pdo_params: 指定要采集的曲线名称,具体可通过 get_diagnosis_params 函数功能获取所有目前已支持的曲线 :param frequency: 采样频率,默认 50ms :param version: xDiagnose的版本号