mirror of https://github.com/Desuuuu/klipper.git
heaters: Make heater.py an "extras" module
The heater logic is an independent module that does not need to be treated as part of the "core" klipper code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
d858498a53
commit
17123889f6
|
@ -273,7 +273,7 @@ PT1000 = [
|
|||
|
||||
def load_config(config):
|
||||
# Register default sensors
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
for sensor_type, params in [("AD595", AD595),
|
||||
("AD8494", AD8494),
|
||||
("AD8495", AD8495),
|
||||
|
@ -282,17 +282,17 @@ def load_config(config):
|
|||
("PT100 INA826", PT100)]:
|
||||
func = (lambda config, params=params:
|
||||
PrinterADCtoTemperature(config, LinearVoltage(config, params)))
|
||||
pheater.add_sensor_factory(sensor_type, func)
|
||||
pheaters.add_sensor_factory(sensor_type, func)
|
||||
for sensor_type, params in [("PT1000", PT1000)]:
|
||||
func = (lambda config, params=params:
|
||||
PrinterADCtoTemperature(config,
|
||||
LinearResistance(config, params)))
|
||||
pheater.add_sensor_factory(sensor_type, func)
|
||||
pheaters.add_sensor_factory(sensor_type, func)
|
||||
|
||||
def load_config_prefix(config):
|
||||
if config.get("resistance1", None) is None:
|
||||
custom_sensor = CustomLinearVoltage(config)
|
||||
else:
|
||||
custom_sensor = CustomLinearResistance(config)
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheater.add_sensor_factory(custom_sensor.name, custom_sensor.create)
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
pheaters.add_sensor_factory(custom_sensor.name, custom_sensor.create)
|
||||
|
|
|
@ -198,5 +198,5 @@ class BME280:
|
|||
|
||||
def load_config(config):
|
||||
# Register sensor
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheater.add_sensor_factory("BME280", BME280)
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
pheaters.add_sensor_factory("BME280", BME280)
|
||||
|
|
|
@ -14,6 +14,7 @@ class ControllerFan:
|
|||
self.stepper_names = []
|
||||
self.stepper_enable = self.printer.try_load_module(config,
|
||||
'stepper_enable')
|
||||
self.printer.try_load_module(config, 'heaters')
|
||||
self.heaters = []
|
||||
self.fan = fan.PrinterFan(config)
|
||||
self.mcu = self.fan.mcu_fan.get_mcu()
|
||||
|
@ -27,8 +28,8 @@ class ControllerFan:
|
|||
self.heater_name = config.get("heater", "extruder")
|
||||
self.last_on = self.idle_timeout
|
||||
def handle_ready(self):
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
self.heaters = [pheater.lookup_heater(n.strip())
|
||||
pheaters = self.printer.lookup_object('heaters')
|
||||
self.heaters = [pheaters.lookup_heater(n.strip())
|
||||
for n in self.heater_name.split(',')]
|
||||
kin = self.printer.lookup_object('toolhead').get_kinematics()
|
||||
self.stepper_names = [s.get_name() for s in kin.get_steppers()]
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
class PrinterHeaterBed:
|
||||
def __init__(self, config):
|
||||
self.printer = config.get_printer()
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
self.heater = pheater.setup_heater(config, 'B')
|
||||
pheaters = self.printer.try_load_module(config, 'heaters')
|
||||
self.heater = pheaters.setup_heater(config, 'B')
|
||||
self.get_status = self.heater.get_status
|
||||
self.stats = self.heater.stats
|
||||
# Register commands
|
||||
|
@ -21,8 +21,8 @@ class PrinterHeaterBed:
|
|||
temp = gcode.get_float('S', params, 0.)
|
||||
self.heater.set_temp(temp)
|
||||
if wait and temp:
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
pheater.wait_for_temperature(self.heater)
|
||||
pheaters = self.printer.lookup_object('heaters')
|
||||
pheaters.wait_for_temperature(self.heater)
|
||||
def cmd_M190(self, params):
|
||||
# Set Bed Temperature and Wait
|
||||
self.cmd_M140(params, wait=True)
|
||||
|
|
|
@ -10,6 +10,7 @@ PIN_MIN_TIME = 0.100
|
|||
class PrinterHeaterFan:
|
||||
def __init__(self, config):
|
||||
self.printer = config.get_printer()
|
||||
self.printer.try_load_module(config, 'heaters')
|
||||
self.printer.register_event_handler("klippy:ready", self.handle_ready)
|
||||
self.heater_name = config.get("heater", "extruder")
|
||||
self.heater_temp = config.getfloat("heater_temp", 50.0)
|
||||
|
@ -18,8 +19,8 @@ class PrinterHeaterFan:
|
|||
self.mcu = self.fan.mcu_fan.get_mcu()
|
||||
self.fan_speed = config.getfloat("fan_speed", 1., minval=0., maxval=1.)
|
||||
def handle_ready(self):
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
self.heaters = [pheater.lookup_heater(n.strip())
|
||||
pheaters = self.printer.lookup_object('heaters')
|
||||
self.heaters = [pheaters.lookup_heater(n.strip())
|
||||
for n in self.heater_name.split(',')]
|
||||
reactor = self.printer.get_reactor()
|
||||
reactor.register_timer(self.callback, reactor.NOW)
|
||||
|
|
|
@ -5,4 +5,5 @@
|
|||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
|
||||
def load_config_prefix(config):
|
||||
return config.get_printer().lookup_object('heater').setup_heater(config)
|
||||
pheaters = config.get_printer().try_load_module(config, 'heaters')
|
||||
return pheaters.setup_heater(config)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Printer heater support
|
||||
# Tracking of PWM controlled heaters and their temperature control
|
||||
#
|
||||
# Copyright (C) 2016-2018 Kevin O'Connor <kevin@koconnor.net>
|
||||
# Copyright (C) 2016-2020 Kevin O'Connor <kevin@koconnor.net>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import logging, threading
|
||||
|
@ -323,5 +323,5 @@ class PrinterHeaters:
|
|||
gcode.respond_raw(self._get_temp(eventtime))
|
||||
eventtime = reactor.pause(eventtime + 1.)
|
||||
|
||||
def add_printer_objects(config):
|
||||
config.get_printer().add_object('heater', PrinterHeaters(config))
|
||||
def load_config(config):
|
||||
return PrinterHeaters(config)
|
|
@ -19,12 +19,12 @@ class HomingHeaters:
|
|||
self.disable_heaters = []
|
||||
self.steppers_needing_quiet = config.get("steppers", "")
|
||||
self.flaky_steppers = []
|
||||
self.pheater = self.printer.lookup_object('heater')
|
||||
self.pheaters = self.printer.try_load_module(config, 'heaters')
|
||||
self.target_save = {}
|
||||
|
||||
def handle_connect(self):
|
||||
# heaters to disable
|
||||
all_heaters = self.pheater.get_all_heaters()
|
||||
all_heaters = self.pheaters.get_all_heaters()
|
||||
self.disable_heaters = [n.strip()
|
||||
for n in self.heaters_to_disable.split(',')]
|
||||
if self.disable_heaters == [""]:
|
||||
|
@ -56,14 +56,14 @@ class HomingHeaters:
|
|||
if not self.check_eligible(endstops):
|
||||
return
|
||||
for heater_name in self.disable_heaters:
|
||||
heater = self.pheater.lookup_heater(heater_name)
|
||||
heater = self.pheaters.lookup_heater(heater_name)
|
||||
self.target_save[heater_name] = heater.get_temp(0)[1]
|
||||
heater.set_temp(0.)
|
||||
def handle_homing_move_end(self, endstops):
|
||||
if not self.check_eligible(endstops):
|
||||
return
|
||||
for heater_name in self.disable_heaters:
|
||||
heater = self.pheater.lookup_heater(heater_name)
|
||||
heater = self.pheaters.lookup_heater(heater_name)
|
||||
heater.set_temp(self.target_save[heater_name])
|
||||
|
||||
def load_config(config):
|
||||
|
|
|
@ -18,9 +18,9 @@ class PIDCalibrate:
|
|||
heater_name = self.gcode.get_str('HEATER', params)
|
||||
target = self.gcode.get_float('TARGET', params)
|
||||
write_file = self.gcode.get_int('WRITE_FILE', params, 0)
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
pheaters = self.printer.lookup_object('heaters')
|
||||
try:
|
||||
heater = pheater.lookup_heater(heater_name)
|
||||
heater = pheaters.lookup_heater(heater_name)
|
||||
except self.printer.config_error as e:
|
||||
raise self.gcode.error(str(e))
|
||||
self.printer.lookup_object('toolhead').get_last_move_time()
|
||||
|
@ -31,7 +31,7 @@ class PIDCalibrate:
|
|||
except self.printer.command_error as e:
|
||||
heater.set_control(old_control)
|
||||
raise
|
||||
pheater.wait_for_temperature(heater)
|
||||
pheaters.wait_for_temperature(heater)
|
||||
heater.set_control(old_control)
|
||||
if write_file:
|
||||
calibrate.write_file('/tmp/heattest.txt')
|
||||
|
|
|
@ -336,6 +336,6 @@ Sensors = {
|
|||
|
||||
def load_config(config):
|
||||
# Register sensors
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
for name, klass in Sensors.items():
|
||||
pheater.add_sensor_factory(name, klass)
|
||||
pheaters.add_sensor_factory(name, klass)
|
||||
|
|
|
@ -18,10 +18,11 @@ class TemperatureFan:
|
|||
self.gcode = self.printer.lookup_object('gcode')
|
||||
self.min_temp = config.getfloat('min_temp', minval=KELVIN_TO_CELSIUS)
|
||||
self.max_temp = config.getfloat('max_temp', above=self.min_temp)
|
||||
self.sensor = self.printer.lookup_object('heater').setup_sensor(config)
|
||||
pheaters = self.printer.try_load_module(config, 'heaters')
|
||||
self.sensor = pheaters.setup_sensor(config)
|
||||
self.sensor.setup_minmax(self.min_temp, self.max_temp)
|
||||
self.sensor.setup_callback(self.temperature_callback)
|
||||
self.printer.lookup_object('heater').register_sensor(config, self)
|
||||
pheaters.register_sensor(config, self)
|
||||
self.speed_delay = self.sensor.get_report_time_delta()
|
||||
self.max_speed = config.getfloat('max_speed', 1., above=0., maxval=1.)
|
||||
self.min_speed = config.getfloat('min_speed', 0.3, minval=0., maxval=1.)
|
||||
|
|
|
@ -9,14 +9,15 @@ KELVIN_TO_CELSIUS = -273.15
|
|||
class PrinterSensorGeneric:
|
||||
def __init__(self, config):
|
||||
self.printer = config.get_printer()
|
||||
self.sensor = self.printer.lookup_object('heater').setup_sensor(config)
|
||||
pheaters = self.printer.try_load_module(config, 'heaters')
|
||||
self.sensor = pheaters.setup_sensor(config)
|
||||
self.min_temp = config.getfloat('min_temp', KELVIN_TO_CELSIUS,
|
||||
minval=KELVIN_TO_CELSIUS)
|
||||
self.max_temp = config.getfloat('max_temp', 99999999.9,
|
||||
above=self.min_temp)
|
||||
self.sensor.setup_minmax(self.min_temp, self.max_temp)
|
||||
self.sensor.setup_callback(self.temperature_callback)
|
||||
self.printer.lookup_object('heater').register_sensor(config, self)
|
||||
pheaters.register_sensor(config, self)
|
||||
self.last_temp = 0.
|
||||
def temperature_callback(self, read_time, temp):
|
||||
self.last_temp = temp
|
||||
|
|
|
@ -116,12 +116,12 @@ Sensors = {
|
|||
|
||||
def load_config(config):
|
||||
# Register default thermistor types
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
for sensor_type, params in Sensors.items():
|
||||
func = (lambda config, params=params: PrinterThermistor(config, params))
|
||||
pheater.add_sensor_factory(sensor_type, func)
|
||||
pheaters.add_sensor_factory(sensor_type, func)
|
||||
|
||||
def load_config_prefix(config):
|
||||
thermistor = CustomThermistor(config)
|
||||
pheater = config.get_printer().lookup_object("heater")
|
||||
pheater.add_sensor_factory(thermistor.name, thermistor.create)
|
||||
pheaters = config.get_printer().try_load_module(config, "heaters")
|
||||
pheaters.add_sensor_factory(thermistor.name, thermistor.create)
|
||||
|
|
|
@ -35,8 +35,8 @@ class HeaterCheck:
|
|||
if self.printer.get_start_args().get('debugoutput') is not None:
|
||||
# Disable verify_heater if outputting to a debug file
|
||||
return
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
self.heater = pheater.lookup_heater(self.heater_name)
|
||||
pheaters = self.printer.lookup_object('heaters')
|
||||
self.heater = pheaters.lookup_heater(self.heater_name)
|
||||
logging.info("Starting heater checks for %s", self.heater_name)
|
||||
reactor = self.printer.get_reactor()
|
||||
self.check_timer = reactor.register_timer(self.check_event, reactor.NOW)
|
||||
|
|
|
@ -11,12 +11,12 @@ class PrinterExtruder:
|
|||
self.printer = config.get_printer()
|
||||
self.name = config.get_name()
|
||||
shared_heater = config.get('shared_heater', None)
|
||||
pheater = self.printer.lookup_object('heater')
|
||||
pheaters = self.printer.try_load_module(config, 'heaters')
|
||||
gcode_id = 'T%d' % (extruder_num,)
|
||||
if shared_heater is None:
|
||||
self.heater = pheater.setup_heater(config, gcode_id)
|
||||
self.heater = pheaters.setup_heater(config, gcode_id)
|
||||
else:
|
||||
self.heater = pheater.lookup_heater(shared_heater)
|
||||
self.heater = pheaters.lookup_heater(shared_heater)
|
||||
self.stepper = stepper.PrinterStepper(config)
|
||||
self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.)
|
||||
filament_diameter = config.getfloat(
|
||||
|
@ -167,7 +167,7 @@ class PrinterExtruder:
|
|||
heater = extruder.get_heater()
|
||||
heater.set_temp(temp)
|
||||
if wait and temp:
|
||||
self.printer.lookup_object('heater').wait_for_temperature(heater)
|
||||
self.printer.lookup_object('heaters').wait_for_temperature(heater)
|
||||
def cmd_M109(self, params):
|
||||
# Set Extruder Temperature and Wait
|
||||
self.cmd_M104(params, wait=True)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import sys, os, optparse, logging, time, threading, collections, importlib
|
||||
import util, reactor, queuelogger, msgproto, homing
|
||||
import gcode, configfile, pins, heater, mcu, toolhead
|
||||
import gcode, configfile, pins, mcu, toolhead
|
||||
|
||||
message_ready = "Printer is ready"
|
||||
|
||||
|
@ -123,7 +123,7 @@ class Printer:
|
|||
if self.bglogger is not None:
|
||||
pconfig.log_config(config)
|
||||
# Create printer components
|
||||
for m in [pins, heater, mcu]:
|
||||
for m in [pins, mcu]:
|
||||
m.add_printer_objects(config)
|
||||
for section_config in config.get_prefix_sections(''):
|
||||
self.try_load_module(config, section_config.get_name())
|
||||
|
|
Loading…
Reference in New Issue