sw: more information + auto-update feature
This commit is contained in:
+61
-2
@@ -62,6 +62,7 @@ class ReflectometerWorker(QObject):
|
|||||||
self.config = config
|
self.config = config
|
||||||
self._stop_requested = False
|
self._stop_requested = False
|
||||||
self._sock = None
|
self._sock = None
|
||||||
|
self.measure_timeout = 1.0
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self._stop_requested = True
|
self._stop_requested = True
|
||||||
@@ -80,7 +81,7 @@ class ReflectometerWorker(QObject):
|
|||||||
|
|
||||||
self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
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))
|
self._sock.bind(("0.0.0.0", self.config.recv_port))
|
||||||
|
|
||||||
dest = (self.config.ip, self.config.send_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_save.clicked.connect(self.save_config)
|
||||||
self.button_load.clicked.connect(self.load_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
|
# load/save
|
||||||
|
|
||||||
def save_config(self):
|
def save_config(self):
|
||||||
@@ -409,6 +436,7 @@ class MainWindow(QMainWindow):
|
|||||||
box.setValue(new_value)
|
box.setValue(new_value)
|
||||||
|
|
||||||
setattr(self, name, new_value)
|
setattr(self, name, new_value)
|
||||||
|
self.recalculate_times()
|
||||||
|
|
||||||
slider.valueChanged.connect(update_value)
|
slider.valueChanged.connect(update_value)
|
||||||
box.valueChanged.connect(update_value)
|
box.valueChanged.connect(update_value)
|
||||||
@@ -464,6 +492,22 @@ class MainWindow(QMainWindow):
|
|||||||
)
|
)
|
||||||
self.pulse_num = self.box_pulse_num.value()
|
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
|
# settings
|
||||||
|
|
||||||
def setup_global_settings(self):
|
def setup_global_settings(self):
|
||||||
@@ -639,10 +683,21 @@ class MainWindow(QMainWindow):
|
|||||||
config = self.build_reflectometer_config()
|
config = self.build_reflectometer_config()
|
||||||
|
|
||||||
self.data = []
|
self.data = []
|
||||||
self.graph_curve.setData([])
|
|
||||||
|
# self.graph_curve.setData([])
|
||||||
|
|
||||||
self.measurement_thread = QThread(self)
|
self.measurement_thread = QThread(self)
|
||||||
self.measurement_worker = ReflectometerWorker(config)
|
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)
|
self.measurement_worker.moveToThread(self.measurement_thread)
|
||||||
|
|
||||||
@@ -708,10 +763,14 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def on_measurement_error(self, message: str):
|
def on_measurement_error(self, message: str):
|
||||||
self.set_measurement_status(f"Ошибка: {message}")
|
self.set_measurement_status(f"Ошибка: {message}")
|
||||||
|
if self.checkbox_autorestart.isChecked():
|
||||||
|
self.run_measurement()
|
||||||
|
|
||||||
def on_measurement_finished(self):
|
def on_measurement_finished(self):
|
||||||
self.measurement_worker = None
|
self.measurement_worker = None
|
||||||
self.measurement_thread = None
|
self.measurement_thread = None
|
||||||
|
if self.checkbox_autorestart.isChecked():
|
||||||
|
self.run_measurement()
|
||||||
|
|
||||||
def stop_measurement(self):
|
def stop_measurement(self):
|
||||||
if self.measurement_worker is not None:
|
if self.measurement_worker is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user