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

@ -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: