From b04b9e920546a97456b903286df6214664f982f2 Mon Sep 17 00:00:00 2001 From: gitea Date: Thu, 30 May 2024 16:24:54 +0800 Subject: [PATCH] =?UTF-8?q?v0.1.1(2024/05/30)=201.=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=A3=80=E6=B5=8B=E5=8A=9F=E8=83=BD=202.=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=97=A0=E6=95=88=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E5=8A=A8=E4=BD=9C=203.=20textbox=E5=8F=AA?= =?UTF-8?q?=E5=9C=A8=E5=BC=80=E5=A7=8B=E5=92=8C=E7=BB=93=E6=9D=9F=E6=97=B6?= =?UTF-8?q?=E6=94=B9=E5=8F=98=E7=8A=B6=E6=80=81=EF=BC=8C=E8=80=8C=E4=B8=8D?= =?UTF-8?q?=E6=98=AF=E6=AF=8F=E6=AC=A1=E5=86=99=E5=85=A5=E9=83=BD=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=204.=20=E8=B0=83=E6=95=B4=E4=BA=86brake=E7=9A=84?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rokae/aio/aio.py | 41 +++++++++++++++++++++++---------- rokae/aio/file_version_info.txt | 10 ++++---- rokae/aio/readme.txt | 28 +++++++++++++--------- rokae/aio/vers | 1 + 4 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 rokae/aio/vers diff --git a/rokae/aio/aio.py b/rokae/aio/aio.py index 32a0ea3..decad7a 100644 --- a/rokae/aio/aio.py +++ b/rokae/aio/aio.py @@ -6,11 +6,14 @@ import customtkinter import brake import current from time import time, strftime, localtime +from urllib.request import urlopen +import socket customtkinter.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light" customtkinter.set_default_color_theme("blue") # Themes: "blue" (standard), "green", "dark-blue" customtkinter.set_widget_scaling(1.1) # widget dimensions and text size customtkinter.set_window_scaling(1.1) # window geometry dimensions +socket.setdefaulttimeout(10) class App(customtkinter.CTk): @@ -53,71 +56,85 @@ class App(customtkinter.CTk): self.btn_end = customtkinter.CTkButton(self.frame_func, corner_radius=10, text='结束运行', font=self.my_font, command=lambda: self.thread_it(self.func_end_call_back)) self.btn_end.grid(row=4, column=0, sticky='new', padx=10, pady=10, ipadx=5, ipady=5) # create version info - self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.1.0\nDate: 05/29/2024", font=self.my_font, text_color="DarkCyan") + self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.1.1\nDate: 05/30/2024", font=self.my_font, text_color="DarkCyan") self.frame_func.rowconfigure(6, weight=1) self.label_version.grid(row=6, column=0, padx=20, pady=20, sticky='s') # ===================================================================== + # create frame self.frame_param = customtkinter.CTkFrame(self, height=240, corner_radius=10) self.frame_param.grid(row=0, column=1, rowspan=3, columnspan=9, sticky='new', ipadx=20, ipady=10, padx=10, pady=10) - # create option menu - main function + # create main menu self.menu_main = customtkinter.CTkOptionMenu(self.frame_param, values=["INIT", "brake", "current"], font=self.my_font, command=self.func_main_callback) self.menu_main.grid(row=0, column=1, sticky='we', padx=(20, 10), pady=(10, 0)) self.menu_main.set("Start Here!") - + # create sub menu self.menu_sub = customtkinter.CTkOptionMenu(self.frame_param) - + # create path related self.label_path = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="Path", font=self.my_font) self.label_path.grid(row=0, column=2, sticky='e', pady=(10, 5)) self.entry_path = customtkinter.CTkEntry(self.frame_param, width=680, placeholder_text="数据文件夹路径", font=self.my_font) self.entry_path.grid(row=0, column=3, columnspan=7, padx=(5, 10), pady=(10, 5), sticky='we') self.entry_path.configure(state='disabled') - + # create av related self.label_av = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="AV", font=self.my_font) self.label_av.grid(row=1, column=2, sticky='e', pady=(5, 5)) self.entry_av = customtkinter.CTkEntry(self.frame_param, width=self.w_param, placeholder_text=f"角速度", font=self.my_font) self.entry_av.grid(row=1, column=3, padx=(5, 20), pady=(5, 5), sticky='w') self.entry_av.configure(state='disabled') - + # create rc related self.label_rc = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="RC", font=self.my_font) self.label_rc.grid(row=1, column=4, sticky='e', pady=(5, 5)) self.entry_rc = customtkinter.CTkEntry(self.frame_param, width=self.w_param, placeholder_text=f"额定电流", font=self.my_font) self.entry_rc.grid(row=1, column=5, padx=(5, 20), pady=(5, 5), sticky='w') self.entry_rc.configure(state='disabled') - + # create rpm related self.label_rpm = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="RPM", font=self.my_font) self.label_rpm.grid(row=1, column=6, sticky='e', pady=(5, 5)) self.entry_rpm = customtkinter.CTkEntry(self.frame_param, width=self.w_param, placeholder_text=f"额定转速", font=self.my_font) self.entry_rpm.grid(row=1, column=7, padx=(5, 20), pady=(5, 5), sticky='w') self.entry_rpm.configure(state='disabled') - + # create rr related self.label_rr = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="RR", font=self.my_font) self.label_rr.grid(row=1, column=8, sticky='e', pady=(5, 5)) self.entry_rr = customtkinter.CTkEntry(self.frame_param, width=self.w_param, placeholder_text=f"减速比", font=self.my_font) self.entry_rr.grid(row=1, column=9, padx=(5, 20), pady=(5, 5), sticky='w') self.entry_rr.configure(state='disabled') - + # create axis related self.label_axis = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="AXIS", font=self.my_font) self.label_axis.grid(row=2, column=2, sticky='e', pady=(5, 5)) self.option_axis = customtkinter.CTkOptionMenu(self.frame_param, values=["1", "2", "3", "4", "5", "6", "7"], width=self.w_param, font=self.my_font) self.option_axis.grid(row=2, column=3, padx=(5, 20), pady=(5, 5), sticky='w') self.option_axis.configure(state='disabled') - + # create vel related self.label_vel = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="Vel", font=self.my_font) self.label_vel.grid(row=2, column=4, sticky='e', pady=(5, 5)) self.option_vel = customtkinter.CTkOptionMenu(self.frame_param, values=["1", "2", "3", "4", "5", "6", "7"], width=self.w_param, font=self.my_font) self.option_vel.grid(row=2, column=5, padx=(5, 20), pady=(5, 5), sticky='w') self.option_vel.configure(state='disabled') - + # create trq related self.label_trq = customtkinter.CTkLabel(self.frame_param, width=self.w_param//10, text="Trq", font=self.my_font) self.label_trq.grid(row=2, column=6, sticky='e', pady=(5, 5)) self.option_trq = customtkinter.CTkOptionMenu(self.frame_param, values=["1", "2", "3", "4", "5", "6", "7"], width=self.w_param, font=self.my_font) self.option_trq.grid(row=2, column=7, padx=(5, 20), pady=(5, 5), sticky='w') self.option_trq.configure(state='disabled') - # ======================================== + # ===================================================================== + # create textbox self.textbox = customtkinter.CTkTextbox(self, height=640, wrap='none', font=customtkinter.CTkFont(family="consolas", size=14), text_color="blue") self.textbox.grid(row=3, column=1, rowspan=5, columnspan=13, ipadx=10, ipady=10, padx=10, pady=10, sticky='nsew') self.textbox.configure(state='disabled') + # ===================================================================== + # version check + cur_vers = self.label_version.cget("text").replace('\n', ' @ ').replace("Vers: ", '').replace("Date: ", '') + try: + new_vers = urlopen("https://www.rustle.cc/vers").read().decode('utf-8') + print(f"{cur_vers}") + print(f"{new_vers}") + if cur_vers.strip() != new_vers.strip(): + msg = f"""当前版本:{cur_vers}\n更新版本:{new_vers}\n\n请及时更新 https://pan.rustle.cc/s/jRfM""" + tkinter.messagebox.showwarning(title="版本更新", message=msg) + except: + tkinter.messagebox.showwarning(title="版本更新", message="连接服务器失败,无法确认当前是否是最新版本......") def thread_it(self, func, *args): """ 将函数打包进线程 """ diff --git a/rokae/aio/file_version_info.txt b/rokae/aio/file_version_info.txt index 0be361c..008b416 100644 --- a/rokae/aio/file_version_info.txt +++ b/rokae/aio/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, 1, 0, 0), - prodvers=(0, 1, 0, 0), + filevers=(0, 1, 1, 0), + prodvers=(0, 1, 1, 0), # Contains a bitmask that specifies the valid bits 'flags'r mask=0x3f, # Contains a bitmask that specifies the Boolean attributes of the file. @@ -30,13 +30,13 @@ VSVersionInfo( StringTable( '040904b0', [StringStruct('CompanyName', 'Rokae - https://www.rokae.com/'), - StringStruct('FileDescription', 'All in one automatic operating tool'), - StringStruct('FileVersion', '0.1.0 (2024-05-24)'), + StringStruct('FileDescription', 'All in one automatic toolbox'), + StringStruct('FileVersion', '0.1.1 (2024-05-24)'), StringStruct('InternalName', 'AIO.exe'), StringStruct('LegalCopyright', '© 2024-2024 Manford Fan'), StringStruct('OriginalFilename', 'AIO.exe'), StringStruct('ProductName', 'AIO'), - StringStruct('ProductVersion', '0.1.0 (2024-05-29)')]) + StringStruct('ProductVersion', '0.1.1 (2024-05-29)')]) ]), VarFileInfo([VarStruct('Translation', [1033, 1200])]) ] diff --git a/rokae/aio/readme.txt b/rokae/aio/readme.txt index f460f8c..792683b 100644 --- a/rokae/aio/readme.txt +++ b/rokae/aio/readme.txt @@ -13,11 +13,11 @@ https://customtkinter.tomschimansky.com/documentation/packaging pyinstaller --noconfirm --onedir --windowed --add-data "C:/Users/Administrator/AppData/Local/Programs/Python/Python312/Lib/site-packages/customtkinter;customtkinter/" --version-file file_version_info.txt -i .\icon.ico .\aio.py -p .\brake.py - + 注意事项: 1. 数据文件存储存储规则 所谓数据文件,就是我们拍急停的时候,采集到的 .data 文件,正方向拍三次急停,会采集到三个 .data 文件,存储在同一个文件夹内,即每组(三个 .data 文件)文件必须存储在同一个文件夹内,数据文件的命名无要求, - + 2. 文件夹命名规则 虽然对采集到的 .data 文件没有命名要求,但是对于文件夹的命名是有要求的,必须是如下格式: loadXX_speedXX_reachXX 或者 loadXX_reachXX_speedXX @@ -29,9 +29,9 @@ load33_自研_制动性能测试.xlsx load66_自研_制动性能测试.xlsx load100_自研_制动性能测试.xlsx - + !!结果文件可以是没有数据的,也可以是之前有数据的,只要保证第 6 点中的那几个数据准确即可 - + 4. 数据存储的组织结 ..../j1/load100_speed33_reach100 ..../j1/load100_speed66_reach100 @@ -40,28 +40,28 @@ ..../j1/load100_speed33_reach100/2024_05_16_09_18_52.data ..../j1/load100_speed33_reach100/2024_05_16_09_19_52.data ..../j1/load100_speed33_reach100/2024_05_16_09_20_52.data - + ..../j1/load33_自研_制动性能测试.xlsx ..../j1/load66_自研_制动性能测试.xlsx ..../j1/load100_自研_制动性能测试.xlsx - + 5. 文件的打开与关闭 a. 在执行程序之前,需要关闭所有相关 excle 文件 b. 在执行程序之中,不允许打开相关 excle 文件 c. 在执行程序之后,需要逐个打开结果文件,并保存一次 - + 6. 参数一致性检查 执行程序前,需要确定 configs.xlsx 中设定的减速比/最大角速度/额定电流的值是正确的 - + 7. 数据准确性检查 执行完程序之后,需要对结果文件的数据准确性做核对,通过我自己的数据观察,误差基本在10ms以内,也即10个数据点,误差较大的情况可自行调整 - + 8. .data 数据顺序 .data 文件的第一列和第二列必须分别是速度和电流 - + 9. 其他 程序运行主要的耗时集中在打开,保存和关闭结果文件,第一次打开的时候会比较慢,是因为 excel 在做首次公式的计算,保存关闭之后,再打开会比较快一些,另外,如果在运行出错并重复运行程序的时候无响应,或者出现异常,请打开任务管理器,关闭一切和excel相关的进程,重新运行即可 - + RELEASE CHANGES @@ -115,3 +115,9 @@ v0.1.0(2024/05/29) 2. 支持工业机器人制动数据处理(理论上支持,测试数据有问题,待验证) 3. 删除configs.xlsx配置表格,直接在界面配置,新增layout.xlsx文件,存储customtkinter布局 4. 电流尚未支持 + +v0.1.1(2024/05/30) +1. 增加版本检测功能 +2. 修改了无效数据下的动作 +3. textbox只在开始和结束时改变状态,而不是每次写入都更改 +4. 调整了brake的结构 diff --git a/rokae/aio/vers b/rokae/aio/vers new file mode 100644 index 0000000..21d81b6 --- /dev/null +++ b/rokae/aio/vers @@ -0,0 +1 @@ +0.1.1 @ 05/30/2024