From aed958eb5c32003c7ffcd10d8852082b6d896794 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Tue, 3 Apr 2018 17:01:10 -0400 Subject: heater: Add PrinterHeaters class that stores all sensors and heaters Add a PrinterHeaters class that can stores references to available temperature sensors and stores references to instantiated heaters. Add a extras/heater_bed.py file and delay instantiation of the heater_bed object. This allows the heater.py module to be imported earlier during the setup phase, and allows the PrinterHeaters class to be available for registering sensors and heaters. Signed-off-by: Kevin O'Connor --- klippy/heater.py | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) (limited to 'klippy/heater.py') diff --git a/klippy/heater.py b/klippy/heater.py index f3b22886..eb086c25 100644 --- a/klippy/heater.py +++ b/klippy/heater.py @@ -104,13 +104,14 @@ PWM_DELAY = REPORT_TIME + SAMPLE_TIME*SAMPLE_COUNT class error(Exception): pass -class PrinterHeater: +class Heater: error = error - def __init__(self, printer, config): - self.printer = printer + def __init__(self, config): + printer = config.get_printer() self.name = config.get_name() - sensor_params = config.getchoice('sensor_type', Sensors) - self.sensor = sensor_params['class'](config, sensor_params) + sensor_type = config.get('sensor_type') + pheater = printer.lookup_object('heater') + self.sensor = pheater.setup_sensor(sensor_type, config) self.min_temp = config.getfloat('min_temp', minval=KELVIN_TO_CELCIUS) self.max_temp = config.getfloat('max_temp', above=self.min_temp) self.min_extrude_temp = config.getfloat( @@ -278,7 +279,42 @@ class ControlPID: return (abs(temp_diff) > PID_SETTLE_DELTA or abs(self.prev_temp_deriv) > PID_SETTLE_SLOPE) + +###################################################################### +# Sensor and heater lookup +###################################################################### + +class PrinterHeaters: + def __init__(self, printer, config): + self.printer = printer + self.sensors = {} + self.heaters = {} + def add_sensor(self, sensor_type, params): + self.sensors[sensor_type] = params + def setup_sensor(self, sensor_type, config): + if sensor_type not in self.sensors: + raise self.printer.config_error("Unknown temperature sensor '%s'" % ( + sensor_type,)) + params = self.sensors[sensor_type] + return params['class'](config, params) + def setup_heater(self, config): + heater_name = config.get_name() + if heater_name == 'extruder': + heater_name = 'extruder0' + if heater_name in self.heaters: + raise config.error("Heater %s already registered" % (heater_name,)) + self.heaters[heater_name] = heater = Heater(config) + return heater + def lookup_heater(self, heater_name): + if heater_name == 'extruder': + heater_name = 'extruder0' + if heater_name not in self.heaters: + raise self.printer.config_error( + "Unknown heater '%s'" % (heater_name,)) + return self.heaters[heater_name] + def add_printer_objects(printer, config): - if config.has_section('heater_bed'): - printer.add_object('heater_bed', PrinterHeater( - printer, config.getsection('heater_bed'))) + ph = PrinterHeaters(printer, config) + printer.add_object('heater', ph) + for sensor_type, params in Sensors.items(): + ph.add_sensor(sensor_type, params) -- cgit v1.2.3-70-g09d2