aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-02-28 18:16:22 -0500
committerKevinOConnor <kevin@koconnor.net>2019-03-08 10:55:46 -0500
commit8f37700d235de09b836721af536a6e44b6c0ce58 (patch)
tree56d8e0d87fd6b9a92bd8049ffeb29ba5fd41bbb6 /klippy
parentf2ca7d5c66f4e45b1b5888e396188b2c0b98371b (diff)
downloadkutter-8f37700d235de09b836721af536a6e44b6c0ce58.tar.gz
kutter-8f37700d235de09b836721af536a6e44b6c0ce58.tar.xz
kutter-8f37700d235de09b836721af536a6e44b6c0ce58.zip
verify_heater: If the heating_gain check fails, just use max_error check
Don't immediately raise an error if the heating_gain check fails. Instead, just transition to the normal max_error check. This should make the code less likely to raise an error should the heater have a slow approach to the target temperature. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extras/verify_heater.py30
1 files changed, 17 insertions, 13 deletions
diff --git a/klippy/extras/verify_heater.py b/klippy/extras/verify_heater.py
index 5f47ebad..2d9d758b 100644
--- a/klippy/extras/verify_heater.py
+++ b/klippy/extras/verify_heater.py
@@ -27,9 +27,9 @@ class HeaterCheck:
default_gain_time = 60.
self.check_gain_time = config.getfloat(
'check_gain_time', default_gain_time, minval=1.)
- self.met_target = self.starting_approach = False
+ self.approaching_target = self.starting_approach = False
self.last_target = self.goal_temp = self.error = 0.
- self.fault_systime = self.printer.get_reactor().NEVER
+ self.goal_systime = self.printer.get_reactor().NEVER
self.check_timer = None
def handle_connect(self):
if self.printer.get_start_args().get('debugoutput') is not None:
@@ -48,33 +48,37 @@ class HeaterCheck:
temp, target = self.heater.get_temp(eventtime)
if temp >= target - self.hysteresis:
# Temperature near target - reset checks
- if not self.met_target and target:
+ if self.approaching_target and target:
logging.info("Heater %s within range of %.3f",
self.heater_name, target)
- self.met_target = True
+ self.approaching_target = self.starting_approach = False
if temp <= target + self.hysteresis:
self.error = 0.
- elif self.met_target:
- self.error += (target - self.hysteresis) - temp
+ self.last_target = target
+ return eventtime + 1.
+ self.error += (target - self.hysteresis) - temp
+ if not self.approaching_target:
if target != self.last_target:
# Target changed - reset checks
logging.info("Heater %s approaching new target of %.3f",
self.heater_name, target)
- self.met_target = False
- self.starting_approach = True
+ self.approaching_target = self.starting_approach = True
self.goal_temp = temp + self.heating_gain
- self.fault_systime = eventtime + self.check_gain_time
+ self.goal_systime = eventtime + self.check_gain_time
elif self.error >= self.max_error:
# Failure due to inability to maintain target temperature
return self.heater_fault()
elif temp >= self.goal_temp:
# Temperature approaching target - reset checks
self.starting_approach = False
+ self.error = 0.
self.goal_temp = temp + self.heating_gain
- self.fault_systime = eventtime + self.check_gain_time
- elif eventtime >= self.fault_systime:
- # Failure due to inability to approach target temperature
- return self.heater_fault()
+ self.goal_systime = eventtime + self.check_gain_time
+ elif eventtime >= self.goal_systime:
+ # Temperature is no longer approaching target
+ self.approaching_target = False
+ logging.info("Heater %s no longer approaching target %.3f",
+ self.heater_name, target)
elif self.starting_approach:
self.goal_temp = min(self.goal_temp, temp + self.heating_gain)
self.last_target = target