fix bugs with persistent_limit parameter
take into account that reading the switch heater might be delayed
This commit is contained in:
@ -185,7 +185,7 @@ class Magfield(HasLimits, Drivable):
|
||||
|
||||
def update_switch_heater(self, value):
|
||||
"""is called whenever switch heater was changed"""
|
||||
if value:
|
||||
if value != 0:
|
||||
self.switch_off_time = None
|
||||
if self.switch_on_time is None:
|
||||
self.switch_on_time = time.time()
|
||||
@ -196,11 +196,15 @@ class Magfield(HasLimits, Drivable):
|
||||
|
||||
def start_switch_on(self, state):
|
||||
"""switch heater on"""
|
||||
if self.switch_heater != 0:
|
||||
self.status = Status.PREPARING, 'wait for heater on'
|
||||
else:
|
||||
if self.switch_heater == 0:
|
||||
self.status = Status.PREPARING, 'turn switch heater on'
|
||||
self.write_switch_heater(True)
|
||||
try:
|
||||
self.write_switch_heater(True)
|
||||
except Exception as e:
|
||||
self.log.warning('write_switch_heater %r', e)
|
||||
return Retry()
|
||||
else:
|
||||
self.status = Status.PREPARING, 'wait for heater on'
|
||||
return self.switch_on
|
||||
|
||||
def switch_on(self, state):
|
||||
@ -210,8 +214,10 @@ class Magfield(HasLimits, Drivable):
|
||||
return self.check_switch_off
|
||||
self.read_switch_heater()
|
||||
if self.switch_on_time is None:
|
||||
self.log.warning('switch turned off manually - try again')
|
||||
return self.start_switch_on
|
||||
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:
|
||||
return Retry()
|
||||
self._last_target = self.target
|
||||
@ -258,11 +264,11 @@ class Magfield(HasLimits, Drivable):
|
||||
|
||||
def start_switch_off(self, state):
|
||||
"""turn off switch heater"""
|
||||
if self.switch_heater != 0:
|
||||
if self.switch_heater == 1:
|
||||
self.status = Status.FINALIZING, 'turn switch heater off'
|
||||
self.write_switch_heater(False)
|
||||
else:
|
||||
self.status = Status.FINALIZING, 'wait for heater off'
|
||||
self.write_switch_heater(False)
|
||||
return self.switch_off
|
||||
|
||||
def switch_off(self, state):
|
||||
@ -274,8 +280,10 @@ class Magfield(HasLimits, Drivable):
|
||||
self.persistent_field = self.value
|
||||
self.read_switch_heater()
|
||||
if self.switch_off_time is None:
|
||||
self.log.warning('switch turned on manually - try again')
|
||||
return self.start_switch_off
|
||||
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:
|
||||
return Retry()
|
||||
if abs(self.value) > self.persistent_limit:
|
||||
|
Reference in New Issue
Block a user