修复bug

This commit is contained in:
2025-09-29 10:09:03 +08:00
parent bae35d18fc
commit 4b03060b42

View File

@@ -229,6 +229,23 @@ class UIProcessor:
except Exception as e: except Exception as e:
logger.error(f"显示消息时出错: {e}") logger.error(f"显示消息时出错: {e}")
def save_current_config(self):
"""保存当前配置"""
try:
# 保存所有相关配置
configs_to_save = [
'entry-split', 'entry-cycle', 'entry-baud',
'entry-encoding', 'entry-uservar'
]
for config_key in configs_to_save:
self.save_config(config_key)
logger.info("当前配置已保存")
except Exception as e:
logger.error(f"保存当前配置时出错: {e}")
def serial_open(self): def serial_open(self):
"""串口打开时的UI更新""" """串口打开时的UI更新"""
self.entry_baud.configure(state='disabled') self.entry_baud.configure(state='disabled')
@@ -382,7 +399,7 @@ class SerialCommunicator:
# 打开串口 # 打开串口
if self._open_serial(): if self._open_serial():
self._start_communication() self._start_communication()
self._save_current_config() self.ui.save_current_config()
except Exception as e: except Exception as e:
logger.error(f"串口操作出错: {e}") logger.error(f"串口操作出错: {e}")
self.ui.log(f'串口操作失败: {e}') self.ui.log(f'串口操作失败: {e}')
@@ -442,19 +459,33 @@ class SerialCommunicator:
def _receive_loop(self): def _receive_loop(self):
"""接收数据循环""" """接收数据循环"""
buffer = b'' buffer = b''
last_data_time = time.time() # 记录最后接收数据的时间
while self.running.is_set(): while self.running.is_set():
try: try:
if self.com.is_open: if self.com.is_open:
# 使用带超时的读取,避免阻塞
data = self.com.read(self.com.in_waiting or 1) data = self.com.read(self.com.in_waiting or 1)
if data: if data:
buffer += data buffer += data
self.recv_count += len(data) self.recv_count += len(data)
last_data_time = time.time() # 更新最后接收时间
# 处理完整的数据包 # 检查是否需要分帧
if buffer: current_time = time.time()
time_since_last_data = (current_time - last_data_time) * 1000 # 转换为毫秒
# 获取分帧间隔设置
try:
split_interval = float(self.ui.entry_split.var.get().replace('ms', ''))
except ValueError:
split_interval = 100 # 默认100ms
# 如果缓冲区有数据且超过分帧间隔,或者缓冲区数据量很大
if buffer and (time_since_last_data >= split_interval or len(buffer) > 1024):
self.ui.dmesg('recv', buffer) self.ui.dmesg('recv', buffer)
self.ui.log(f'{self.com.port}: 接收 {len(buffer)} 字节') self.ui.log(f'{self.com.port}: 接收 {len(buffer)} 字节')
buffer = b'' buffer = b'' # 清空缓冲区
# 使用 Event.wait 代替 sleep可以及时响应停止事件 # 使用 Event.wait 代替 sleep可以及时响应停止事件
self.running.wait(0.01) # 等待10ms或直到running被清除 self.running.wait(0.01) # 等待10ms或直到running被清除