From 6771d338d011c5a8d36e207888c1fd02a40571ee Mon Sep 17 00:00:00 2001 From: x01da Date: Tue, 18 Aug 2026 09:45:02 +0200 Subject: [PATCH] fix(AcsSignal) force update before subscribing --- debye_bec/devices/mo1_bragg/acs.py | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/debye_bec/devices/mo1_bragg/acs.py b/debye_bec/devices/mo1_bragg/acs.py index f91195d..c8ac44a 100644 --- a/debye_bec/devices/mo1_bragg/acs.py +++ b/debye_bec/devices/mo1_bragg/acs.py @@ -149,10 +149,22 @@ class AcsSignal(SocketSignal): self.controller.set_var(self.tag, convert(v), self.prec, i) def subscribe(self, callback, event_type=None, run=True): - # logger.info(f"subscribe to signal {self.tag} called from: {traceback.format_stack()}") self._ensure_polling() - cid = super().subscribe(callback, event_type=event_type, run=run) - return cid + if run: + self._force_fresh_read() + return super().subscribe(callback, event_type=event_type, run=run) + + def _force_fresh_read(self): + old_value = self._readback + try: + new_value = self._socket_get() + except Exception as e: + logger.warning(f"Fresh read failed for {self.name} during subscribe() with {e}") + return + self._readback = new_value + self._run_subs( + sub_type=self.SUB_VALUE, old_value=old_value, value=new_value, timestamp=time.time() + ) def clear_sub(self, cb, event_type=None): super().clear_sub(cb, event_type=event_type) @@ -173,18 +185,13 @@ class AcsSignal(SocketSignal): old_value = self._readback try: new_value = self._socket_get() - except Exception as e: - logger.warning(f"During polling acs signal, got exception {e}") + except Exception: time.sleep(self._poll_time) continue - if new_value != old_value: - self._readback = new_value - self._run_subs( - sub_type=self.SUB_VALUE, - old_value=old_value, - value=new_value, - timestamp=time.time(), - ) + self._readback = new_value + self._run_subs( + sub_type=self.SUB_VALUE, old_value=old_value, value=new_value, timestamp=time.time() + ) time.sleep(self._poll_time)