diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-04-29 14:56:39 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-06-09 18:54:38 -0400 |
commit | 24b8f4ebc192dde459fb345ebc109847dd7266e7 (patch) | |
tree | 770ee82bcf96cfa90e52ae3a321baee60aaca590 /klippy/gcode.py | |
parent | 136dccbcdfc6a20c8b6755afdfb65891cee3d1a7 (diff) | |
download | kutter-24b8f4ebc192dde459fb345ebc109847dd7266e7.tar.gz kutter-24b8f4ebc192dde459fb345ebc109847dd7266e7.tar.xz kutter-24b8f4ebc192dde459fb345ebc109847dd7266e7.zip |
extruder: Add initial support for multi-extruders
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/gcode.py')
-rw-r--r-- | klippy/gcode.py | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/klippy/gcode.py b/klippy/gcode.py index 96caacb7..bfaa7d19 100644 --- a/klippy/gcode.py +++ b/klippy/gcode.py @@ -4,7 +4,7 @@ # # This file may be distributed under the terms of the GNU GPLv3 license. import os, re, logging, collections -import homing +import homing, extruder # Parse out incoming GCode and find and translate head movements class GCodeParser: @@ -27,6 +27,7 @@ class GCodeParser: self.is_printer_ready = False self.need_ack = False self.toolhead = self.heater_nozzle = self.heater_bed = self.fan = None + self.extruder = None self.speed = 25.0 self.absolutecoord = self.absoluteextrude = True self.base_position = [0.0, 0.0, 0.0, 0.0] @@ -56,9 +57,11 @@ class GCodeParser: # Lookup printer components self.toolhead = self.printer.objects.get('toolhead') self.heater_nozzle = None - extruder = self.printer.objects.get('extruder') - if extruder: - self.heater_nozzle = extruder.heater + extruders = extruder.get_printer_extruders(self.printer) + if extruders: + self.extruder = extruders[0] + self.heater_nozzle = self.extruder.get_heater() + self.toolhead.set_extruder(self.extruder) self.heater_bed = self.printer.objects.get('heater_bed') self.fan = self.printer.objects.get('fan') if self.is_fileinput and self.fd_handle is None: @@ -233,7 +236,28 @@ class GCodeParser: if not cmd: logging.debug(params['#original']) return + if cmd[0] == 'T' and len(cmd) > 1 and cmd[1].isdigit(): + # Tn command has to be handled specially + self.cmd_Tn(params) + return self.respond('echo:Unknown command:"%s"' % (cmd,)) + def cmd_Tn(self, params): + # Select Tool + index = self.get_int('T', params) + extruders = extruder.get_printer_extruders(self.printer) + if self.extruder is None or index < 0 or index >= len(extruders): + self.respond_error("Extruder %d not configured" % (index,)) + return + e = extruders[index] + if self.extruder is e: + return + try: + self.toolhead.set_extruder(e) + except homing.EndstopError, e: + self.respond_error(str(e)) + return + self.extruder = e + self.last_position = self.toolhead.get_position() all_handlers = [ 'G1', 'G4', 'G20', 'G28', 'G90', 'G91', 'G92', 'M82', 'M83', 'M18', 'M105', 'M104', 'M109', 'M112', 'M114', 'M115', |