improvements in magfiels/ips_mercury
- read voltage - fix a bug with ._init name conflict
This commit is contained in:
parent
3496e391f6
commit
8e3cdc80e4
@ -161,6 +161,7 @@ class = secop_psi.ips_mercury.Field
|
|||||||
description = magnetic field
|
description = magnetic field
|
||||||
slot = GRPZ
|
slot = GRPZ
|
||||||
io = ips
|
io = ips
|
||||||
|
tolerance = 0.001
|
||||||
target.max = 11
|
target.max = 11
|
||||||
|
|
||||||
[om_io]
|
[om_io]
|
||||||
|
@ -89,6 +89,10 @@ class HasConvergence:
|
|||||||
"""to be called from write_target"""
|
"""to be called from write_target"""
|
||||||
self.convergence_state.start(self.state_approach)
|
self.convergence_state.start(self.state_approach)
|
||||||
|
|
||||||
|
def interrupt_state(self):
|
||||||
|
"""to be called from stop"""
|
||||||
|
self.convergence_state.start(self.state_instable)
|
||||||
|
|
||||||
def state_approach(self, state):
|
def state_approach(self, state):
|
||||||
"""approaching, checking progress (busy)"""
|
"""approaching, checking progress (busy)"""
|
||||||
state.spent_inside = 0
|
state.spent_inside = 0
|
||||||
@ -157,3 +161,10 @@ class HasConvergence:
|
|||||||
else:
|
else:
|
||||||
state.spent_inside = max(0, state.spent_inside - state.delta())
|
state.spent_inside = max(0, state.spent_inside - state.delta())
|
||||||
return Retry()
|
return Retry()
|
||||||
|
|
||||||
|
def state_interrupt(self, state):
|
||||||
|
self.status = IDLE, 'stopped' # stop called
|
||||||
|
return self.state_instable
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self.convergence_state.start(self.state_interrupt)
|
||||||
|
@ -35,6 +35,7 @@ CURRENT_CHECK_SIZE = 2
|
|||||||
class Field(MercuryChannel, Magfield):
|
class Field(MercuryChannel, Magfield):
|
||||||
action = Parameter('action', EnumType(Action), readonly=False)
|
action = Parameter('action', EnumType(Action), readonly=False)
|
||||||
setpoint = Parameter('field setpoint', FloatRange(unit='T'), default=0)
|
setpoint = Parameter('field setpoint', FloatRange(unit='T'), default=0)
|
||||||
|
voltage = Parameter('leads voltage', FloatRange(unit='V'), default=0)
|
||||||
atob = Parameter('field to amp', FloatRange(0, unit='A/T'), default=0)
|
atob = Parameter('field to amp', FloatRange(0, unit='A/T'), default=0)
|
||||||
forced_persistent_field = Parameter(
|
forced_persistent_field = Parameter(
|
||||||
'manual indication that persistent field is bad', BoolType(), readonly=False, default=False)
|
'manual indication that persistent field is bad', BoolType(), readonly=False, default=False)
|
||||||
@ -43,13 +44,13 @@ class Field(MercuryChannel, Magfield):
|
|||||||
_field_mismatch = None
|
_field_mismatch = None
|
||||||
nslaves = 3
|
nslaves = 3
|
||||||
slave_currents = None
|
slave_currents = None
|
||||||
_init = True
|
__init = True
|
||||||
|
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
self.current = self.query('PSU:SIG:FLD')
|
self.current = self.query('PSU:SIG:FLD')
|
||||||
pf = self.query('PSU:SIG:PFLD')
|
pf = self.query('PSU:SIG:PFLD')
|
||||||
if self._init:
|
if self.__init:
|
||||||
self._init = False
|
self.__init = False
|
||||||
self.persistent_field = pf
|
self.persistent_field = pf
|
||||||
if self.switch_heater != 0 or self._field_mismatch is None:
|
if self.switch_heater != 0 or self._field_mismatch is None:
|
||||||
self.forced_persistent_field = False
|
self.forced_persistent_field = False
|
||||||
@ -92,6 +93,9 @@ class Field(MercuryChannel, Magfield):
|
|||||||
def read_atob(self):
|
def read_atob(self):
|
||||||
return self.query('PSU:ATOB')
|
return self.query('PSU:ATOB')
|
||||||
|
|
||||||
|
def read_voltage(self):
|
||||||
|
return self.query('PSU:SIG:VOLT')
|
||||||
|
|
||||||
def read_setpoint(self):
|
def read_setpoint(self):
|
||||||
return self.query('PSU:SIG:FSET')
|
return self.query('PSU:SIG:FSET')
|
||||||
|
|
||||||
|
@ -82,19 +82,21 @@ class Magfield(HasLimits, Drivable):
|
|||||||
'wait time to ensure field is stable', FloatRange(0, unit='s'), readonly=False, default=31)
|
'wait time to ensure field is stable', FloatRange(0, unit='s'), readonly=False, default=31)
|
||||||
|
|
||||||
_state = None
|
_state = None
|
||||||
_init = True
|
__init = True
|
||||||
_super_sw_check = False
|
_super_sw_check = False
|
||||||
_last_target = None
|
_last_target = None
|
||||||
switch_time = None
|
switch_time = None
|
||||||
|
|
||||||
def doPoll(self):
|
def doPoll(self):
|
||||||
if self._init:
|
if self.__init:
|
||||||
self._init = False
|
self.__init = False
|
||||||
self.switch_time = time.time()
|
self.switch_time = time.time()
|
||||||
if self.read_switch_heater() and self.mode == Mode.PERSISTENT:
|
if self.read_switch_heater() and self.mode == Mode.PERSISTENT:
|
||||||
self.read_value() # check for persistent field mismatch
|
self.read_value() # check for persistent field mismatch
|
||||||
# switch off heater from previous live or manual intervention
|
# switch off heater from previous live or manual intervention
|
||||||
self.write_target(self.persistent_value)
|
self.write_target(self.persistent_field)
|
||||||
|
else:
|
||||||
|
self._last_target = self.persistent_field
|
||||||
else:
|
else:
|
||||||
self.read_value()
|
self.read_value()
|
||||||
self._state.cycle()
|
self._state.cycle()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user