From 62200a9fe42ee14aa7d454502b760a98aa854870 Mon Sep 17 00:00:00 2001 From: fanmingfu Date: Tue, 11 Mar 2025 15:16:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=90=E4=B9=85=E5=9C=BA=E6=99=AF=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=8C=E5=B0=86=E9=87=87=E9=9B=86=E8=A7=84=E5=88=99?= =?UTF-8?q?=E7=94=B1=E5=9B=BA=E5=AE=9A=E6=97=B6=E9=97=B4=E9=97=B4=E9=9A=94?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=9B=BA=E5=AE=9A=E8=BF=90?= =?UTF-8?q?=E5=8A=A8=E5=8A=A8=E4=BD=9C=E5=91=A8=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/files/projects/NB4h_R580_3G.zip | Bin 27626 -> 28708 bytes assets/files/projects/autotest.xml | 31 +++++++++++++++++---- assets/files/version/file_version_info.txt | 8 +++--- assets/files/version/release_change.md | 9 +++++- assets/files/version/version | 2 +- code/aio.py | 10 ++++--- code/common/openapi.py | 2 +- code/durable_docs/factory_test.py | 21 +++++++++----- readme.md | 13 +++++++-- 9 files changed, 69 insertions(+), 27 deletions(-) diff --git a/assets/files/projects/NB4h_R580_3G.zip b/assets/files/projects/NB4h_R580_3G.zip index aec3b47b15d998b2a90048519b3708565fd94691..a7ee4ae6f794ef09db6462e638ed4913f5dab661 100644 GIT binary patch delta 4444 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 - + @@ -397,7 +397,7 @@ - + @@ -457,7 +457,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -817,7 +817,26 @@ - + + + + + + + + + + + + + + + + + + + + diff --git a/assets/files/version/file_version_info.txt b/assets/files/version/file_version_info.txt index fee9997..aa27a6e 100644 --- a/assets/files/version/file_version_info.txt +++ b/assets/files/version/file_version_info.txt @@ -6,8 +6,8 @@ VSVersionInfo( ffi=FixedFileInfo( # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) # Set not needed items to zero 0. - filevers=(0, 3, 1, 5), - prodvers=(0, 3, 1, 5), + filevers=(0, 3, 1, 6), + prodvers=(0, 3, 1, 6), # Contains a bitmask that specifies the valid bits 'flags'r mask=0x3f, # Contains a bitmask that specifies the Boolean attributes of the file. @@ -31,12 +31,12 @@ VSVersionInfo( '040904b0', [StringStruct('CompanyName', 'Rokae - https://www.rokae.com/'), StringStruct('FileDescription', 'All in one automatic toolbox'), - StringStruct('FileVersion', '0.3.1.5 (2025-03-10)'), + StringStruct('FileVersion', '0.3.1.6 (2025-03-21)'), StringStruct('InternalName', 'AIO.exe'), StringStruct('LegalCopyright', '© 2024-2025 Manford Fan'), StringStruct('OriginalFilename', 'AIO.exe'), StringStruct('ProductName', 'AIO'), - StringStruct('ProductVersion', '0.3.1.5 (2025-03-10)')]) + StringStruct('ProductVersion', '0.3.1.6 (2025-03-21)')]) ]), VarFileInfo([VarStruct('Translation', [1033, 1200])]) ] diff --git a/assets/files/version/release_change.md b/assets/files/version/release_change.md index 5ed4541..8d7e904 100644 --- a/assets/files/version/release_change.md +++ b/assets/files/version/release_change.md @@ -480,4 +480,11 @@ v0.3.1.3(2025/02/12) 1. 修改自动测试(制动)的打开关闭曲线逻辑,开始时打开,完整测试结束时关闭 v0.3.1.3(2025/02/13) -1. 修改自动测试(电机电流)的数据处理方法,从以前的Multiprocessing->threading,因为Intel CPU遇到Multiprocessing会重新打开一个AIO实例 \ No newline at end of file +1. 修改自动测试(电机电流)的数据处理方法,从以前的Multiprocessing->threading,因为Intel CPU遇到Multiprocessing会重新打开一个AIO实例 + +v0.3.1.5(2025/03/10) +1. 因公司网络环境调整,修改服务器校验IP + +v0.3.1.6(2025/03/21) +1. 调整耐久(场景)测试工程,以及相应的数据采集逻辑,将采集规则由固定时间间隔,修改为固定运动动作周期 +> Tips:工程以及寄存器文件均有变动 \ No newline at end of file diff --git a/assets/files/version/version b/assets/files/version/version index a5f4362..245a459 100644 --- a/assets/files/version/version +++ b/assets/files/version/version @@ -1 +1 @@ -0.3.1.5@03/10/2025 \ No newline at end of file +0.3.1.6@03/21/2025 \ No newline at end of file diff --git a/code/aio.py b/code/aio.py index 83edcc5..15603d8 100644 --- a/code/aio.py +++ b/code/aio.py @@ -37,7 +37,7 @@ class App: self.label_pages_logs = ctk.StringVar() self.label_pages_logs.set("-.-.-.-.-.-") self.entry_tips_v = None - self.server_vers = None + self.server_vers = "" self.tv_cols = {1: ["ID", 1], 2: ["time", 160], 3: ["level", 25], 4: ["module", 30], 5: ["content", 700]} self.chk_box_v = ctk.BooleanVar() self.chk_box_v.set(False) @@ -143,12 +143,14 @@ class App: self.label_tips = ctk.CTkLabel(self.frame_status, textvariable=var_tips, compound="left", bg_color="#C9C9C9", font=self.f_status, anchor="e") self.__auth_and_vercheck() if local_vers == self.server_vers: - # if True: image = ctk.CTkImage(Image.open(f"{clibs.PREFIX}/media/updated.png"), size=(16, 16)) var_tips.set(" 当前是最新版本,继续保持! ") self.label_tips.configure(text_color="#0D8A3D", image=image) - else: - if self.server_vers is None: + elif local_vers > self.server_vers: + pass + elif local_vers < self.server_vers: + if self.server_vers == "": + messagebox.showerror(title="错误", message=f"服务器版本校验失败,退出...") return image = ctk.CTkImage(Image.open(f"{clibs.PREFIX}/media/upgrade.png"), size=(16, 16)) var_tips.set(f" {self.server_vers.split('@')[0]}已经发布,尽快更新至最新版本! ") diff --git a/code/common/openapi.py b/code/common/openapi.py index b4f562c..51e3697 100644 --- a/code/common/openapi.py +++ b/code/common/openapi.py @@ -314,7 +314,7 @@ class ModbusRequest(object): result = self.__c.convert_from_registers(registers=results.registers, data_type=self.__c.DATATYPE.FLOAT32, word_order="little") return result - def read_brake_done(self): + def read_capture_start(self): result = self.__c.read_holding_registers(40603, count=1) return result.registers[0] diff --git a/code/durable_docs/factory_test.py b/code/durable_docs/factory_test.py index e4132b3..4d7ba17 100644 --- a/code/durable_docs/factory_test.py +++ b/code/durable_docs/factory_test.py @@ -4,7 +4,6 @@ import time import pandas import math import csv -import numpy from common import clibs @@ -122,12 +121,12 @@ def run_rl(path, params, curves, hr, md, w2t): while True: scenario_time = float(f"{float(md.read_scenario_time()):.2f}") if scenario_time != 0: - w2t(f"耐久工程的周期时间:{scenario_time}s | 单轮次执行时间:{scenario_time+interval}\n") + w2t(f"耐久工程的周期时间:{scenario_time}s | 单轮次执行时间:{scenario_time+interval}~{scenario_time*2+interval}\n") break else: time.sleep(1) - if (time.time() - t_start) > 300: - w2t(f"300s 内未收到耐久工程的周期时间,需要确认RL程序和工具通信交互是否正常执行...\n", "red", "GetScenarioTimeError") + if (time.time() - t_start) > 900: + w2t(f"900s 内未收到耐久工程的周期时间,需要确认RL程序和工具通信交互是否正常执行...\n", "red", "GetScenarioTimeError") # 6. 准备数据保存文件 for curve in curves: @@ -141,11 +140,19 @@ def run_rl(path, params, curves, hr, md, w2t): count = 0 while clibs.running: this_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) - next_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()+scenario_time+interval+1)) - w2t(f"[{this_time}] 当前次数:{count:09d} | 预计下次数据更新时间:{next_time}\n", "#008B8B") + next_time_1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()+scenario_time+interval+1)) + next_time_2 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()+scenario_time+interval+1+scenario_time)) + w2t(f"[{this_time}] 当前次数:{count:09d} | 预计下次数据更新时间:{next_time_1}~{next_time_2}\n", "#008B8B") count += 1 # 固定间隔,更新一次数据,打开曲线,获取周期内电流,关闭曲线 time.sleep(interval) + while True: + capture_start = md.read_capture_start() + if capture_start == 1: + break + else: + time.sleep(0.1) + change_curve_state(hr, curves, True, True) time.sleep(scenario_time) end_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) @@ -194,7 +201,7 @@ def proc_device_servo_trq_feedback(records, params, w2t): for axis in range(6): df = pandas.DataFrame.from_dict({"device_servo_trq_feedback": d_trq[axis]}) - _ = math.sqrt(df.apply(lambda x: numpy.power((rcs[axis] * float(x.iloc[0]) / 1000), 2)).sum() / len(df)) + _ = math.sqrt((df[df.columns[0]] * rcs[axis] / 1000).pow(2).sum() / len(df)) results.append(_) path = "/".join(params["prj_file"].split("/")[:-1]) diff --git a/readme.md b/readme.md index 2b3aff3..689079b 100644 --- a/readme.md +++ b/readme.md @@ -60,7 +60,7 @@ - 原理:使用 xCore socket 协议获取诊断数据,包括速度,力矩等信息,结合 modbus 和外部通信执行急停等动作 - 必要条件: - - RL 工程,参考 `assets/files/projects/`,需要详细阅读对应的注释 + - RL 工程(brake任务),参考 `assets/files/projects/`,需要详细阅读对应的注释 - 需要有一个配置文件,命名为 configs.xlsx - 需要有三个结果文件,命名为 reach33/66/100_xxxxxxxx.xlsx @@ -68,9 +68,15 @@ - 原理:使用 xCore socket 协议获取诊断数据,包括速度,力矩等信息,结合 modbus 和外部通信执行急停等动作 - 必要条件: - - RL 工程,参考 `assets/files/projects/`,需要详细阅读对应的注释 + - RL 工程(current任务),参考 `assets/files/projects/`,需要详细阅读对应的注释 - 需要有一个结果文件,命名为 T_电机电流.xlsx +## 三、耐久测试数据采集 + +- 原理:根据设置的时间间隔,采集相应的场景周期指标数据 +- 必要条件: + - RL 工程(factory任务),参考 `assets/files/projects/`,需要详细阅读对应的注释 + ## 三、注意事项 > **!!仅内网使用!!** @@ -78,10 +84,11 @@ 1. 仅适用于 xCore 2.3.0.7 及以上的版本 2. 仅适配了六轴工业/协作机型,其他机型可能会存在使用上的问题,具体可以找fanmingfu@rokae.com确认 3. 单轴电机电流数据处理,至少需要三个完整周期,使用本工具采集一般不会有问题,主要是针对手动采集命名的数据 -4. 执行制动测试/电机电流采集/耐久测试的时候,执行过程中停止,再次运行需要等待一分钟左右,输出框会有提示 +4. 执行制动测试/电机电流采集/耐久测试的时候,执行过程中停止,需要重新关闭软件再次打开,才能正常使用 5. RL工程/寄存器文件/configs.xlsx文件已更新,需要使用新版,其他使用方法和之前工具一致 6. 基恩士采集数据时,不同轮次(每5次测试)数据时间间隔最好大于 2 倍的周期时间,否则会出现采集的轮数不正确的情况,但数据是完整的 7. 激光数据处理只支持英文版本的数据文件 +8. 耐久(场景)指标数据采集的工程运行周期需要小于 300s,否则会出现异常 > **需要使用 assets/files/projects/ 下的工程,寄存器文件以及配置文件等!!!**