aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--klippy/gcode.py6
-rw-r--r--klippy/heater.py13
2 files changed, 16 insertions, 3 deletions
diff --git a/klippy/gcode.py b/klippy/gcode.py
index d3932322..ce3c3ffe 100644
--- a/klippy/gcode.py
+++ b/klippy/gcode.py
@@ -191,7 +191,11 @@ class GCodeParser:
def set_temp(self, heater, params, wait=False):
print_time = self.toolhead.get_last_move_time()
temp = float(params.get('S', '0'))
- heater.set_temp(print_time, temp)
+ try:
+ heater.set_temp(print_time, temp)
+ except heater.error, e:
+ self.respond_error(str(e))
+ return
if wait:
self.bg_temp(heater)
# Individual command handlers
diff --git a/klippy/heater.py b/klippy/heater.py
index 359c80bd..909307ac 100644
--- a/klippy/heater.py
+++ b/klippy/heater.py
@@ -21,7 +21,11 @@ MAX_HEAT_TIME = 5.0
AMBIENT_TEMP = 25.
PWM_MAX = 255
+class error(Exception):
+ pass
+
class PrinterHeater:
+ error = error
def __init__(self, printer, config):
self.printer = printer
self.config = config
@@ -29,6 +33,8 @@ class PrinterHeater:
self.thermistor_c = config.getchoice('thermistor_type', Thermistors)
self.pullup_r = config.getfloat('pullup_resistor', 4700.)
self.min_extrude_temp = config.getfloat('min_extrude_temp', 170.)
+ self.min_temp = self.config.getfloat('min_temp')
+ self.max_temp = self.config.getfloat('max_temp')
self.can_extrude = (self.min_extrude_temp <= 0.)
self.lock = threading.Lock()
self.last_temp = 0.
@@ -50,8 +56,8 @@ class PrinterHeater:
self.mcu_pwm = self.printer.mcu.create_pwm(
heater_pin, 0, MAX_HEAT_TIME)
self.mcu_adc = self.printer.mcu.create_adc(thermistor_pin)
- min_adc = self.calc_adc(self.config.getfloat('max_temp'))
- max_adc = self.calc_adc(self.config.getfloat('min_temp'))
+ min_adc = self.calc_adc(self.max_temp)
+ max_adc = self.calc_adc(self.min_temp)
self.mcu_adc.set_minmax(
SAMPLE_TIME, SAMPLE_COUNT, minval=min_adc, maxval=max_adc)
self.mcu_adc.set_adc_callback(REPORT_TIME, self.adc_callback)
@@ -102,6 +108,9 @@ class PrinterHeater:
#logging.debug("temp: %.3f %f = %f" % (read_time, read_value, temp))
# External commands
def set_temp(self, print_time, degrees):
+ if degrees and (degrees < self.min_temp or degrees > self.max_temp):
+ raise error("Requested temperature (%.1f) out of range (%.1f:%.1f)"
+ % (degrees, self.min_temp, self.max_temp))
with self.lock:
self.target_temp = degrees
def get_temp(self):