From 701759393cb0099ff4d1845bddfcd1c77e89e8b5 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Mon, 18 May 2026 15:24:26 +0200 Subject: [PATCH] frappy_psi.electromagnet: further improvements --- cfg/emagnet_cfg.py | 1 + frappy_psi/electromagnet.py | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cfg/emagnet_cfg.py b/cfg/emagnet_cfg.py index c1f9ff48..c8a8752b 100644 --- a/cfg/emagnet_cfg.py +++ b/cfg/emagnet_cfg.py @@ -19,6 +19,7 @@ Mod('mot', value=Param(unit='mm'), check_limit_switches=True, encoder_mode='CHECK', + encoder_type='absolute', target_min = 10, target_max = 210, ) diff --git a/frappy_psi/electromagnet.py b/frappy_psi/electromagnet.py index 174c8acb..bd608c76 100644 --- a/frappy_psi/electromagnet.py +++ b/frappy_psi/electromagnet.py @@ -261,8 +261,9 @@ class SampleHolder(Drivable): motor = Attached() - target = Parameter('target sample holder position', datatype=IntRange(0,6), readonly=False) - value = Parameter('sample holder position', datatype=IntRange(0,6)) + target = Parameter('target sample holder position', datatype=IntRange(0,9), readonly=False) + value = Parameter('sample holder position', datatype=IntRange(0,9)) + target_max = Parameter('highest sample holder number', datatype=IntRange(0,9), default=6, readonly=False) pos_offset = Parameter('position of first sample holder [mm]', datatype=FloatRange(unit='mm'), default=43) pos_diff = Parameter('distance between two sample positions [mm]', datatype=FloatRange(unit='mm'), default=50) tolerance = Parameter('position tolerance', datatype=FloatRange(unit='mm'), default=1) @@ -271,7 +272,7 @@ class SampleHolder(Drivable): def read_value(self): if not self.motor.isBusy(): - val = self.motor.read_value() + val = self.motor.value self._pos = (val - self.pos_offset) / self.pos_diff # convert mm to sample position return round(self._pos) return self.value @@ -281,10 +282,12 @@ class SampleHolder(Drivable): val = self.pos_offset + target * self.pos_diff self.motor.write_target(val) self.read_status() + self.setFastPoll(True) def read_status(self): if self.motor.isBusy(): return BUSY, ('stopping motor' if self._stopflag else 'motor is running') + self.setFastPoll(False) if abs(self._pos - self.value) > abs(self.tolerance / self.pos_diff): if self._stopflag: return ERROR, 'stopped at intermediate position' @@ -294,4 +297,4 @@ class SampleHolder(Drivable): def stop(self): self.motor.stop() self._stopflag = True - self.status = BUSY, 'stopping' + self.status = BUSY, 'stopping motor'