From f949bc882d140e45373981c5ae1772f09782aa64 Mon Sep 17 00:00:00 2001 From: shiftingtech <53156353+shiftingtech@users.noreply.github.com> Date: Sun, 25 Jul 2021 18:20:15 -0600 Subject: [PATCH] probe: add ability to save babystepping (#4404) Created two new extended gcodes: Z_OFFSET_APPLY_ENDSTOP, and Z_OFFSET_APPLY_PROBE. These use the z gcode offset to revise the probe offset, or z endstop position allowing users to make a frequently used babystepping value permanent without manual config editing. Signed-off-by: Ben Eastep --- docs/G-Codes.md | 16 +++++++++++----- klippy/extras/manual_probe.py | 19 +++++++++++++++++++ klippy/extras/probe.py | 19 +++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/docs/G-Codes.md b/docs/G-Codes.md index 37e363f4..34250df6 100644 --- a/docs/G-Codes.md +++ b/docs/G-Codes.md @@ -206,6 +206,10 @@ The following standard commands are supported: for calibrating a Z position_endstop config setting. See the MANUAL_PROBE command for details on the parameters and the additional commands available while the tool is active. + `Z_ENDSTOP_UPDATE_POSITION`: Take the current Z Gcode offset (aka, + babystepping), and subtract it from the stepper_z endstop_position. + This acts to take a frequently used babystepping value, and "make + it permanent". Requires a `SAVE_CONFIG` to take effect. - `TUNING_TOWER COMMAND= PARAMETER= START= FACTOR= [BAND=]`: A tool for tuning a parameter on each Z height during a print. The tool will run the given COMMAND @@ -351,11 +355,13 @@ the [probe calibrate guide](Probe_Calibrate.md)): section. - `PROBE_CALIBRATE [SPEED=] [=]`: Run a helper script useful for calibrating the probe's z_offset. See the - PROBE command for details on the optional probe parameters. See the - MANUAL_PROBE command for details on the SPEED parameter and the - additional commands available while the tool is active. Please note, - the PROBE_CALIBRATE command uses the speed variable to move in XY direction - as well as Z. + PROBE command for details on the optional probe parameters. See + the MANUAL_PROBE command for details on the SPEED parameter and the additional commands available while the tool is active. Please note, the PROBE_CALIBRATE command uses the speed variable + to move in XY direction as well as Z. +`PROBE_UPDATE_OFFSET`: Take the current Z Gcode offset (aka, + babystepping), and subtract if from the probe's z_offset. + This acts to take a frequently used babystepping value, and "make + it permanent". Requires a `SAVE_CONFIG` to take effect. ## BLTouch diff --git a/klippy/extras/manual_probe.py b/klippy/extras/manual_probe.py index 83c9aa2f..eb74ff20 100644 --- a/klippy/extras/manual_probe.py +++ b/klippy/extras/manual_probe.py @@ -10,6 +10,7 @@ class ManualProbe: self.printer = config.get_printer() # Register commands self.gcode = self.printer.lookup_object('gcode') + self.gcode_move = self.printer.load_object(config, "gcode_move") self.gcode.register_command('MANUAL_PROBE', self.cmd_MANUAL_PROBE, desc=self.cmd_MANUAL_PROBE_help) zconfig = config.getsection('stepper_z') @@ -19,6 +20,10 @@ class ManualProbe: self.gcode.register_command( 'Z_ENDSTOP_CALIBRATE', self.cmd_Z_ENDSTOP_CALIBRATE, desc=self.cmd_Z_ENDSTOP_CALIBRATE_help) + self.gcode.register_command( + 'Z_OFFSET_APPLY_ENDSTOP', + self.cmd_Z_OFFSET_APPLY_ENDSTOP, + desc=self.cmd_Z_OFFSET_APPLY_ENDSTOP_help) def manual_probe_finalize(self, kin_pos): if kin_pos is not None: self.gcode.respond_info("Z position is %.3f" % (kin_pos[2],)) @@ -38,6 +43,20 @@ class ManualProbe: cmd_Z_ENDSTOP_CALIBRATE_help = "Calibrate a Z endstop" def cmd_Z_ENDSTOP_CALIBRATE(self, gcmd): ManualProbeHelper(self.printer, gcmd, self.z_endstop_finalize) + def cmd_Z_OFFSET_APPLY_ENDSTOP(self,gcmd): + offset = self.gcode_move.get_status()['homing_origin'].z + configfile = self.printer.lookup_object('configfile') + if offset == 0: + self.gcode.respond_info("Nothing to do: Z Offset is 0") + else: + new_calibrate = self.z_position_endstop - offset + self.gcode.respond_info( + "stepper_z: position_endstop: %.3f\n" + "The SAVE_CONFIG command will update the printer config file\n" + "with the above and restart the printer." % (new_calibrate)) + configfile.set('stepper_z', 'position_endstop', + "%.3f" % (new_calibrate,)) + cmd_Z_OFFSET_APPLY_ENDSTOP_help = "Adjust the z endstop_position" # Verify that a manual probe isn't already in progress def verify_no_manual_probe(printer): diff --git a/klippy/extras/probe.py b/klippy/extras/probe.py index 700a8955..3f27a73e 100644 --- a/klippy/extras/probe.py +++ b/klippy/extras/probe.py @@ -27,6 +27,7 @@ class PrinterProbe: self.multi_probe_pending = False self.last_state = False self.last_z_result = 0. + self.gcode_move = self.printer.load_object(config, "gcode_move") # Infer Z position to move to during a probe if config.has_section('stepper_z'): zconfig = config.getsection('stepper_z') @@ -70,6 +71,9 @@ class PrinterProbe: desc=self.cmd_PROBE_CALIBRATE_help) self.gcode.register_command('PROBE_ACCURACY', self.cmd_PROBE_ACCURACY, desc=self.cmd_PROBE_ACCURACY_help) + self.gcode.register_command('Z_OFFSET_APPLY_PROBE', + self.cmd_Z_OFFSET_APPLY_PROBE, + desc=self.cmd_Z_OFFSET_APPLY_PROBE_help) def _handle_homing_move_begin(self, hmove): if self.mcu_probe in hmove.get_mcu_endstops(): self.mcu_probe.probe_prepare(hmove) @@ -262,6 +266,21 @@ class PrinterProbe: # Start manual probe manual_probe.ManualProbeHelper(self.printer, gcmd, self.probe_calibrate_finalize) + def cmd_Z_OFFSET_APPLY_PROBE(self,gcmd): + z_offset = self.probe_calibrate_z + offset = self.gcode_move.get_status()['homing_origin'].z + configfile = self.printer.lookup_object('configfile') + if offset == 0: + self.gcode.respond_info("Nothing to do: Z Offset is 0") + else: + new_calibrate = self.probe_calibrate_z - offset + self.gcode.respond_info( + "%s: z_offset: %.3f\n" + "The SAVE_CONFIG command will update the printer config file\n" + "with the above and restart the printer." + % (self.name, new_calibrate)) + configfile.set(self.name, 'z_offset', "%.3f" % (new_calibrate,)) + cmd_Z_OFFSET_APPLY_PROBE_help = "Adjust the probe's z_offset" # Endstop wrapper that enables probe specific features class ProbeEndstopWrapper: