diff options
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/extras/heater_generic.py | 16 | ||||
-rw-r--r-- | klippy/heater.py | 23 |
2 files changed, 32 insertions, 7 deletions
diff --git a/klippy/extras/heater_generic.py b/klippy/extras/heater_generic.py new file mode 100644 index 00000000..b08b33f2 --- /dev/null +++ b/klippy/extras/heater_generic.py @@ -0,0 +1,16 @@ +# Support for a generic heater +# +# Copyright (C) 2019 John Jardine <john@gprime.net> +# +# This file may be distributed under the terms of the GNU GPLv3 license. + +import logging + +class PrinterHeaterGeneric: + def __init__(self, config): + self.printer = config.get_printer() + gcode_id = config.get("gcode_id") + self.heater = self.printer.lookup_object('heater').setup_heater(config, gcode_id) + +def load_config_prefix(config): + return PrinterHeaterGeneric(config) diff --git a/klippy/heater.py b/klippy/heater.py index a3915b67..90e1129b 100644 --- a/klippy/heater.py +++ b/klippy/heater.py @@ -21,8 +21,9 @@ class error(Exception): class Heater: error = error def __init__(self, config, sensor, gcode_id): - printer = config.get_printer() - self.name = config.get_name() + self.printer = config.get_printer() + self.gcode = self.printer.lookup_object("gcode") + self.name = config.get_name().split()[-1] self.gcode_id = gcode_id # Setup sensor self.sensor = sensor @@ -34,7 +35,7 @@ class Heater: # Setup temperature checks self.min_extrude_temp = config.getfloat( 'min_extrude_temp', 170., minval=self.min_temp, maxval=self.max_temp) - is_fileoutput = printer.get_start_args().get('debugoutput') is not None + is_fileoutput = self.printer.get_start_args().get('debugoutput') is not None self.can_extrude = self.min_extrude_temp <= 0. or is_fileoutput self.max_power = config.getfloat('max_power', 1., above=0., maxval=1.) self.smooth_time = config.getfloat('smooth_time', 2., above=0.) @@ -51,7 +52,7 @@ class Heater: self.control = algo(self, config) # Setup output heater pin heater_pin = config.get('heater_pin') - ppins = printer.lookup_object('pins') + ppins = self.printer.lookup_object('pins') if algo is ControlBangBang and self.max_power == 1.: self.mcu_pwm = ppins.setup_pin('digital_out', heater_pin) else: @@ -61,8 +62,11 @@ class Heater: self.mcu_pwm.setup_cycle_time(pwm_cycle_time) self.mcu_pwm.setup_max_duration(MAX_HEAT_TIME) # Load additional modules - printer.try_load_module(config, "verify_heater %s" % (self.name,)) - printer.try_load_module(config, "pid_calibrate") + self.printer.try_load_module(config, "verify_heater %s" % (self.name,)) + self.printer.try_load_module(config, "pid_calibrate") + self.gcode.register_mux_command("SET_HEATER_TEMPERATURE", "HEATER", self.name, + self.cmd_SET_HEATER_TEMPERATURE, + desc=self.cmd_SET_HEATER_TEMPERATURE_help) def set_pwm(self, read_time, value): if self.target_temp <= 0.: value = 0. @@ -134,6 +138,11 @@ class Heater: target_temp = self.target_temp smoothed_temp = self.smoothed_temp return {'temperature': smoothed_temp, 'target': target_temp} + cmd_SET_HEATER_TEMPERATURE_help = "Sets a heater temperature" + def cmd_SET_HEATER_TEMPERATURE(self, params): + print_time = self.printer.lookup_object('toolhead').get_last_move_time() + temp = self.gcode.get_float('TARGET', params, 0.) + self.set_temp(print_time, temp) ###################################################################### @@ -229,7 +238,7 @@ class PrinterHeaters: def add_sensor(self, sensor_type, sensor_factory): self.sensors[sensor_type] = sensor_factory def setup_heater(self, config, gcode_id): - heater_name = config.get_name() + heater_name = config.get_name().split()[-1] if heater_name == 'extruder': heater_name = 'extruder0' if heater_name in self.heaters: |