[modify]: 完成了电流处理的基本工作,包括框架搭建和思路整理,重写了max/avg以支持工业数据,新增加了duration的逻辑,中间状态,先保存一下

This commit is contained in:
2024-06-04 08:29:23 +08:00
parent afb862201a
commit 55514abc93
4 changed files with 223 additions and 74 deletions

View File

@ -19,16 +19,17 @@ class App(customtkinter.CTk):
def __init__(self):
super().__init__()
self.my_font = customtkinter.CTkFont(family="Consolas", size=16, weight="bold")
self.w_param = 96
self.w_param = 90
# =====================================================================
# configure window
self.title("AIO - All in one automatic toolbox")
# self.iconbitmap('./icon.ico')
screen_width = self.winfo_screenwidth()
screen_height = self.winfo_screenheight()
width = screen_width - 200
height = screen_height - 200
self.geometry(f"{width}x{height}+{100}+{100}")
# screen_width = self.winfo_screenwidth()
# screen_height = self.winfo_screenheight()
# width = screen_width - 200
# height = screen_height - 200
# self.geometry(f"{width}x{height}+{100}+{100}")
self.geometry("1100x500+100+100")
self.protocol("WM_DELETE_WINDOW", self.func_end_call_back)
self.grid_rowconfigure(3, weight=1)
@ -52,75 +53,81 @@ class App(customtkinter.CTk):
self.btn_log = customtkinter.CTkButton(self.frame_func, corner_radius=10, text='保存日志', font=self.my_font, command=lambda: self.thread_it(self.func_log_callback))
self.btn_log.grid(row=3, column=0, sticky='new', padx=10, pady=10, ipadx=5, ipady=5)
# create start button
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 = customtkinter.CTkButton(self.frame_func, corner_radius=10, text='结束运行', font=self.my_font, command=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.2\nDate: 06/01/2024", font=self.my_font, text_color="DarkCyan")
self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.1.4\nDate: 06/06/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)
self.frame_param.grid(row=0, column=1, rowspan=3, columnspan=11, sticky='new', ipadx=20, ipady=10, padx=10, pady=(10, 5))
# create main menu
self.menu_main = customtkinter.CTkOptionMenu(self.frame_param, values=["INIT", "brake", "current", "iso"], 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.grid(row=0, column=1, sticky='we', padx=(20, 10), pady=(10, 5))
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 = customtkinter.CTkLabel(self.frame_param, 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 = customtkinter.CTkEntry(self.frame_param, width=670, placeholder_text="数据文件夹路径", font=self.my_font)
self.entry_path.grid(row=0, column=3, columnspan=9, 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=1, column=3, padx=(5, 10), 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=1, column=5, padx=(5, 10), 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=1, column=7, padx=(5, 10), 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=1, column=9, padx=(5, 10), pady=(5, 5), sticky='w')
self.entry_rr.configure(state='disabled')
# create duration related
self.label_dur = customtkinter.CTkLabel(self.frame_param, text="Dur", font=self.my_font)
self.label_dur.grid(row=1, column=10, sticky='e', pady=(5, 5))
self.entry_dur = customtkinter.CTkEntry(self.frame_param, width=self.w_param, placeholder_text=f"周期", font=self.my_font)
self.entry_dur.grid(row=1, column=11, padx=(5, 10), pady=(5, 5), sticky='w')
self.entry_dur.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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=2, column=3, padx=(5, 10), 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=2, column=5, padx=(5, 10), 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 = customtkinter.CTkLabel(self.frame_param, 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.grid(row=2, column=7, padx=(5, 10), 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.grid(row=3, column=1, rowspan=5, columnspan=15, ipadx=10, ipady=10, padx=10, pady=(5, 10), sticky='nsew')
self.textbox.configure(state='disabled')
# =====================================================================
# version check
@ -146,6 +153,7 @@ class App(customtkinter.CTk):
self.label_rc.configure(text="RC", text_color="black")
self.label_rpm.configure(text="RPM", text_color="black")
self.label_rr.configure(text="RR", text_color="black")
self.label_dur.configure(text="Dur", text_color="black")
self.label_axis.configure(text="AXIS", text_color="black")
self.label_vel.configure(text="Vel", text_color="black")
self.label_trq.configure(text="Trq", text_color="black")
@ -155,6 +163,7 @@ class App(customtkinter.CTk):
self.entry_rc.configure(placeholder_text="额定电流", state="disabled")
self.entry_rpm.configure(placeholder_text="额定转速", state="disabled")
self.entry_rr.configure(placeholder_text="减速比", state="disabled")
self.entry_dur.configure(placeholder_text="周期", state="disabled")
self.option_axis.configure(state="disabled")
self.option_vel.configure(state="disabled")
self.option_trq.configure(state="disabled")
@ -186,7 +195,7 @@ class App(customtkinter.CTk):
self.option_trq.configure(state="normal")
elif func_name == 'current':
self.menu_sub = customtkinter.CTkOptionMenu(self.frame_param, values=["max", "avg"], font=self.my_font, command=self.func_sub_callback)
self.menu_sub = customtkinter.CTkOptionMenu(self.frame_param, values=["max", "avg", "cycle"], font=self.my_font, command=self.func_sub_callback)
self.menu_sub.grid(row=1, column=1, sticky='we', padx=(20, 10), pady=(5, 5))
self.menu_sub.set("--select--")
@ -211,9 +220,21 @@ class App(customtkinter.CTk):
self.label_rpm.configure(text="RPM", text_color='black')
self.entry_rpm.configure(state="disabled")
elif func_name == "max":
pass
self.label_dur.configure(text="Dur", text_color='black')
self.entry_dur.configure(state="disabled")
self.label_vel.configure(text="Vel", text_color='black')
self.option_vel.configure(state="disabled")
elif func_name == 'avg':
pass
self.label_dur.configure(text="Dur", text_color='black')
self.entry_dur.configure(state="disabled")
self.label_vel.configure(text="Vel", text_color='black')
self.option_vel.configure(state="disabled")
elif func_name == 'cycle':
self.label_dur.configure(text="*Dur", text_color='red')
self.entry_dur.configure(state="normal")
self.label_vel.configure(text="*Vel", text_color='red')
self.option_vel.configure(state="normal")
def write2textbox(self, text, wait=0, exitcode=0):
if wait != 0:
@ -245,47 +266,67 @@ class App(customtkinter.CTk):
sub_func = self.menu_sub.get()
c1 = exists(path)
c2 = av.isdigit()
c3 = rr.isdigit()
c4 = rpm = 1
c5 = sub_func in ['industrial', 'cobot']
c6 = True if vel != trq else False
try:
_a = float(av)
_b = float(rr)
c2 = True
except:
c2 = False
c3 = rpm = 1
c4 = sub_func in ['industrial', 'cobot']
c5 = True if vel != trq else False
if self.menu_sub.get() == 'industrial':
rpm = self.entry_rpm.get().strip('- ')
c4 = rpm.isdigit()
c3 = rpm.isdigit()
elif self.menu_sub.get() == 'cobot':
pass
else:
pass
if c1 and c2 and c3 and c4 and c5 and c6:
return 1, path, int(av), int(rr), int(rpm), int(axis), int(vel), int(trq)
if c1 and c2 and c3 and c4 and c5:
return 1, path, float(av), float(rr), int(rpm), int(axis), int(vel), int(trq)
else:
return 0, 0
# =======================================================
elif func_name == 'current':
path = self.entry_path.get()
rc = self.entry_rc.get()
dur = self.entry_dur.get()
vel = self.option_vel.get()
trq = self.option_trq.get()
sub_func = self.menu_sub.get()
sub = self.menu_sub.get()
c1 = exists(path)
c2 = sub_func in ['max', 'avg', 'cycle']
if sub_func == 'cycle':
c3 = True if vel != trq else False
else:
c3 = 1
try:
_ = float(rc)
c4 = True
except ValueError:
c4 = False
c2 = sub in ['max', 'avg', 'cycle']
if c1 and c2 and c3 and c4:
return 2, path, sub_func, float(rc), int(vel), int(trq)
rcs = rc.split()
for _ in rcs:
try:
_t = float(_)
except:
c3 = False
break
else:
c3 = True
c4 = c5 = True
if sub == 'cycle':
try:
_ = float(dur)
c4 = True
except:
c4 = False
c5 = True if vel != trq else False
if c1 and c2 and c3 and c4 and c5:
rcs = []
for x in rc.split():
rcs.append(float(x))
dur = 0 if sub != 'cycle' else dur
return 2, path, sub, rcs, int(vel), int(trq), float(dur)
else:
return 0, 0
# =======================================================
elif func_name == 'iso':
path = self.entry_path.get()
c1 = exists(path)
@ -297,7 +338,6 @@ class App(customtkinter.CTk):
return 0, 0
def func_start_callback(self):
self.textbox.configure(state='normal')
self.textbox.delete(index1='1.0', index2='end')
@ -308,7 +348,7 @@ class App(customtkinter.CTk):
func_dict[flag](path=args[0], av=args[1], rr=args[2], rpm=args[3], axis=args[4], vel=args[5], trq=args[6], w2t=self.write2textbox)
elif flag == 2:
# tkinter.messagebox.showinfo(title="TBD", message="功能待实现......")
func_dict[flag](path=args[0], sub=args[1], rc=args[2], vel=args[3], trq=args[4], w2t=self.write2textbox)
func_dict[flag](path=args[0], sub=args[1], rc=args[2], vel=args[3], trq=args[4], dur=args[5], w2t=self.write2textbox)
elif flag == 3:
func_dict[flag](path=args[0], w2t=self.write2textbox)
else: