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