From 09e8ade74c2ef0495535ee957e2be251a6bce5de Mon Sep 17 00:00:00 2001 From: Phil Date: Mon, 7 Sep 2026 18:48:20 +0300 Subject: [PATCH] sw: more information + auto-update feature --- software/gui.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/software/gui.py b/software/gui.py index d7fe26e..c4e21c9 100644 --- a/software/gui.py +++ b/software/gui.py @@ -62,6 +62,7 @@ class ReflectometerWorker(QObject): self.config = config self._stop_requested = False self._sock = None + self.measure_timeout = 1.0 def stop(self): self._stop_requested = True @@ -80,7 +81,7 @@ class ReflectometerWorker(QObject): self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self._sock.settimeout(self.config.socket_timeout_sec) + self._sock.settimeout(self.measure_timeout) self._sock.bind(("0.0.0.0", self.config.recv_port)) dest = (self.config.ip, self.config.send_port) @@ -267,6 +268,32 @@ class MainWindow(QMainWindow): self.button_save.clicked.connect(self.save_config) self.button_load.clicked.connect(self.load_config) + # timeout progress bar + self.measure_progress_timer = QTimer(self) + self.measure_progress_timer.setInterval(50) + self.measure_progress_timer.timeout.connect( + self.update_measure_progress) + + self.measure_progress_elapsed_ms = 0 + self.measure_progress_total_ms = 1 + + self.progress_measure.setRange(0, 100) + self.progress_measure.setValue(0) + + def update_measure_progress(self): + self.measure_progress_elapsed_ms += self.measure_progress_timer.interval() + + progress = int( + self.measure_progress_elapsed_ms + / self.measure_progress_total_ms + * 100 + ) + + self.progress_measure.setValue(min(progress, 100)) + + if progress >= 100: + self.measure_progress_timer.stop() + # load/save def save_config(self): @@ -409,6 +436,7 @@ class MainWindow(QMainWindow): box.setValue(new_value) setattr(self, name, new_value) + self.recalculate_times() slider.valueChanged.connect(update_value) box.valueChanged.connect(update_value) @@ -464,6 +492,22 @@ class MainWindow(QMainWindow): ) self.pulse_num = self.box_pulse_num.value() + def recalculate_times(self): + # пересчет показываемых метрик + LS = 200000 # ~km/s + period_us = (self.pulse_period / self.dac_clk) + self.label_meas_time.setText( + f"{round(period_us, 1)}мкс / {round(LS * period_us / 10e6, 1)}км") + + self.label_duty.setText( + f"{round(self.pulse_width / self.pulse_period * 100, 4)}%") + + self.label_voltage.setText( + f"{round((self.pulse_height - 8192) * 10 / 16384, 3)}V") + + self.label_meas_total.setText( + f"{round(period_us * self.pulse_num / 10e6, 3)}с") + # settings def setup_global_settings(self): @@ -639,10 +683,21 @@ class MainWindow(QMainWindow): config = self.build_reflectometer_config() self.data = [] - self.graph_curve.setData([]) + + # self.graph_curve.setData([]) self.measurement_thread = QThread(self) self.measurement_worker = ReflectometerWorker(config) + period_us = (self.pulse_period / self.dac_clk) + self.measurement_worker.measure_timeout = period_us * self.pulse_num / 10e6 + 0.2 + + self.measure_progress_total_ms = int( + self.measurement_worker.measure_timeout * 1000 - 199 + ) + self.measure_progress_elapsed_ms = 0 + + self.progress_measure.setValue(0) + self.measure_progress_timer.start() self.measurement_worker.moveToThread(self.measurement_thread) @@ -708,10 +763,14 @@ class MainWindow(QMainWindow): def on_measurement_error(self, message: str): self.set_measurement_status(f"Ошибка: {message}") + if self.checkbox_autorestart.isChecked(): + self.run_measurement() def on_measurement_finished(self): self.measurement_worker = None self.measurement_thread = None + if self.checkbox_autorestart.isChecked(): + self.run_measurement() def stop_measurement(self): if self.measurement_worker is not None: