aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-03-11 19:16:55 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-03-11 19:21:32 -0400
commit849f4ed25f1d1a762ee283572faed4b1c2994488 (patch)
tree8bdf30c6241adf41cf0929d11afcbfee4e233482 /klippy/extras
parent57d342b4554f7155e81afdba389e0a192d8f5d8e (diff)
downloadkutter-849f4ed25f1d1a762ee283572faed4b1c2994488.tar.gz
kutter-849f4ed25f1d1a762ee283572faed4b1c2994488.tar.xz
kutter-849f4ed25f1d1a762ee283572faed4b1c2994488.zip
verify_heater: Scale hysteresis duration check
If a heater falls out of the target range, accumulate the temperature differences to determine if an error should be raised. This should make it less likely to report an error for heaters that drift slightly out of range, and it should make error reporting faster for heaters that rapidly fall out of range. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras')
-rw-r--r--klippy/extras/verify_heater.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/klippy/extras/verify_heater.py b/klippy/extras/verify_heater.py
index 4a30c241..a6eae5a1 100644
--- a/klippy/extras/verify_heater.py
+++ b/klippy/extras/verify_heater.py
@@ -11,8 +11,8 @@ class HeaterCheck:
self.printer = config.get_printer()
self.heater_name = config.get_name().split()[1]
self.heater = None
- self.hysteresis = config.getfloat('hysteresis', 10., above=0.)
- self.check_time = config.getfloat('check_time', 15., minval=1.)
+ self.hysteresis = config.getfloat('hysteresis', 5., minval=0.)
+ self.max_error = config.getfloat('max_error', 120., minval=0.)
self.heating_gain = config.getfloat('heating_gain', 2., above=0.)
default_gain_time = 20.
if self.heater_name == 'heater_bed':
@@ -20,7 +20,7 @@ class HeaterCheck:
self.check_gain_time = config.getfloat(
'check_gain_time', default_gain_time, minval=1.)
self.met_target = False
- self.last_target = self.goal_temp = 0.
+ self.last_target = self.goal_temp = self.error = 0.
self.fault_systime = self.printer.get_reactor().NEVER
def printer_state(self, state):
if state == 'connect':
@@ -33,12 +33,13 @@ class HeaterCheck:
temp, target = self.heater.get_temp(eventtime)
if temp >= target - self.hysteresis:
# Temperature near target - reset checks
- if not self.met_target:
+ if not self.met_target and target:
logging.info("Heater %s within range of %.3f",
self.heater_name, target)
self.met_target = True
- self.fault_systime = eventtime + self.check_time
+ self.error = 0.
elif self.met_target:
+ self.error += (target - self.hysteresis) - temp
if target != self.last_target:
# Target changed - reset checks
logging.info("Heater %s approaching new target of %.3f",
@@ -46,7 +47,7 @@ class HeaterCheck:
self.met_target = False
self.goal_temp = temp + self.heating_gain
self.fault_systime = eventtime + self.check_gain_time
- elif eventtime >= self.fault_systime:
+ elif self.error >= self.max_error:
# Failure due to inability to maintain target temperature
return self.heater_fault()
elif temp >= self.goal_temp: