move persistent_field parameter from magnet.py to ips_magnet.py

'persistent_field' is in principle the same as 'value'.
however, on IPS it might be different, at least it is a seperate
HW parameter
This commit is contained in:
zolliker 2022-12-19 16:03:44 +01:00
parent b10c722ff6
commit 1a6aa893e4
2 changed files with 11 additions and 14 deletions

View File

@ -132,6 +132,8 @@ class SimpleField(MercuryChannel, SimpleMagfield):
class Field(SimpleField, Magfield):
persistent_field = Parameter(
'persistent field', FloatRange(unit='$'), readonly=False)
wait_switch_on = Parameter(
'wait time to ensure switch is on', FloatRange(0, unit='s'), readonly=True, default=60)
wait_switch_off = Parameter(

View File

@ -130,8 +130,6 @@ class Magfield(SimpleMagfield):
'persistent mode', EnumType(Mode), readonly=False, default=Mode.PERSISTENT)
switch_heater = Parameter('switch heater', EnumType(off=OFF, on=ON),
readonly=False, default=0)
persistent_field = Parameter(
'persistent field', FloatRange(unit='$'), readonly=False)
current = Parameter(
'leads current (in units of field)', FloatRange(unit='$'))
# TODO: time_to_target
@ -164,7 +162,7 @@ class Magfield(SimpleMagfield):
def doPoll(self):
if self.__init_persistency:
if self.__init_persistency is True:
self._last_target = self.persistent_field
self._last_target = self.value
self.__init_persistency = time.time() + 60
self.read_value() # check for persistent field mismatch
elif self.read_switch_heater() and self.mode != Mode.DRIVEN:
@ -182,11 +180,11 @@ class Magfield(SimpleMagfield):
def write_mode(self, value):
self.__init_persistency = False
target = self.persistent_field
target = self.value
func = self.start_field_change
if value == Mode.DISABLED:
target = 0
if abs(self.persistent_field) < self.tolerance:
if abs(self.value) < self.tolerance:
func = self.start_switch_off
elif value == Mode.PERSISTENT:
func = self.start_switch_off
@ -206,7 +204,7 @@ class Magfield(SimpleMagfield):
def on_error(self, sm): # sm is short for statemachine
if self.switch_heater == ON:
self.persistent_field = self.read_value()
self.read_value()
if sm.mode != Mode.DRIVEN:
self.log.warning('turn switch heater off')
self.write_switch_heater(OFF)
@ -215,9 +213,9 @@ class Magfield(SimpleMagfield):
@status_code(Status.PREPARING)
def start_field_change(self, sm):
self.setFastPoll(True, 1.0)
if sm.target == self.persistent_field or (
if sm.target == self.value or (
sm.target == self._last_target and
abs(sm.target - self.persistent_field) <= self.tolerance): # short cut
abs(sm.target - self.value) <= self.tolerance): # short cut
return self.check_switch_off
if self.switch_heater == ON:
return self.start_switch_on
@ -237,7 +235,7 @@ class Magfield(SimpleMagfield):
if sm.init:
sm.stabilize_start = 0 # in case current is already at field
self.init_progress(sm, self.current)
dif = abs(self.current - self.persistent_field)
dif = abs(self.current - self.value)
if dif > self.tolerance:
tdif = self.get_progress(sm, self.current)
if tdif > self.leads_ramp_tmo:
@ -283,7 +281,7 @@ class Magfield(SimpleMagfield):
@status_code(Status.PREPARING)
def wait_for_switch_on(self, sm):
if (sm.target == self._last_target and
abs(sm.target - self.persistent_field) <= self.tolerance): # short cut
abs(sm.target - self.value) <= self.tolerance): # short cut
return self.check_switch_off
self.read_switch_heater() # trigger switch_on/off_time
if self.switch_heater == OFF:
@ -309,7 +307,6 @@ class Magfield(SimpleMagfield):
@status_code(Status.RAMPING)
def ramp_to_target(self, sm):
self.persistent_field = self.value
dif = abs(self.value - sm.target)
if sm.init:
sm.stabilize_start = 0 # in case current is already at target
@ -328,7 +325,6 @@ class Magfield(SimpleMagfield):
@status_code(Status.STABILIZING)
def stabilize_field(self, sm):
self.persistent_field = self.value
if sm.now < sm.stabilize_start + self.wait_stable_field:
return Retry
return self.check_switch_off
@ -346,7 +342,6 @@ class Magfield(SimpleMagfield):
@status_code(Status.FINALIZING)
def wait_for_switch_off(self, sm):
self.persistent_field = self.value
self.read_switch_heater()
if self.switch_heater == ON:
if sm.init: # avoid too many states chained
@ -377,6 +372,6 @@ class Magfield(SimpleMagfield):
if self.get_progress(sm, self.value) > self.leads_ramp_tmo:
raise HardwareError('no progress')
return Retry
if sm.mode == Mode.DISABLED and abs(self.persistent_field) < self.tolerance:
if sm.mode == Mode.DISABLED and abs(self.value) < self.tolerance:
return self.final_status(Status.DISABLED, 'disabled')
return self.final_status(Status.IDLE, 'persistent mode')