From 6b6fa1ec71d23e496ee14314a3226b9ff51c9b75 Mon Sep 17 00:00:00 2001 From: gitea Date: Wed, 22 Jan 2025 16:40:29 +0800 Subject: [PATCH] w2tgit add .! --- .gitignore | 1 + code/automatic_test/do_brake.py | 12 ++++++------ code/automatic_test/do_current.py | 4 ++-- code/common/clibs.py | 2 +- code/common/openapi.py | 4 ++-- code/data_process/brake.py | 2 +- code/data_process/current.py | 14 +++++++------- code/data_process/iso.py | 4 ++-- .../__pycache__/create_plot.cpython-312.pyc | Bin 4353 -> 0 bytes .../__pycache__/factory_test.cpython-312.pyc | Bin 17635 -> 0 bytes code/durable_docs/factory_test.py | 2 +- 11 files changed, 23 insertions(+), 22 deletions(-) delete mode 100644 code/durable_docs/__pycache__/create_plot.cpython-312.pyc delete mode 100644 code/durable_docs/__pycache__/factory_test.cpython-312.pyc diff --git a/.gitignore b/.gitignore index b25b9b9..9e02d55 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ package/ code/common/__pycache__/ code/data_process/__pycache__/ code/automatic_test/__pycache__/ +code/durable_docs/__pycache__/ \ No newline at end of file diff --git a/code/automatic_test/do_brake.py b/code/automatic_test/do_brake.py index 5e8c78c..20e110d 100644 --- a/code/automatic_test/do_brake.py +++ b/code/automatic_test/do_brake.py @@ -67,7 +67,7 @@ def initialization(path, sub, data_dirs, data_files, hr, w2t): configs = json.load(f_config) except Exception as Err: clibs.insert_logdb("ERROR", "current", f"get_config: 无法打开 {local_file},获取配置文件参数错误 {Err}") - w2t(f"无法打开 {local_file}", color="red", desc="OpenFileError") + w2t(f"无法打开 {local_file}\n", color="red", desc="OpenFileError") # 最大角速度,额定电流,减速比,额定转速 version = configs["VERSION"] @@ -158,7 +158,7 @@ def run_rl(path, sub, hr, md, config_file, prj_file, result_dirs, avs, w2t): elif pon == "negative": md.write_pon(0) else: - w2t("configs.xlsx 中 Target 页面 B5 单元格填写不正确,检查后重新运行...", "red", "DirectionError") + w2t("configs.xlsx 中 Target 页面 B5 单元格填写不正确,检查后重新运行...\n", "red", "DirectionError") for condition in result_dirs: reach = condition.split("_")[0].removeprefix("reach") @@ -175,7 +175,7 @@ def run_rl(path, sub, hr, md, config_file, prj_file, result_dirs, avs, w2t): for axis in range(1, 4): if not clibs.running: - w2t("后台数据清零完成,现在可以重新运行之前停止的程序。", "red") + w2t("后台数据清零完成,现在可以重新运行之前停止的程序。\n", "red") exit() # for single condition test @@ -239,7 +239,7 @@ def run_rl(path, sub, hr, md, config_file, prj_file, result_dirs, avs, w2t): else: time.sleep(1) if (time.time() - t_start) > 3: - w2t("3s 内未收到机器人的运行信号,需要确认 RL 程序编写正确并正常执行...", "red", "ReadySignalTimeoutError") + w2t("3s 内未收到机器人的运行信号,需要确认 RL 程序编写正确并正常执行...\n", "red", "ReadySignalTimeoutError") # 4. 找出最大速度,传递给RL程序,最后清除相关记录 time.sleep(5) # 消除前 5s 的不稳定数据 change_curve_state(hr, True) @@ -298,7 +298,7 @@ def run_rl(path, sub, hr, md, config_file, prj_file, result_dirs, avs, w2t): else: time.sleep(1) else: - w2t("3s 内未收到机器人的运行信号,需要确认 RL 程序配置正确并正常执行...", "red", "ReadySignalTimeoutError") + w2t("3s 内未收到机器人的运行信号,需要确认 RL 程序配置正确并正常执行...\n", "red", "ReadySignalTimeoutError") time.sleep(5+random.randint(1, 5)) # 排除从其他位姿到零点位姿,再到轴极限位姿的时间 @@ -308,7 +308,7 @@ def run_rl(path, sub, hr, md, config_file, prj_file, result_dirs, avs, w2t): while flag: time.sleep(0.05) if time.time() - start > 20: - w2t("20s 内未触发急停,需排查......", "red", "BrakeTimeoutError") + w2t("20s 内未触发急停,需排查......\n", "red", "BrakeTimeoutError") try: clibs.lock.acquire(True) diff --git a/code/automatic_test/do_current.py b/code/automatic_test/do_current.py index 91911cf..e2cd2d7 100644 --- a/code/automatic_test/do_current.py +++ b/code/automatic_test/do_current.py @@ -174,7 +174,7 @@ def run_rl(path, prj_file, hr, md, sub, w2t): for condition in conditions: if not clibs.running: - w2t("后台数据清零完成,现在可以重新运行之前停止的程序。", "red") + w2t("后台数据清零完成,现在可以重新运行之前停止的程序。\n", "red") exit() number = conditions.index(condition) @@ -211,7 +211,7 @@ def run_rl(path, prj_file, hr, md, sub, w2t): else: time.sleep(1) if (time.time() - t_start) > 3: - w2t("3s 内未收到机器人的运行信号,需要确认RL程序和工具通信是否正常执行...", "red", "ReadySignalTimeoutError") + w2t("3s 内未收到机器人的运行信号,需要确认RL程序和工具通信是否正常执行...\n", "red", "ReadySignalTimeoutError") # 4. 执行采集 time.sleep(10) # 消除前 10s 的不稳定数据 diff --git a/code/common/clibs.py b/code/common/clibs.py index 55b6086..e0f67f0 100644 --- a/code/common/clibs.py +++ b/code/common/clibs.py @@ -9,7 +9,7 @@ def traversal_files(_path, _w2t): # 参数:路径 # 返回值:路径下的文件夹列表 路径下的文件列表 if not os.path.exists(_path): - _w2t(f"数据文件夹{_path}不存在,请确认后重试......", "red", "PathNotExistError") + _w2t(f"数据文件夹{_path}不存在,请确认后重试......\n", "red", "PathNotExistError") else: dirs, files = [], [] for item in os.scandir(_path): diff --git a/code/common/openapi.py b/code/common/openapi.py index e481422..b4f562c 100644 --- a/code/common/openapi.py +++ b/code/common/openapi.py @@ -746,7 +746,7 @@ class HmiRequest(object): req = json.load(f_json) except Exception as Err: clibs.insert_logdb("ERROR", "openapi", f"hr-execution: 暂不支持 {command} 功能,或确认该功能存在... {Err}") - clibs.w2t(f"hr-execution: 暂不支持 {command} 功能,或确认该功能存在... {Err}", "red", "CommandError") + clibs.w2t(f"hr-execution: 暂不支持 {command} 功能,或确认该功能存在... {Err}\n", "red", "CommandError") if p_flag == 0: # for old protocols match command: @@ -2155,7 +2155,7 @@ class PreDos(object): self.__ssh.connect(hostname=self.ip, port=self.port, username=self.username, password=self.password) self.__sftp = self.__ssh.open_sftp() except Exception as Err: - msg = f"predos: SSH 无法连接到 {self.ip}:{self.port},需检查网络连通性或者登录信息是否正确 {Err}" + msg = f"predos: SSH 无法连接到 {self.ip}:{self.port},需检查网络连通性或者登录信息是否正确 {Err}\n" clibs.insert_logdb("ERROR", "openapi", msg) clibs.w2t(msg, "red", f"SSHError: cannot connected to {self.ip}:{self.port}") diff --git a/code/data_process/brake.py b/code/data_process/brake.py index 8e19f53..db65dc6 100644 --- a/code/data_process/brake.py +++ b/code/data_process/brake.py @@ -69,7 +69,7 @@ def get_configs(config_file, w2t): p_dir = config_file.split('/')[-2] if not re.match("^[jJ][123]$", p_dir): - w2t("被处理的根文件夹命名必须是 [Jj][123] 的格式", "red", "DirNameError") + w2t("被处理的根文件夹命名必须是 [Jj][123] 的格式\n", "red", "DirNameError") axis = int(p_dir[-1]) rrs = [abs(_) for _ in configs["TRANSMISSION"]["REDUCTION_RATIO_NUMERATOR"]] # 减速比,rr for reduction ratio diff --git a/code/data_process/current.py b/code/data_process/current.py index 36e4e57..7142fd4 100644 --- a/code/data_process/current.py +++ b/code/data_process/current.py @@ -64,11 +64,11 @@ def current_max(data_files, rts, trq, w2t, insert_logdb): if not cur: continue else: - w2t(f"{axis}轴数据:") + w2t(f"{axis}轴最大转矩数据:") for value in cur: w2t(f"{value:.4f} ") w2t("\n") - w2t("\n【MAX】数据处理完毕......") + w2t("\n【MAX】最大转矩数据处理完毕......\n") insert_logdb("INFO", "current", f"MAX: 获取最大转矩值结束 current_max = {current}") return current @@ -106,11 +106,11 @@ def current_avg(data_files, rts, trqh, w2t, insert_logdb): if not cur: continue else: - w2t(f"{axis}轴数据:") + w2t(f"{axis}轴平均转矩数据:") for value in cur: w2t(f"{value:.4f} ") w2t("\n") - w2t("\n【AVG】数据处理完毕......\n") + w2t("\n【AVG】平均转矩数据处理完毕......\n") insert_logdb("INFO", "current", f"AVG: 获取平均转矩值结束 current_avg = {current}") return current @@ -176,7 +176,7 @@ def find_point(data_file, df, flag, row_s, row_e, threshold, step, end_point, sk insert_logdb("WARNING", "current", f"【lt】{axis} 轴第 {seq} 次查找数据可能有异常,row_s = {row_s}, row_e = {row_e}!") return row_s, row_e else: - w2t(f"{data_file} 数据有误,需要检查,无法找到第 {seq} 个有效点...", "red", "AnchorNotFound") + w2t(f"{data_file} 数据有误,需要检查,无法找到第 {seq} 个有效点...\n", "red", "AnchorNotFound") elif flag == "gt": while row_e > end_point: speed_avg = df.iloc[row_s:row_e].abs().mean() @@ -194,7 +194,7 @@ def find_point(data_file, df, flag, row_s, row_e, threshold, step, end_point, sk insert_logdb("WARNING", "current", f"【gt】{axis} 轴第 {seq} 次查找数据可能有异常,row_s = {row_s}, row_e = {row_e}!") return row_s, row_e else: - w2t(f"{data_file} 数据有误,需要检查,无法找到第 {seq} 个有效点...", "red", "AnchorNotFound") + w2t(f"{data_file} 数据有误,需要检查,无法找到第 {seq} 个有效点...\n", "red", "AnchorNotFound") def get_row_number(threshold, flag, df, row_s, row_e, axis, insert_logdb): @@ -345,7 +345,7 @@ def p_scenario(wb, scenario, vel, trq, sensor, rrs, dur_time, w2t): row_start = 3000 row_end = row_start + int(dur_time/cycle) if row_end > df.index[-1]: - w2t(f"位置超限:{data_file} 共有 {df.index[-1]} 条数据,无法取到第 {row_end} 条数据,需要确认场景周期时间...", "red", "DataOverLimit") + w2t(f"位置超限:{data_file} 共有 {df.index[-1]} 条数据,无法取到第 {row_end} 条数据,需要确认场景周期时间...\n", "red", "DataOverLimit") data, first_c, second_c, third_c, fourth_c = [], vel-1, trq-1, sensor-1, sensor for row in range(row_start, row_end+1): diff --git a/code/data_process/iso.py b/code/data_process/iso.py index 6db2cc5..867999e 100644 --- a/code/data_process/iso.py +++ b/code/data_process/iso.py @@ -147,7 +147,7 @@ def main(): ws.cell(row=i, column=7).value = None except Exception as Err: clibs.insert_logdb("ERROR", "iso", f"main: 无法打开文件 {filename}") - w2t(f"发生错误:{Err}", "red", "FileOpenError") + w2t(f"发生错误:{Err}\n", "red", "FileOpenError") p_files = [] for file in files: @@ -172,7 +172,7 @@ def main(): wb.close() if len(p_files) == 0: - w2t(f"目录 {path} 下没有需要处理的文件,需要确认......", "red") + w2t(f"目录 {path} 下没有需要处理的文件,需要确认......\n", "red") else: os.remove(tmpfile) w2t("------------------------------------------\n") diff --git a/code/durable_docs/__pycache__/create_plot.cpython-312.pyc b/code/durable_docs/__pycache__/create_plot.cpython-312.pyc deleted file mode 100644 index 8840f59a9ba943ad0d2fcc2e0ad9279ac3e8c6cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4353 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 b>!!*G(hzRHt}6I~q|a7OsR*)A?8N^8dVIW+ diff --git a/code/durable_docs/factory_test.py b/code/durable_docs/factory_test.py index de40068..6425998 100644 --- a/code/durable_docs/factory_test.py +++ b/code/durable_docs/factory_test.py @@ -141,7 +141,7 @@ def run_rl(path, params, curves, hr, md, w2t): count = 0 while clibs.running: if not clibs.running: - w2t("后台数据清零完成,现在可以重新运行之前停止的程序。", "red") + w2t("后台数据清零完成,现在可以重新运行之前停止的程序。\n", "red") exit() this_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))