aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2024-05-31 13:17:41 -0400
committerKevin O'Connor <kevin@koconnor.net>2024-06-14 13:38:07 -0400
commit8de7153952c7513adec9f35a8d05b9f8bd00710a (patch)
treeca0ebfda82df1f6947c893631f972c18e435e05a /klippy
parent0d87bec159eba63744d820b5beaef5da20388ba4 (diff)
downloadkutter-8de7153952c7513adec9f35a8d05b9f8bd00710a.tar.gz
kutter-8de7153952c7513adec9f35a8d05b9f8bd00710a.tar.xz
kutter-8de7153952c7513adec9f35a8d05b9f8bd00710a.zip
probe: Rework ProbePointsHelper to store results locally
Store the results of each probe attempt in a local "results" variable (instead of a class variable) when performing "automatic" probes. This is in preparation for gathering the results in the probing implementation. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extras/probe.py66
1 files changed, 39 insertions, 27 deletions
diff --git a/klippy/extras/probe.py b/klippy/extras/probe.py
index 5a976a06..944956ea 100644
--- a/klippy/extras/probe.py
+++ b/klippy/extras/probe.py
@@ -386,7 +386,7 @@ class ProbePointsHelper:
# Internal probing state
self.lift_speed = self.speed
self.probe_offsets = (0., 0., 0.)
- self.results = []
+ self.manual_results = []
def minimum_points(self,n):
if len(self.probe_points) < n:
raise self.printer.config_error(
@@ -398,34 +398,33 @@ class ProbePointsHelper:
self.use_offsets = use_offsets
def get_lift_speed(self):
return self.lift_speed
- def _move_next(self):
- toolhead = self.printer.lookup_object('toolhead')
- # Lift toolhead
+ def _move(self, coord, speed):
+ self.printer.lookup_object('toolhead').manual_move(coord, speed)
+ def _raise_tool(self, is_first=False):
speed = self.lift_speed
- if not self.results:
+ if is_first:
# Use full speed to first probe position
speed = self.speed
- toolhead.manual_move([None, None, self.horizontal_move_z], speed)
- # Check if done probing
- if len(self.results) >= len(self.probe_points):
- toolhead.get_last_move_time()
- res = self.finalize_callback(self.probe_offsets, self.results)
- if res != "retry":
- return True
- self.results = []
+ self._move([None, None, self.horizontal_move_z], speed)
+ def _invoke_callback(self, results):
+ # Flush lookahead queue
+ toolhead = self.printer.lookup_object('toolhead')
+ toolhead.get_last_move_time()
+ # Invoke callback
+ res = self.finalize_callback(self.probe_offsets, results)
+ return res != "retry"
+ def _move_next(self, probe_num):
# Move to next XY probe point
- nextpos = list(self.probe_points[len(self.results)])
+ nextpos = list(self.probe_points[probe_num])
if self.use_offsets:
nextpos[0] -= self.probe_offsets[0]
nextpos[1] -= self.probe_offsets[1]
- toolhead.manual_move(nextpos, self.speed)
- return False
+ self._move(nextpos, self.speed)
def start_probe(self, gcmd):
manual_probe.verify_no_manual_probe(self.printer)
# Lookup objects
probe = self.printer.lookup_object('probe', None)
method = gcmd.get('METHOD', 'automatic').lower()
- self.results = []
def_move_z = self.default_horizontal_move_z
self.horizontal_move_z = gcmd.get_float('HORIZONTAL_MOVE_Z',
def_move_z)
@@ -433,6 +432,7 @@ class ProbePointsHelper:
# Manual probe
self.lift_speed = self.speed
self.probe_offsets = (0., 0., 0.)
+ self.manual_results = []
self._manual_probe_start()
return
# Perform automatic probing
@@ -441,24 +441,36 @@ class ProbePointsHelper:
if self.horizontal_move_z < self.probe_offsets[2]:
raise gcmd.error("horizontal_move_z can't be less than"
" probe's z_offset")
+ results = []
probe_session = probe.start_probe_session(gcmd)
while 1:
- done = self._move_next()
- if done:
- break
+ self._raise_tool(not results)
+ if len(results) >= len(self.probe_points):
+ done = self._invoke_callback(results)
+ if done:
+ break
+ # Caller wants a "retry" - clear results and restart probing
+ results = []
+ self._move_next(len(results))
pos = probe_session.run_probe(gcmd)
- self.results.append(pos)
+ results.append(pos)
probe_session.end_probe_session()
def _manual_probe_start(self):
- done = self._move_next()
- if not done:
- gcmd = self.gcode.create_gcode_command("", "", {})
- manual_probe.ManualProbeHelper(self.printer, gcmd,
- self._manual_probe_finalize)
+ self._raise_tool(not self.manual_results)
+ if len(self.manual_results) >= len(self.probe_points):
+ done = self._invoke_callback(self.manual_results)
+ if done:
+ return
+ # Caller wants a "retry" - clear results and restart probing
+ self.manual_results = []
+ self._move_next(len(self.manual_results))
+ gcmd = self.gcode.create_gcode_command("", "", {})
+ manual_probe.ManualProbeHelper(self.printer, gcmd,
+ self._manual_probe_finalize)
def _manual_probe_finalize(self, kin_pos):
if kin_pos is None:
return
- self.results.append(kin_pos)
+ self.manual_results.append(kin_pos)
self._manual_probe_start()
# Helper to obtain a single probe measurement