fix bugs with persistent_limit parameter

take into account that reading the switch heater might be delayed
This commit is contained in:
2022-08-16 16:54:30 +02:00
parent 2f6954c4f3
commit f23e42de1f
3 changed files with 45 additions and 24 deletions

View File

@ -119,16 +119,27 @@ class Field(MercuryChannel, Magfield):
return current / self.atob
return 0
def start_ramp_to_field(self, state):
self.change('PSU:SIG:FSET', self.persistent_field)
def set_and_go(self, value):
self.change('PSU:SIG:FSET', value)
assert self.write_action('hold') == 'hold'
assert self.write_action('run_to_set') == 'run_to_set'
def start_ramp_to_field(self, state):
try:
self.set_and_go(self.persistent_field)
except (HardwareError, AssertionError):
state.switch_undef = self.switch_on_time or state.now
return self.wait_for_switch
return self.ramp_to_field
def wait_for_switch(self, state):
if self.now - self.switch_undef < self.wait_switch_on:
return Retry()
self.set_and_go(self.persistent_field)
return self.ramp_to_field
def start_ramp_to_target(self, state):
self.change('PSU:SIG:FSET', self.target)
assert self.write_action('hold') == 'hold'
assert self.write_action('run_to_set') == 'run_to_set'
self.set_and_go(self.target)
return self.ramp_to_target
def start_ramp_to_zero(self, state):