diff options
author | Len Trigg <lenbok@gmail.com> | 2019-06-07 01:10:09 +1200 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2019-06-06 09:10:09 -0400 |
commit | 5989f7a8a67a0900e1283f9534948f6185424322 (patch) | |
tree | dd8100cb0636a5d4c29a3370d6b82f809abd5077 /klippy/extras/firmware_retraction.py | |
parent | d065787afcc312fd5bee709a9b8cb15647f0ab08 (diff) | |
download | kutter-5989f7a8a67a0900e1283f9534948f6185424322.tar.gz kutter-5989f7a8a67a0900e1283f9534948f6185424322.tar.xz kutter-5989f7a8a67a0900e1283f9534948f6185424322.zip |
firmware_retraction: Implementation of tuneable G10/G11 firmware retraction (#1617)
This supports getting and setting of retraction parameters without
having to restart klippy.
Signed-off-by: Len Trigg <lenbok@gmail.com>
Diffstat (limited to 'klippy/extras/firmware_retraction.py')
-rw-r--r-- | klippy/extras/firmware_retraction.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/klippy/extras/firmware_retraction.py b/klippy/extras/firmware_retraction.py new file mode 100644 index 00000000..c4b2a3ac --- /dev/null +++ b/klippy/extras/firmware_retraction.py @@ -0,0 +1,89 @@ +# Support for Marlin/Smoothie/Reprap style firmware retraction via G10/G11 +# +# Copyright (C) 2019 Len Trigg <lenbok@gmail.com> +# +# This file may be distributed under the terms of the GNU GPLv3 license. + +class FirmwareRetraction: + def __init__(self, config): + self.printer = config.get_printer() + self.retract_length = config.getfloat('retract_length', 0., minval=0.) + self.retract_speed = config.getfloat('retract_speed', 20., minval=1) + self.unretract_extra_length = config.getfloat( + 'unretract_extra_length', 0., minval=0.) + self.unretract_speed = config.getfloat('unretract_speed', 10., minval=1) + self.z_hop = config.getfloat('z_hop', 0., minval=0.) + self.unretract_length = (self.retract_length + + self.unretract_extra_length) + self.is_retracted = False + self.gcode = self.printer.lookup_object('gcode') + self.gcode.register_command('SET_RETRACTION', self.cmd_SET_RETRACTION) + self.gcode.register_command('GET_RETRACTION', self.cmd_GET_RETRACTION) + self.gcode.register_command('G10', self.cmd_G10) + self.gcode.register_command('G11', self.cmd_G11) + + def get_status(self, eventtime): + return { + "retract_length": self.retract_length, + "retract_speed": self.retract_speed, + "unretract_extra_length": self.unretract_extra_length, + "unretract_speed": self.unretract_speed, + "z_hop": self.z_hop + } + + def cmd_SET_RETRACTION(self, params): + self.retract_length = self.gcode.get_float( + 'RETRACT_LENGTH', + params, self.retract_length, minval=0.) + self.retract_speed = self.gcode.get_float( + 'RETRACT_SPEED', + params, self.retract_speed, minval=1) + self.unretract_extra_length = self.gcode.get_float( + 'UNRETRACT_EXTRA_LENGTH', + params, self.unretract_extra_length, minval=0.) + self.unretract_speed = self.gcode.get_float( + 'UNRETRACT_SPEED', + params, self.unretract_speed, minval=1) + self.z_hop = self.gcode.get_float( + 'Z_HOP', + params, self.z_hop, minval=0.) + self.unretract_length = (self.retract_length + + self.unretract_extra_length) + self.is_retracted = False + + def cmd_GET_RETRACTION(self, params): + msg = ("RETRACT_LENGTH=%.5f RETRACT_SPEED=%.5f " + "UNRETRACT_EXTRA_LENGTH=%.5f UNRETRACT_SPEED=%.5f " + "Z_HOP=%.5f" + % (self.retract_length, self.retract_speed, + self.unretract_extra_length, self.unretract_speed, + self.z_hop)) + self.gcode.respond_info(msg) + + def cmd_G10(self, params): + if not self.is_retracted: + self.gcode.run_script_from_command( + "SAVE_GCODE_STATE NAME=_retract_state\n" + "G92 E0\n" + "G91\n" + "G1 E-%.5f F%d\n" + "G1 Z%.5f\n" + "RESTORE_GCODE_STATE NAME=_retract_state" + % (self.retract_length, self.retract_speed*60, self.z_hop)) + self.is_retracted = True + + def cmd_G11(self, params): + if self.is_retracted: + self.gcode.run_script_from_command( + "SAVE_GCODE_STATE NAME=_retract_state\n" + "G92 E0\n" + "G91\n" + "G1 E%.5f F%d\n" + "G1 Z-%.5f\n" + "RESTORE_GCODE_STATE NAME=_retract_state" + % (self.unretract_length, self.unretract_speed*60, self.z_hop)) + self.is_retracted = False + + +def load_config(config): + return FirmwareRetraction(config) |