sw: more information + auto-update feature

This commit is contained in:
Phil
2026-09-07 18:48:20 +03:00
parent 8d8b409807
commit 09e8ade74c
+61 -2
View File
@@ -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: