diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-03-11 19:16:55 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-03-11 19:21:32 -0400 |
commit | 849f4ed25f1d1a762ee283572faed4b1c2994488 (patch) | |
tree | 8bdf30c6241adf41cf0929d11afcbfee4e233482 /klippy/extras/verify_heater.py | |
parent | 57d342b4554f7155e81afdba389e0a192d8f5d8e (diff) | |
download | kutter-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/verify_heater.py')
-rw-r--r-- | klippy/extras/verify_heater.py | 13 |
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: |