rework switch timing

- specific things in ips_mercury.py
- general things in magfield.py

Change-Id: I7c2bae815b9a80a17803b44b8941ef3dea3adb60
This commit is contained in:
2022-09-14 13:58:12 +02:00
parent c3f55435da
commit b0315e133b
2 changed files with 33 additions and 25 deletions

View File

@ -44,6 +44,9 @@ Status = Enum(
FINALIZING=390,
)
OFF = 0
ON = 1
class Magfield(HasLimits, Drivable):
value = Parameter('magnetic field', datatype=FloatRange(unit='T'))
@ -52,7 +55,7 @@ class Magfield(HasLimits, Drivable):
'persistent mode', EnumType(Mode), readonly=False, default=Mode.PERSISTENT)
tolerance = Parameter(
'tolerance', FloatRange(0, unit='$'), readonly=False, default=0.0002)
switch_heater = Parameter('switch heater', EnumType(off=0, on=1),
switch_heater = Parameter('switch heater', EnumType(off=OFF, on=ON),
readonly=False, default=0)
persistent_field = Parameter(
'persistent field', FloatRange(unit='$'), readonly=False)
@ -87,8 +90,7 @@ class Magfield(HasLimits, Drivable):
_state = None
__init = True
_last_target = None
switch_on_time = None
switch_off_time = None
switch_time = None, None
def doPoll(self):
if self.__init:
@ -185,14 +187,11 @@ class Magfield(HasLimits, Drivable):
def update_switch_heater(self, value):
"""is called whenever switch heater was changed"""
if value != 0:
self.switch_off_time = None
if self.switch_on_time is None:
self.switch_on_time = time.time()
else:
self.switch_on_time = None
if self.switch_off_time is None:
self.switch_off_time = time.time()
switch_time = self.switch_time[value]
if switch_time is None:
switch_time = time.time()
self.switch_time = [None, None]
self.switch_time[value] = switch_time
def start_switch_on(self, state):
"""switch heater on"""
@ -213,12 +212,10 @@ class Magfield(HasLimits, Drivable):
abs(self.target - self.persistent_field) <= self.tolerance): # short cut
return self.check_switch_off
self.read_switch_heater()
if self.switch_on_time is None:
if state.now - self.switch_off_time > 10:
self.log.warning('switch turned off manually?')
return self.start_switch_on
return Retry()
if state.now - self.switch_on_time < self.wait_switch_on:
if self.switch_time[ON] is None:
self.log.warning('switch turned off manually?')
return self.start_switch_on
if state.now - self.switch_time[ON] < self.wait_switch_on:
return Retry()
self._last_target = self.target
return self.start_ramp_to_target
@ -279,12 +276,10 @@ class Magfield(HasLimits, Drivable):
return self.start_switch_on
self.persistent_field = self.value
self.read_switch_heater()
if self.switch_off_time is None:
if state.now - self.switch_on_time > 10:
self.log.warning('switch turned on manually?')
return self.start_switch_off
return Retry()
if state.now - self.switch_off_time < self.wait_switch_off:
if self.switch_time[OFF] is None:
self.log.warning('switch turned on manually?')
return self.start_switch_off
if state.now - self.switch_time[OFF] < self.wait_switch_off:
return Retry()
if abs(self.value) > self.persistent_limit:
self.status = Status.IDLE, 'leads current at field, switch off'