From 78422647d8e5bf8e59bc0da1cf2fd119ce1010c7 Mon Sep 17 00:00:00 2001 From: appel_c Date: Fri, 8 May 2026 17:58:25 +0200 Subject: [PATCH] fix(sim-positioner): Fix move method of lin positioner with trajectory --- ophyd_devices/sim/sim_positioner.py | 41 ++++++++++------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/ophyd_devices/sim/sim_positioner.py b/ophyd_devices/sim/sim_positioner.py index b9509d7..babdc2e 100644 --- a/ophyd_devices/sim/sim_positioner.py +++ b/ophyd_devices/sim/sim_positioner.py @@ -312,36 +312,23 @@ class SimLinearTrajectoryPositioner(SimPositioner): ttime.sleep(1 / self.update_frequency) self._update_readback(traj.position()) raise DeviceStopError(f"{self.name} was stopped") - st.set_finished() + self._update_readback(self.readback.get()) # pylint: disable=broad-except except Exception as exc: content = traceback.format_exc() logger.warning( - f"Error in on_complete call in device {self.name}. Error traceback: {content}" + f"Error in _move_to_setpoint call in device {self.name}. Error traceback: {content}" ) - st.set_exception(exc=exc) + with self._lock: + for status in self._status_list: + status.set_exception(exc=exc) + self._status_list = [] finally: - self.motor_is_moving.put(0) - - def move(self, value: float, **kwargs) -> DeviceStatus: - """Change the setpoint of the simulated device, and simultaneously initiate a motion.""" - self._stopped = False - self.check_value(value) - self.motor_is_moving.put(1) - self._update_readback(value) - - st = DeviceStatus(device=self) - if self.delay: - if self.move_thread is None or not self.move_thread.is_alive(): - self.move_thread = threading.Thread( - target=self._move_and_finish, args=(self.position, value, st) - ) - self.move_thread.start() - else: - raise RuntimeError(f"{self.name} is already moving. Cannot start a new move.") - else: - self._done_moving() - self.motor_is_moving.put(0) - self._update_readback(value) - st.set_finished() - return st + with self._lock: + self.motor_is_moving.put(0) + if not self._stopped: + self._update_readback(self.readback.get()) + for status in self._status_list: + if not status.done: + status.set_finished() + self._status_list = []