diff --git a/Decoder.py b/Decoder.py index 8f6e86f..80e0a5d 100644 --- a/Decoder.py +++ b/Decoder.py @@ -295,12 +295,12 @@ class Decoder_main(threading.Thread): if self.zmqServer.StartDecode: self.zmqServer.StartDecode = False self.decodingSteps = 1 - self.zmqServer.paradigmBuffer.ResetAllPara() + self.zmqServer.paradigmBuffer.resetAllPara() print('启动预测') if self.zmqServer.paradigmBuffer.GetDataLenCount() < 50: time.sleep(0.005) return - if self.zmqServer.get_Impedance != False: # 阻抗检测状态不解码 + if self.zmqServer.open_Impedance: # 阻抗检测状态不解码 return data = self.zmqServer.paradigmBuffer.getDataViaSSVEP(50) data = data[:self.n_chan, :] @@ -636,7 +636,7 @@ class Decoder_main(threading.Thread): def reset_state(self): """清空解码器状态和缓存数据""" # 重置设备层缓存 - self.thread_data_server.reset_state() + self.zmqServer.reset_state() # 重置解码状态 self.decodingSteps = 0 diff --git a/README.md b/README.md index 1a72ed9..68aa398 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,8 @@ Debug_64ch_Decoder_Optimize is an updated version that fixes several issues and 7. decoder_class切换时,数据重置、各类参数重置 # update -2026年6月5日13:55:34 \ No newline at end of file +2026年6月5日13:55:34 + +# 遗留问题 +1. 之前当处于阻抗检测状态时,Decoder在空跑。 +2. 当前无法判断是否处于阻抗检测状态。 \ No newline at end of file diff --git a/ZeroMQClient_mock.py b/ZeroMQClient_mock.py index a3ef081..7a6dd5b 100644 --- a/ZeroMQClient_mock.py +++ b/ZeroMQClient_mock.py @@ -55,7 +55,7 @@ def receive_messages(socket, stop_event): print("接收线程已停止。") -def zero_mq_client(server_address="tcp://192.168.254.101:8099"): +def zero_mq_client(server_address="tcp://127.0.0.1:8099"): """ ZeroMQ客户端函数,用于与服务器通信 diff --git a/Zmq/dataBuffer.py b/Zmq/dataBuffer.py index a9016bc..9d67df2 100644 --- a/Zmq/dataBuffer.py +++ b/Zmq/dataBuffer.py @@ -5,6 +5,7 @@ import numpy as np from scipy import signal import threading +from logs.log import algo_log class ParadigmRingBuffer: def __init__(self, n_chan, n_points): @@ -19,7 +20,8 @@ class ParadigmRingBuffer: ## append buffer and update current pointer def appendBuffer(self, data): if self.nUpdate == self.n_points: - raise Exception("Buffer is full") + # raise Exception("Buffer is full") + algo_log("Buffer is full", record_once=True) n = data.shape[1] diff --git a/Zmq/zmqServer.py b/Zmq/zmqServer.py index 93fe399..4cb8b7f 100644 --- a/Zmq/zmqServer.py +++ b/Zmq/zmqServer.py @@ -24,7 +24,7 @@ class zmqServer(threading.Thread): # 原有业务状态变量 # self.get_Impedance = False # 是否返回阻抗值 - # self.open_Impedance = None # 是否开启阻抗检测功能 + self.open_Impedance = False # 是否开启阻抗检测功能 self.StartDecode = False # false 停止解码,true=开始解码 self.StartTrain = False # False未进入训练状态,True处于训练状态 self.state_mode = None # 'train'为训练状态,’rest'为休息状态,'test'为测试状态 @@ -36,6 +36,7 @@ class zmqServer(threading.Thread): # 范式数据缓存 self.paradigmBuffer = ParadigmRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10) self.filterBuffer = FilterRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10) + self.paradigmBufferLock= threading.Lock() # 命令与数据通信 @@ -111,6 +112,17 @@ class zmqServer(threading.Thread): with self._event_lock: self._event_inner_idx = value + def reset_state(self): + """清空采集器状态和缓存数据""" + with self.paradigmBufferLock: + self.paradigmBuffer.resetAllPara() + self.count_events = {} + self.epoch_finished = False + self.pack_contain_event = False + self.event_inner_idx = -1 + self.interval_inited = False + + def interval_init(self, decoder_class): if decoder_class == 'ssmvep': interval_epoch = ast.literal_eval(IniRead('system', 'SSMVEP_IntervalEpoch')) @@ -199,15 +211,18 @@ class zmqServer(threading.Thread): self.running = False elif method == "rest": #休息状态 self.state_mode = 'rest' + elif method == "impedance": + if params == 1: + self.open_Impedance = True # 开启阻抗 + # self.get_Impedance = True # 返回阻抗 + elif params == 2: + self.open_Impedance = False # 关闭阻抗 else: algo_log(f"未知命令:{method}", level="WARNING") - + # elif method == "getReport": # self.getReport = True - # elif method == "impedance": - # if params == 1: - # self.open_Impedance = True # 开启阻抗 - # self.get_Impedance = True # 返回阻抗 + # elif params == 2: # self.open_Impedance = False # 关闭阻抗 # self.get_Impedance = False # 停止返回阻抗 @@ -251,7 +266,7 @@ class zmqServer(threading.Thread): self.paradigmBuffer.appendBuffer(data_np) self.filterBuffer.appendBuffer(data_np) - algo_log(f"数据写入成功:shape={data_np.shape}, 范围=[{data_np.min():.2f}, {data_np.max():.2f}] μV", level="DEBUG") + # algo_log(f"数据写入成功:shape={data_np.shape}, 范围=[{data_np.min():.2f}, {data_np.max():.2f}] μV", level="DEBUG") except Exception as e: algo_log(f"数据处理失败:{str(e)}", level="ERROR")