mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-06 20:00:41 +02:00
fix(sim): fixed sim positioner cleanup
This commit is contained in:
parent
87b885a85d
commit
dc56e28713
@ -85,6 +85,9 @@ class SimPositioner(Device, PositionerBase):
|
|||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.sim_init = sim_init
|
self.sim_init = sim_init
|
||||||
self._registered_proxies = {}
|
self._registered_proxies = {}
|
||||||
|
self._lock = threading.Lock()
|
||||||
|
self._cleanup_done = threading.Event()
|
||||||
|
self._cleanup_done.set()
|
||||||
|
|
||||||
self.update_frequency = update_frequency
|
self.update_frequency = update_frequency
|
||||||
self._stopped = False
|
self._stopped = False
|
||||||
@ -179,21 +182,26 @@ class SimPositioner(Device, PositionerBase):
|
|||||||
raise DeviceStopError(f"{self.name} was stopped")
|
raise DeviceStopError(f"{self.name} was stopped")
|
||||||
ttime.sleep(1 / self.update_frequency)
|
ttime.sleep(1 / self.update_frequency)
|
||||||
self._update_state(self.readback.get())
|
self._update_state(self.readback.get())
|
||||||
for status in self._status_list:
|
with self._lock:
|
||||||
status.set_finished()
|
self._cleanup_done.clear()
|
||||||
|
for status in self._status_list:
|
||||||
|
status.set_finished()
|
||||||
# pylint: disable=broad-except
|
# pylint: disable=broad-except
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
content = traceback.format_exc()
|
content = traceback.format_exc()
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Error in on_complete call in device {self.name}. Error traceback: {content}"
|
f"Error in on_complete call in device {self.name}. Error traceback: {content}"
|
||||||
)
|
)
|
||||||
for status in self._status_list:
|
with self._lock:
|
||||||
status.set_exception(exc=exc)
|
self._cleanup_done.clear()
|
||||||
|
for status in self._status_list:
|
||||||
|
status.set_exception(exc=exc)
|
||||||
finally:
|
finally:
|
||||||
self._set_sim_state(self.motor_is_moving.name, 0)
|
self._set_sim_state(self.motor_is_moving.name, 0)
|
||||||
if not self._stopped:
|
if not self._stopped:
|
||||||
self._update_state(self.readback.get())
|
self._update_state(self.readback.get())
|
||||||
self._status_list = []
|
self._status_list = []
|
||||||
|
self._cleanup_done.set()
|
||||||
|
|
||||||
def move(self, value: float, **kwargs) -> DeviceStatus:
|
def move(self, value: float, **kwargs) -> DeviceStatus:
|
||||||
"""Change the setpoint of the simulated device, and simultaneously initiate a motion."""
|
"""Change the setpoint of the simulated device, and simultaneously initiate a motion."""
|
||||||
@ -202,6 +210,7 @@ class SimPositioner(Device, PositionerBase):
|
|||||||
self._set_sim_state(self.motor_is_moving.name, 1)
|
self._set_sim_state(self.motor_is_moving.name, 1)
|
||||||
self._set_sim_state(self.setpoint.name, value)
|
self._set_sim_state(self.setpoint.name, value)
|
||||||
|
|
||||||
|
self._cleanup_done.wait()
|
||||||
st = DeviceStatus(device=self)
|
st = DeviceStatus(device=self)
|
||||||
self._status_list.append(st)
|
self._status_list.append(st)
|
||||||
if self.delay:
|
if self.delay:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user