probe: Add deactivate_on_each_sample: param for Probe (#4161)

Signed-off-by: Nick Lefskiy <n.lefskiy@yandex.ru>
This commit is contained in:
nlef 2021-04-24 20:39:58 +03:00 committed by GitHub
parent 200b62bcb4
commit 2d2db0f839
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 12 deletions

View File

@ -1520,6 +1520,10 @@ stepper_z config section.
[probe] [probe]
pin: pin:
# Probe detection pin. This parameter must be provided. # Probe detection pin. This parameter must be provided.
#deactivate_on_each_sample: True
# This determines if Klipper should execute deactivation gcode
# between each probe attempt when performing a multiple probe
# sequence. The default is True.
#x_offset: 0.0 #x_offset: 0.0
# The distance (in mm) between the probe and the nozzle along the # The distance (in mm) between the probe and the nozzle along the
# x-axis. The default is 0. # x-axis. The default is 0.

View File

@ -268,6 +268,8 @@ class ProbeEndstopWrapper:
def __init__(self, config): def __init__(self, config):
self.printer = config.get_printer() self.printer = config.get_printer()
self.position_endstop = config.getfloat('z_offset') self.position_endstop = config.getfloat('z_offset')
self.stow_on_each_sample = config.getboolean(
'deactivate_on_each_sample', True)
gcode_macro = self.printer.load_object(config, 'gcode_macro') gcode_macro = self.printer.load_object(config, 'gcode_macro')
self.activate_gcode = gcode_macro.load_template( self.activate_gcode = gcode_macro.load_template(
config, 'activate_gcode', '') config, 'activate_gcode', '')
@ -287,29 +289,44 @@ class ProbeEndstopWrapper:
self.home_start = self.mcu_endstop.home_start self.home_start = self.mcu_endstop.home_start
self.home_wait = self.mcu_endstop.home_wait self.home_wait = self.mcu_endstop.home_wait
self.query_endstop = self.mcu_endstop.query_endstop self.query_endstop = self.mcu_endstop.query_endstop
# multi probes state
self.multi = 'OFF'
def _build_config(self): def _build_config(self):
kin = self.printer.lookup_object('toolhead').get_kinematics() kin = self.printer.lookup_object('toolhead').get_kinematics()
for stepper in kin.get_steppers(): for stepper in kin.get_steppers():
if stepper.is_active_axis('z'): if stepper.is_active_axis('z'):
self.add_stepper(stepper) self.add_stepper(stepper)
def multi_probe_begin(self): def raise_probe(self):
pass
def multi_probe_end(self):
pass
def probe_prepare(self, hmove):
toolhead = self.printer.lookup_object('toolhead')
start_pos = toolhead.get_position()
self.activate_gcode.run_gcode_from_command()
if toolhead.get_position()[:3] != start_pos[:3]:
raise self.printer.command_error(
"Toolhead moved during probe activate_gcode script")
def probe_finish(self, hmove):
toolhead = self.printer.lookup_object('toolhead') toolhead = self.printer.lookup_object('toolhead')
start_pos = toolhead.get_position() start_pos = toolhead.get_position()
self.deactivate_gcode.run_gcode_from_command() self.deactivate_gcode.run_gcode_from_command()
if toolhead.get_position()[:3] != start_pos[:3]:
raise self.printer.command_error(
"Toolhead moved during probe activate_gcode script")
def lower_probe(self):
toolhead = self.printer.lookup_object('toolhead')
start_pos = toolhead.get_position()
self.activate_gcode.run_gcode_from_command()
if toolhead.get_position()[:3] != start_pos[:3]: if toolhead.get_position()[:3] != start_pos[:3]:
raise self.printer.command_error( raise self.printer.command_error(
"Toolhead moved during probe deactivate_gcode script") "Toolhead moved during probe deactivate_gcode script")
def multi_probe_begin(self):
if self.stow_on_each_sample:
return
self.multi = 'FIRST'
def multi_probe_end(self):
if self.stow_on_each_sample:
return
self.raise_probe()
self.multi = 'OFF'
def probe_prepare(self, hmove):
if self.multi == 'OFF' or self.multi == 'FIRST':
self.lower_probe()
if self.multi == 'FIRST':
self.multi = 'ON'
def probe_finish(self, hmove):
if self.multi == 'OFF':
self.raise_probe()
def get_position_endstop(self): def get_position_endstop(self):
return self.position_endstop return self.position_endstop