[fix] 尝试修复录数据无法正确开始和停止的问题

- 数据开关无效
This commit is contained in:
cuijingwei@brisonus.com 2025-11-19 18:30:11 +08:00
parent d4ce0dbe14
commit 925508fa4f

View File

@ -97,12 +97,12 @@ class SerialRecorder:
self.serial = serial.Serial(
port=self.port,
baudrate=self.baudrate,
timeout=0.001, # 减小超时时间
timeout=0.0001, # 减小超时时间
write_timeout=1, # 添加写入超时
bytesize=serial.EIGHTBITS, # 8位数据位
parity=serial.PARITY_NONE, # 无校验
stopbits=serial.STOPBITS_ONE, # 1位停止位
rtscts=True # 启用硬件流控
rtscts=False # 启用硬件流控
)
# 设置接收缓冲区大小
self.serial.set_buffer_size(rx_size=1024*1024) # 1MB接收缓冲区
@ -182,7 +182,7 @@ class SerialRecorder:
except Exception as e:
self.logger.error(f"帧处理错误: {e}")
time.sleep(0.1)
time.sleep(0.001)
def _check_and_save_frames(self):
"""检查并保存帧数据"""
@ -269,10 +269,10 @@ class SerialRecorder:
while self.is_running:
try:
if self.serial.in_waiting:
# 读取数据
chunk = self.serial.read(min(CHUNK_SIZE, self.serial.in_waiting))
chunk = self.serial.read(self.serial.in_waiting or 1)
chunk_size = len(chunk)
# self.logger.info(f"读取到数据,大小: {chunk_size} 字节")
if chunk_size > 0:
self.bytes_received += chunk_size
@ -283,7 +283,7 @@ class SerialRecorder:
with self.buffer_lock:
# 如果主缓冲区接近满,清空它
if len(self.buffer) > self.buffer_size * 0.9:
self.logger.warning("主缓冲区接近满,执行清空操作")
# self.logger.warning("主缓冲区接近满,执行清空操作")
self.buffer.clear()
self.buffer.extend(chunk)
@ -293,7 +293,7 @@ class SerialRecorder:
if len(self.current_save_buffer) >= self.save_buffer_size:
# 等待保存线程处理完上一个缓冲区
while self.save_buffer_full and self.is_running:
time.sleep(0.01)
time.sleep(0.0001)
if not self.is_running:
break
@ -302,7 +302,7 @@ class SerialRecorder:
self.current_save_buffer = self.save_buffer_b if self.current_save_buffer == self.save_buffer_a else self.save_buffer_a
self.save_buffer_full = True
self.save_buffer_event.set()
self.logger.info(f"切换到新的保存缓冲区,当前缓冲区大小: {len(self.current_save_buffer)}")
# self.logger.info(f"切换到新的保存缓冲区,当前缓冲区大小: {len(self.current_save_buffer)}")
self.current_save_buffer.extend(chunk)
@ -319,15 +319,11 @@ class SerialRecorder:
# 检查数据超时
if time.time() - self.last_data_time > 5.0: # 5秒超时
self.error_count += 1
self.logger.warning(f"数据接收超时 ({self.error_count}/{self.max_errors})")
# self.logger.warning(f"数据接收超时 ({self.error_count}/{self.max_errors})")
if self.error_count >= self.max_errors:
self.logger.error("达到最大错误次数,停止记录")
self.logger.error("数据接收超时,达到最大重试次数,停止记录")
self.is_running = False
break
time.sleep(0.1)
else:
time.sleep(0.001) # 无数据时短暂休眠
except Exception as e:
self.logger.error(f"读取数据错误: {e}")
@ -336,7 +332,6 @@ class SerialRecorder:
self.logger.error("达到最大错误次数,停止记录")
self.is_running = False
break
time.sleep(0.1)
def stop(self) -> bool:
"""停止数据记录"""