xcore通讯协议完善
This commit is contained in:
parent
6a47310dec
commit
137122947c
17
code/aio.py
17
code/aio.py
@ -76,7 +76,7 @@ class App:
|
|||||||
self.om_sub_at = ctk.CTkOptionMenu(self.tabview_top.tab("自动测试"), width=160, dynamic_resizing=False, values=["tool33", "tool66", "tool100", "inertia"], font=self.f_common, text_color="#3C3C3C", button_color="#7B6B5B", fg_color="#8D8D8D")
|
self.om_sub_at = ctk.CTkOptionMenu(self.tabview_top.tab("自动测试"), width=160, dynamic_resizing=False, values=["tool33", "tool66", "tool100", "inertia"], font=self.f_common, text_color="#3C3C3C", button_color="#7B6B5B", fg_color="#8D8D8D")
|
||||||
self.label_ip_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), anchor="e", text="IP", font=self.f_common)
|
self.label_ip_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), anchor="e", text="IP", font=self.f_common)
|
||||||
self.entry_ip_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=160, textvariable=self.entry_ip_atv, font=self.f_entry, text_color="#818181")
|
self.entry_ip_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=160, textvariable=self.entry_ip_atv, font=self.f_entry, text_color="#818181")
|
||||||
self.btn_conn = ctk.CTkButton(self.tabview_top.tab("自动测试"), text="连接", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0)
|
self.btn_conn = ctk.CTkButton(self.tabview_top.tab("自动测试"), text="连接", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, cursor="hand2")
|
||||||
# self.progressbar_at = ctk.CTkProgressBar(self.tabview_top.tab("自动测试"), width=160, mode="indeterminate")
|
# self.progressbar_at = ctk.CTkProgressBar(self.tabview_top.tab("自动测试"), width=160, mode="indeterminate")
|
||||||
self.label_path_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), width=50, anchor="e", text="Path", font=self.f_common)
|
self.label_path_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), width=50, anchor="e", text="Path", font=self.f_common)
|
||||||
self.entry_path_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=80, state="disabled", textvariable=self.entry_path_atv, font=self.f_entry, text_color="#818181")
|
self.entry_path_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=80, state="disabled", textvariable=self.entry_path_atv, font=self.f_entry, text_color="#818181")
|
||||||
@ -93,12 +93,12 @@ class App:
|
|||||||
# ========================================================================
|
# ========================================================================
|
||||||
self.text_output = ctk.CTkTextbox(self.tabview_bottom.tab("输出"), height=10, corner_radius=0, wrap="none", font=self.f_text)
|
self.text_output = ctk.CTkTextbox(self.tabview_bottom.tab("输出"), height=10, corner_radius=0, wrap="none", font=self.f_text)
|
||||||
# ========================================================================
|
# ========================================================================
|
||||||
self.label_logs = ctk.CTkLabel(self.tabview_bottom.tab("日志"), width=80, font=self.f_pager, textvariable=self.label_pages_logs, text_color="blue", bg_color="#DCDCDC")
|
self.label_logs = ctk.CTkLabel(self.tabview_bottom.tab("日志"), width=80, font=self.f_pager, textvariable=self.label_pages_logs, text_color="blue", bg_color="#DCDCDC", cursor="hand2")
|
||||||
self.btn_previous = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="上一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_previous_log)
|
self.btn_previous = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="上一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_previous_log)
|
||||||
self.btn_realtime = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="实时", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_realtime_log)
|
self.btn_realtime = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="实时", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_realtime_log)
|
||||||
self.btn_next = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="下一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_next_log)
|
self.btn_next = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="下一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_next_log)
|
||||||
self.btn_load = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="加载", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__load_log_db)
|
self.btn_load = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="加载", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__load_log_db)
|
||||||
self.btn_find = ctk.CTkButton(self.tabview_bottom.tab("日志"), text="查找", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0)
|
self.btn_find = ctk.CTkButton(self.tabview_bottom.tab("日志"), text="查找", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, cursor="hand2")
|
||||||
self.entry_keyword = ctk.CTkEntry(self.tabview_bottom.tab("日志"), placeholder_text="[id/level/module] 查找内容", width=60, font=self.f_entry)
|
self.entry_keyword = ctk.CTkEntry(self.tabview_bottom.tab("日志"), placeholder_text="[id/level/module] 查找内容", width=60, font=self.f_entry)
|
||||||
self.treeview_logs = ttk.Treeview(self.tabview_bottom.tab("日志"), height=1, columns=("id", "time", "level", "module", "content"), style="tv.Treeview", show="headings")
|
self.treeview_logs = ttk.Treeview(self.tabview_bottom.tab("日志"), height=1, columns=("id", "time", "level", "module", "content"), style="tv.Treeview", show="headings")
|
||||||
self.y_scrollbar_logs = tk.Scrollbar(self.tabview_bottom.tab("日志"), width=30, command=self.treeview_logs.yview)
|
self.y_scrollbar_logs = tk.Scrollbar(self.tabview_bottom.tab("日志"), width=30, command=self.treeview_logs.yview)
|
||||||
@ -132,6 +132,10 @@ class App:
|
|||||||
# ========================================================================
|
# ========================================================================
|
||||||
self.__draw()
|
self.__draw()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __do_nothing(event):
|
||||||
|
...
|
||||||
|
|
||||||
def __detect_network(self):
|
def __detect_network(self):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
@ -480,6 +484,7 @@ class App:
|
|||||||
self.f_toplevel = ("Consolas", 14, "normal")
|
self.f_toplevel = ("Consolas", 14, "normal")
|
||||||
self.f_status = ("Consolas", 12, "bold")
|
self.f_status = ("Consolas", 12, "bold")
|
||||||
|
|
||||||
|
@clibs.db_lock
|
||||||
def __quit_preparation(self):
|
def __quit_preparation(self):
|
||||||
os.chdir(clibs.log_path)
|
os.chdir(clibs.log_path)
|
||||||
t = datetime.now().strftime("%Y%m%d%H%M%S")
|
t = datetime.now().strftime("%Y%m%d%H%M%S")
|
||||||
@ -868,11 +873,12 @@ class App:
|
|||||||
except Exception as Err:
|
except Exception as Err:
|
||||||
self.btn_conn.configure(state="normal", fg_color="#979DA2")
|
self.btn_conn.configure(state="normal", fg_color="#979DA2")
|
||||||
elif self.btn_conn.cget("fg_color") == "#2E8B57":
|
elif self.btn_conn.cget("fg_color") == "#2E8B57":
|
||||||
|
self.btn_conn.configure(state="disabled")
|
||||||
try:
|
try:
|
||||||
# clibs.c_md.close()
|
# clibs.c_md.close()
|
||||||
clibs.c_hr.close()
|
clibs.c_hr.close()
|
||||||
finally:
|
finally:
|
||||||
self.btn_conn.configure(fg_color="#979DA2")
|
self.btn_conn.configure(state="normal", fg_color="#979DA2")
|
||||||
t = threading.Thread(target=conn_or_disconn)
|
t = threading.Thread(target=conn_or_disconn)
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
@ -937,6 +943,7 @@ class App:
|
|||||||
self.entry_path_at.bind("<Button-1>", select_path)
|
self.entry_path_at.bind("<Button-1>", select_path)
|
||||||
self.entry_ip_at.bind("<Button-3>", show_popupmenu_ip, add="+")
|
self.entry_ip_at.bind("<Button-3>", show_popupmenu_ip, add="+")
|
||||||
self.btn_conn.bind("<Button-1>", conn_change)
|
self.btn_conn.bind("<Button-1>", conn_change)
|
||||||
|
self.btn_conn.bind("<Double-1>", self.__do_nothing, add="+")
|
||||||
# ========================================================================
|
# ========================================================================
|
||||||
self.tabview_bottom.tab("输出").grid_rowconfigure(0, weight=1)
|
self.tabview_bottom.tab("输出").grid_rowconfigure(0, weight=1)
|
||||||
self.tabview_bottom.tab("输出").grid_columnconfigure(0, weight=1)
|
self.tabview_bottom.tab("输出").grid_columnconfigure(0, weight=1)
|
||||||
@ -956,7 +963,7 @@ class App:
|
|||||||
|
|
||||||
self.treeview_logs.configure(yscrollcommand=self.y_scrollbar_logs.set)
|
self.treeview_logs.configure(yscrollcommand=self.y_scrollbar_logs.set)
|
||||||
self.treeview_logs.tag_configure("DEBUG", background="#708090")
|
self.treeview_logs.tag_configure("DEBUG", background="#708090")
|
||||||
self.treeview_logs.tag_configure("INFO", background="#F5F5F5") # #43CD80
|
self.treeview_logs.tag_configure("INFO", background="#D8F9D2") # #43CD80 F5F5F5
|
||||||
self.treeview_logs.tag_configure("WARNING", background="#EEE8AA")
|
self.treeview_logs.tag_configure("WARNING", background="#EEE8AA")
|
||||||
self.treeview_logs.tag_configure("ERROR", background="#CD5C5C")
|
self.treeview_logs.tag_configure("ERROR", background="#CD5C5C")
|
||||||
for k, v in self.tv_cols.items():
|
for k, v in self.tv_cols.items():
|
||||||
|
@ -309,15 +309,25 @@ class HmiRequest(object):
|
|||||||
self.__half_pkg = b""
|
self.__half_pkg = b""
|
||||||
self.__half_pkg_flag = False
|
self.__half_pkg_flag = False
|
||||||
self.__is_first_frame = True
|
self.__is_first_frame = True
|
||||||
self.__is_very_first_frame = True
|
self.__is_debug = True
|
||||||
|
|
||||||
self.__t_heartbeat = None
|
self.__socket_conn()
|
||||||
self.__t_unpackage = None
|
self.__t_heartbeat = Thread(target=self.__heartbeat)
|
||||||
self.__t_unpackage_xs = None
|
self.__t_heartbeat.daemon = True
|
||||||
self.__t_is_alive = Thread(target=self.__is_alive)
|
self.__t_heartbeat.start()
|
||||||
self.__t_is_alive.daemon = True
|
self.__t_unpackage = Thread(target=self.__unpackage, args=(self.__c,))
|
||||||
self.__t_is_alive.start()
|
self.__t_unpackage.daemon = True
|
||||||
time.sleep(3)
|
self.__t_unpackage.start()
|
||||||
|
self.__t_unpackage_xs = Thread(target=self.__unpackage_xs, args=(self.__c_xs,))
|
||||||
|
self.__t_unpackage_xs.daemon = True
|
||||||
|
self.__t_unpackage_xs.start()
|
||||||
|
# self.__t_heartbeat = None
|
||||||
|
# self.__t_unpackage = None
|
||||||
|
# self.__t_unpackage_xs = None
|
||||||
|
# self.__t_is_alive = Thread(target=self.__is_alive)
|
||||||
|
# self.__t_is_alive.daemon = True
|
||||||
|
# self.__t_is_alive.start()
|
||||||
|
# time.sleep(3)
|
||||||
|
|
||||||
def __is_alive(self):
|
def __is_alive(self):
|
||||||
while not self.__close_hmi:
|
while not self.__close_hmi:
|
||||||
@ -341,7 +351,7 @@ class HmiRequest(object):
|
|||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
try:
|
try:
|
||||||
self.__close_hmi = True
|
# self.__close_hmi = True
|
||||||
self.__is_connected = False
|
self.__is_connected = False
|
||||||
time.sleep(clibs.interval*2)
|
time.sleep(clibs.interval*2)
|
||||||
self.__c.close()
|
self.__c.close()
|
||||||
@ -486,42 +496,56 @@ class HmiRequest(object):
|
|||||||
self.__is_first_frame = False
|
self.__is_first_frame = False
|
||||||
elif not self.__is_first_frame: # 不是首帧
|
elif not self.__is_first_frame: # 不是首帧
|
||||||
if self.__leftovers > 0 and self.__valid_data_length > 0:
|
if self.__leftovers > 0 and self.__valid_data_length > 0:
|
||||||
self.__is_first_frame = False
|
if len(data) >= self.__leftovers:
|
||||||
self.__response += data[:self.__leftovers]
|
self.__is_first_frame = False
|
||||||
self.__index = self.__leftovers
|
self.__response += data[:self.__leftovers]
|
||||||
self.__valid_data_length -= self.__leftovers
|
self.__index = self.__leftovers
|
||||||
self.__leftovers = 0
|
self.__valid_data_length -= self.__leftovers
|
||||||
if self.__valid_data_length == 0:
|
self.__leftovers = 0
|
||||||
|
|
||||||
|
if self.__valid_data_length == 0:
|
||||||
|
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
|
||||||
|
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
|
||||||
|
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
|
||||||
|
self.__response = b""
|
||||||
|
self.__is_first_frame = True
|
||||||
|
continue # 此时应该重新 get_headers
|
||||||
|
|
||||||
|
if len(data[self.__index:]) == 2:
|
||||||
|
self.__half_frm = data[self.__index:]
|
||||||
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
|
self.__half_frm_flag = 2
|
||||||
|
elif len(data[self.__index:]) == 1:
|
||||||
|
self.__half_frm = data[self.__index:]
|
||||||
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
|
self.__half_frm_flag = 1
|
||||||
|
elif len(data[self.__index:]) == 0:
|
||||||
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
|
self.__half_frm_flag = 0
|
||||||
|
else:
|
||||||
|
self.__half_frm_flag = -1
|
||||||
|
|
||||||
|
elif len(data) < self.__leftovers:
|
||||||
|
self.__response += data
|
||||||
|
self.__leftovers -= len(data)
|
||||||
|
self.__valid_data_length -= len(data)
|
||||||
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
|
|
||||||
|
elif self.__leftovers > 0 and self.__valid_data_length == 0:
|
||||||
|
if len(data) >= self.__leftovers:
|
||||||
|
self.__response += data[:self.__leftovers]
|
||||||
|
self.__index = self.__leftovers
|
||||||
|
self.__leftovers = 0
|
||||||
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
|
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
|
||||||
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
|
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
|
||||||
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
|
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
|
||||||
self.__response = b""
|
self.__response = b""
|
||||||
self.__is_first_frame = True
|
self.__is_first_frame = True
|
||||||
continue # 此时应该重新 get_headers
|
elif len(data) < self.__leftovers:
|
||||||
|
self.__response += data
|
||||||
|
self.__leftovers -= len(data)
|
||||||
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
|
|
||||||
if len(data[self.__index:]) == 2:
|
|
||||||
self.__half_frm = data[self.__index:]
|
|
||||||
self.__index += clibs.MAX_FRAME_SIZE
|
|
||||||
self.__half_frm_flag = 2
|
|
||||||
elif len(data[self.__index:]) == 1:
|
|
||||||
self.__half_frm = data[self.__index:]
|
|
||||||
self.__index += clibs.MAX_FRAME_SIZE
|
|
||||||
self.__half_frm_flag = 1
|
|
||||||
elif len(data[self.__index:]) == 0:
|
|
||||||
self.__index += clibs.MAX_FRAME_SIZE
|
|
||||||
self.__half_frm_flag = 0
|
|
||||||
else:
|
|
||||||
self.__half_frm_flag = -1
|
|
||||||
|
|
||||||
elif self.__leftovers > 0 and self.__valid_data_length == 0:
|
|
||||||
self.__response += data[:self.__leftovers]
|
|
||||||
self.__index = self.__leftovers
|
|
||||||
self.__leftovers = 0
|
|
||||||
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
|
|
||||||
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
|
|
||||||
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
|
|
||||||
self.__response = b""
|
|
||||||
self.__is_first_frame = True
|
|
||||||
|
|
||||||
elif self.__leftovers == 0 and self.__valid_data_length > 0:
|
elif self.__leftovers == 0 and self.__valid_data_length > 0:
|
||||||
# 1. len(data[self.__index:]) > 2
|
# 1. len(data[self.__index:]) > 2
|
||||||
@ -626,6 +650,16 @@ class HmiRequest(object):
|
|||||||
self.__valid_data_length -= len(data[self.__index:])
|
self.__valid_data_length -= len(data[self.__index:])
|
||||||
self.__index += clibs.MAX_FRAME_SIZE
|
self.__index += clibs.MAX_FRAME_SIZE
|
||||||
else:
|
else:
|
||||||
|
# DEBUG INFO
|
||||||
|
# if self.__is_debug:
|
||||||
|
# print(f"12 index = {self.__index}")
|
||||||
|
# print(f"12 frm_value = {frm_value}")
|
||||||
|
# print(f"12 leftovers = {self.__leftovers}")
|
||||||
|
# print(f"12 valid_data_length = {self.__valid_data_length}")
|
||||||
|
# print(f"12 is_first_frame = {self.__is_first_frame}")
|
||||||
|
# if self.__valid_data_length < 0 or self.__leftovers > 1024:
|
||||||
|
# print(f"data = {data}")
|
||||||
|
# raise Exception("DataError")
|
||||||
clibs.insert_logdb("ERROR", "openapi", "hr-get_response: Will never be here")
|
clibs.insert_logdb("ERROR", "openapi", "hr-get_response: Will never be here")
|
||||||
raise Exception("WillNeverBeHere")
|
raise Exception("WillNeverBeHere")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user