From b335f61c727296be09fd8b1441077d7b0a2639c7 Mon Sep 17 00:00:00 2001 From: gitea Date: Thu, 23 May 2024 11:23:32 +0800 Subject: [PATCH] =?UTF-8?q?[modify]=20v0.0.3(2024/05/21)=201.=20just=5Fope?= =?UTF-8?q?n=E5=87=BD=E6=95=B0=E6=89=93=E5=BC=80=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E4=BF=A1=E6=81=AF=E4=B8=AD=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=202.=20=E5=88=A0=E9=99=A4global?= =?UTF-8?q?=E5=8F=98=E9=87=8F=EF=BC=8C=E5=87=BD=E6=95=B0=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E4=BC=A0=E5=8F=82=E5=AE=9E=E7=8E=B0=203.=20c?= =?UTF-8?q?onfiguration.xlsx=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0AXIS=E5=B8=B8=E9=87=8F=EF=BC=8C=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E9=82=A3=E4=B8=AA=E8=BD=B4=EF=BC=8C=E5=8F=96=E5=80=BC=E4=B8=BA?= =?UTF-8?q?=20j1/j2/j3/j4/j5/j6/j7=204.=20[bugfix]=20=E5=A2=9E=E5=8A=A0get?= =?UTF-8?q?=5Fthreshold=5Fstep=E5=87=BD=E6=95=B0=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E6=9D=A5=E8=8E=B7=E5=8F=96=E5=9C=A8=E8=AE=A1=E7=AE=97row=5Fsta?= =?UTF-8?q?rt=E6=97=B6=E5=90=88=E9=80=82=E7=9A=84=E9=98=88=E5=80=BC?= =?UTF-8?q?=E5=92=8C=E6=AD=A5=E9=95=BF=EF=BC=8C=E4=B8=BB=E8=A6=81=E6=98=AF?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E4=BA=8C=E8=BD=B4=E6=9C=80=E5=B7=AE?= =?UTF-8?q?=E5=B7=A5=E5=86=B5=E4=B8=8B=EF=BC=8C=E6=9C=80=E5=A4=A7=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=E6=98=AF=E4=B8=AA=E5=B0=96=E7=AB=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A=20=20=20=20=20a.=20load100=5Fspeed100=5Freac?= =?UTF-8?q?hxxx=20=E4=BA=8C=E8=BD=B4=20threshold=20=3D=2050=20step=20=3D?= =?UTF-8?q?=2020=20=20=20=20=20b.=20=E5=85=B6=E4=BB=96=20threshold=20=3D?= =?UTF-8?q?=2050=20step=20=3D=20100=20=20=20=20=20=E5=A6=82=E4=B8=8A?= =?UTF-8?q?=E6=98=AF=E4=B8=80=E4=B8=AA=E6=AF=94=E8=BE=83=E4=BF=9D=E5=AE=88?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E5=AE=9A=EF=BC=8C=E5=9B=A0=E4=B8=BA=E8=AE=BE?= =?UTF-8?q?=E5=AE=9A=E7=9A=84step=E6=AF=94=E8=BE=83=E5=B0=8F=EF=BC=8C?= =?UTF-8?q?=E6=89=BE=E5=88=B0=E7=82=B9=E4=B9=8B=E5=90=8E=E8=A6=81=E5=BE=80?= =?UTF-8?q?=E5=90=8E=E5=BB=B6200=E6=9C=80=E5=A5=BD=205.=20=E5=9C=A8find=5F?= =?UTF-8?q?row=5Fstart=5Fdp=E5=87=BD=E6=95=B0=E4=B8=AD=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=8F=82=E6=95=B0data=5Ffile=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E5=90=8E=E7=BB=AD=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rokae/brake/brake.py | 90 ++++++++++++++++-------------- rokae/brake/configuration.xlsx | Bin 9504 -> 9577 bytes rokae/brake/file_version_info.txt | 8 +-- 3 files changed, 52 insertions(+), 46 deletions(-) diff --git a/rokae/brake/brake.py b/rokae/brake/brake.py index 99eade7..290abf5 100644 --- a/rokae/brake/brake.py +++ b/rokae/brake/brake.py @@ -6,7 +6,7 @@ from win32com.client import DispatchEx from time import time, strftime, localtime, sleep from threading import Thread import pythoncom -import pandas as pd +from pandas import read_csv def just_open(filename): @@ -26,7 +26,7 @@ def just_open(filename): xlbook.close() if xlapp is not None: xlapp.Quit() - print(f"just open 第 {i} 次操作失败,静默三秒钟,重新执行......") + print(f"使用win32com打开【{filename}】文件,第 {i} 次操作失败,静默三秒钟,等待重新执行......") sleep(3) @@ -42,24 +42,44 @@ def traversal_files(path): return dirs, files -def find_row_start(excel_file, ws_data, conditions, AV, RR): +def get_threshold_step(excel_file, AXIS): + conditions = sorted(excel_file.split('\\')[-2].split('_')) + # 只有负载和速度是100%时,才会启用更敏感的step + flg = 1 if conditions[0][-3:] == '100' and conditions[2][-3:] == '100' else 0 + if flg == 1 and AXIS == 'j2': + threshold = 50 + step = 20 + else: + threshold = 50 + step = 100 + + return threshold, step + + +def find_row_start(excel_file, ws_data, conditions, AV, RR, AXIS): ratio = float(conditions[1].removeprefix('speed'))/100 speed_max = AV * ratio * RR / 6 row_max = ws_data.max_row row_start = row_max - 1000 + threshold, step = get_threshold_step(excel_file, AXIS) while row_start > 0: + row_end = row_start - step + if row_end < 2: + msg = f"可能是{excel_file.replace('xlsx', 'data')}, 这个文件数据采集有问题,也有可能是程序步长设定问题......" \ + f"建议重新采集,或者先删除该文件夹,重新运行程序,先手动处理" + warn_pause_exit(msg, 1, 10) _a = ws_data[f"A{row_start}"].value - _b = ws_data[f"A{row_start - 200}"].value - if abs(_a-speed_max) < 50 and abs(_b-speed_max) < 50 and abs(_a - _b) < 70: - row_start -= 200 + _b = ws_data[f"A{row_end}"].value + if abs(_a-speed_max) < threshold and abs(_b-speed_max) < threshold and abs(_a-_b) < threshold: + row_start -= (step + 200) break else: - row_start -= 200 + row_start -= step else: remove(excel_file) - msg = f"{excel_file.replace('xlsx', 'data')}, 这个文件数据有问题,请检查......" + msg = f"可能是{excel_file.replace('xlsx', 'data')},这个文件数据采集有问题,比如采集的时机不对,请检查......" warn_pause_exit(msg, 1, 9) return row_max, row_start @@ -123,17 +143,16 @@ def copy_data_to_excel_file(wb_data, ws_result, row_max, row_start, excel_file, return wb_data, ws_dp -def find_row_start_dp(ws_dp, row_max, row_start, conditions, AV): +def find_row_start_dp(data_file, ws_dp, row_max, row_start, conditions, AV): ratio = float(conditions[1].removeprefix('speed'))/100 av_max = AV * ratio row_max_dp = row_max - row_start + 1 + 1 # title row row_start_dp = row_max_dp - 5 - while row_start_dp > 1: + while row_start_dp > 6: # 处理异常数据:当从数据文件中拷贝的有效数据超过5000时,会触发该代码块 if ws_dp.cell(row=row_start_dp, column=4).value is None: row_start_dp -= 100 continue - _a = float(ws_dp.cell(row=row_start_dp, column=4).value) _b = float(ws_dp.cell(row=row_start_dp - 1, column=4).value) _c = float(ws_dp.cell(row=row_start_dp - 2, column=4).value) @@ -152,10 +171,10 @@ def find_row_start_dp(ws_dp, row_max, row_start, conditions, AV): return row_start_dp -def single_file_process(data_file, wb_result, count, AV, RR, RC): +def single_file_process(data_file, wb_result, count, AV, RR, RC, AXIS): excel_file = data_file.replace('data', 'xlsx') sheet_name = data_file.split('\\')[-1].removesuffix('.data') - df = pd.read_csv(data_file, sep='\t') + df = read_csv(data_file, sep='\t') df.to_excel(excel_file, sheet_name=sheet_name, index=False) conditions = sorted(data_file.split('\\')[-2].split('_')[1:]) @@ -165,11 +184,11 @@ def single_file_process(data_file, wb_result, count, AV, RR, RC): wb_data = load_workbook(excel_file) ws_data = wb_data[sheet_name] - row_max, row_start = find_row_start(excel_file, ws_data, conditions, AV, RR) + row_max, row_start = find_row_start(excel_file, ws_data, conditions, AV, RR, AXIS) copy_data_to_result(ws_data, ws_result, row_max, row_start) wb_data, ws_dp = copy_data_to_excel_file(wb_data, ws_result, row_max, row_start, excel_file, RC, RR) - row_start_dp = find_row_start_dp(ws_dp, row_max, row_start, conditions, AV) + row_start_dp = find_row_start_dp(data_file, ws_dp, row_max, row_start, conditions, AV) ws_result["G2"] = int(row_start_dp) @@ -177,7 +196,7 @@ def single_file_process(data_file, wb_result, count, AV, RR, RC): wb_data.close() -def data_process(result_file, raw_data_dirs, AV, RR, RC): +def data_process(result_file, raw_data_dirs, AV, RR, RC, AXIS): prefix = result_file.split('\\')[-1].split('_')[0] wb_result = load_workbook(result_file) # 打开和关闭结果文件夹十分耗时间 for raw_data_dir in raw_data_dirs: @@ -186,9 +205,9 @@ def data_process(result_file, raw_data_dirs, AV, RR, RC): print(f"[{now}] 正在处理目录【{raw_data_dir}】中的数据......") _, data_files = traversal_files(raw_data_dir) - threads = [Thread(target=single_file_process, args=(data_files[0], wb_result, 1, AV, RR, RC)), - Thread(target=single_file_process, args=(data_files[1], wb_result, 2, AV, RR, RC)), - Thread(target=single_file_process, args=(data_files[2], wb_result, 3, AV, RR, RC))] + threads = [Thread(target=single_file_process, args=(data_files[0], wb_result, 1, AV, RR, RC, AXIS)), + Thread(target=single_file_process, args=(data_files[1], wb_result, 2, AV, RR, RC, AXIS)), + Thread(target=single_file_process, args=(data_files[2], wb_result, 3, AV, RR, RC, AXIS))] [t.start() for t in threads] [t.join() for t in threads] now = strftime('%Y-%m-%d %H:%M:%S', localtime(time())) @@ -203,7 +222,7 @@ def data_process(result_file, raw_data_dirs, AV, RR, RC): def warn_pause_exit(msg, pause_num, exit_num): print(msg + '\n') for i in range(pause_num): - _ = input("Press ENTER to continue......") + _ = input("Press ENTER to continue......\n") exit(exit_num) @@ -257,9 +276,7 @@ def check_files(raw_data_dirs, result_files): print("数据目录合规性检查结束,未发现问题......") -def delete_excel_files(): - global data_dir - raw_data_dirs, _ = traversal_files(data_dir) +def delete_excel_files(raw_data_dirs): for raw_data_dir in raw_data_dirs: _, raw_data_files = traversal_files(raw_data_dir) for raw_data_file in raw_data_files: @@ -271,18 +288,14 @@ def initialization(): time_start = time() # 记录开始时间 try: # read init configurations from config file - wb_conf = load_workbook('./configuration.xlsx') + wb_conf = load_workbook('./configuration.xlsx', read_only=True) ws_conf = wb_conf['conf'] - global data_dir - global AV - global RR - global RC - data_dir = ws_conf.cell(row=2, column=2).value AV = int(ws_conf.cell(row=3, column=2).value) RR = int(ws_conf.cell(row=4, column=2).value) RC = float(ws_conf.cell(row=5, column=2).value) + AXIS = ws_conf.cell(row=6, column=2).value wb_conf.close() raw_data_dirs, result_files = traversal_files(data_dir) @@ -291,7 +304,7 @@ def initialization(): # print(f'数据目录:{raw_data_dirs}') check_files(raw_data_dirs, result_files) - return raw_data_dirs, result_files, time_start, AV, RR, RC + return raw_data_dirs, result_files, time_start, AV, RR, RC, AXIS except Exception as Err: msg = "无法在当前路径下找到【configuration.xlsx】文件,请确认!" @@ -299,7 +312,7 @@ def initialization(): def execution(args): - raw_data_dirs, result_files, time_start, AV, RR, RC = args + raw_data_dirs, result_files, time_start, AV, RR, RC, AXIS = args prefix = [] for raw_data_dir in raw_data_dirs: prefix.append(raw_data_dir.split('\\')[-1].split("_")[0]) @@ -312,16 +325,16 @@ def execution(args): else: now = strftime('%Y-%m-%d %H:%M:%S', localtime(time())) print(f"[{now}] 正在整理结果文件【{result_file}】的数据......") - # data_process(result_file, raw_data_dirs, AV, RR, RC) - threads.append(Thread(target=data_process, args=(result_file, raw_data_dirs, AV, RR, RC))) + # data_process(result_file, raw_data_dirs, AV, RR, RC, AXIS) + threads.append(Thread(target=data_process, args=(result_file, raw_data_dirs, AV, RR, RC, AXIS))) [t.start() for t in threads] [t.join() for t in threads] print("#---------------------------------------------------------") print("全部处理完毕") - delete_excel_files() + delete_excel_files(raw_data_dirs) except Exception as Err: print("程序运行错误,请检查配置文件是否准确设定,以及数据文件组织是否正确!") - delete_excel_files() # 运行结束之后,删除中间临时文件 + delete_excel_files(raw_data_dirs) # 运行结束之后,删除中间临时文件 time_end = time() # 记录结束时间 time_total = time_end - time_start # 计算的时间差为程序的执行时间,单位为秒/s @@ -333,12 +346,5 @@ def main(): execution(initialization()) -# 定义初始参数,数据文件夹路径/最大角速度/减速比/额定电流 -global data_dir # path for data -global AV # AV for Angular velocity -global RR # RR for Angular velocity -global RC # RC for Rated Current - - if __name__ == "__main__": main() diff --git a/rokae/brake/configuration.xlsx b/rokae/brake/configuration.xlsx index 4e67186523f02afbf7546e416a729008062967c3..e4da2ce26756a9d1ebd24459a145c1e3aabfdd6c 100644 GIT binary patch delta 2090 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 V000005daYY2Lu2B10eta005d@sU!dZ diff --git a/rokae/brake/file_version_info.txt b/rokae/brake/file_version_info.txt index 7332828..aac89fe 100644 --- a/rokae/brake/file_version_info.txt +++ b/rokae/brake/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, 0, 1, 5), - prodvers=(0, 0, 1, 5), + filevers=(0, 0, 3, 0), + prodvers=(0, 0, 3, 0), # 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 operating tool'), - StringStruct('FileVersion', '0.0.2 (2024-05-20)'), + StringStruct('FileVersion', '0.0.3 (2024-05-20)'), StringStruct('InternalName', 'AIO.exe'), StringStruct('LegalCopyright', '© 2024-2024 Manford Fan'), StringStruct('OriginalFilename', 'AIO.exe'), StringStruct('ProductName', 'AIO'), - StringStruct('ProductVersion', '0.0.2 (2024-05-20)')]) + StringStruct('ProductVersion', '0.0.3 (2024-05-20)')]) ]), VarFileInfo([VarStruct('Translation', [1033, 1200])]) ]