Drop the PARK= opt-out from TOOL_LOCATE_SENSOR

The station pass needs an empty carriage, so with a toolchanger it always
parks: PARK=0 only said "I docked it by hand", which the sensor check
right below already decides for itself. Without [ff_toolchange] there is
no TOOLCHANGE_PARK to call and no sensor to ask, so the pass just runs --
where it used to demand PARK=0 before it would.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UfsqVZ3aXL3qxr3BFDS35x
This commit is contained in:
Oleksandr ShyshatskyiandClaude Opus 5 committed 2026-08-31 20:49:34 +03:00
1 parent af16ea0cb5
commit 01e53aa3f6
2 files changed
+13 -14

No files matched your search

+5 -4
View File
@@ -86,9 +86,9 @@ difference between a first layer that sticks and one that does not.
#### `TOOL_LOCATE_SENSOR` — the reference
`[PARK=1] [SAVE=1]`
`[SAVE=1]`
1. Parks the mounted tool (`PARK=0` if you docked it by hand) and verifies
1. Homes if any axis is unhomed, parks the mounted tool, and verifies
the carriage really is empty, from the dock and grab sensors.
2. Plate check: probes station Z with the bare carriage, then sideways for
the bore edge.
@@ -107,8 +107,9 @@ carriage** — select the tool first.
`[SAVE=1]`
1. Plate check. It needs an empty carriage, so it parks your tool and picks
it straight back up — that is expected, not a fault.
1. Homes if any axis is unhomed, then the plate check. Both need an empty
carriage, so your tool is parked and picked straight back up — that is
expected, not a fault.
2. Zeroes the G-code offset and works in raw machine coordinates.
3. Same two passes as above, from `cylinder_x − 12.5` (16.0 stock), with the
nozzle doing the touching.
@@ -785,20 +785,18 @@ class FFToolOffset:
cmd_TOOL_LOCATE_SENSOR_help = (
"Locate the station with an EMPTY carriage (station_x/y/z) "
"([PARK=1] [SAVE=1] [PLATE_CHECK=1] [SAMPLES=] [SAMPLES_TOLERANCE=]"
"([SAVE=1] [PLATE_CHECK=1] [SAMPLES=] [SAMPLES_TOLERANCE=]"
" [SAMPLES_TOLERANCE_RETRIES=] [SAMPLES_RESULT=]"
" [SAMPLE_RETRACT_DIST=] [PROBE_SPEED=])")
def cmd_TOOL_LOCATE_SENSOR(self, gcmd):
park = gcmd.get_int('PARK', 1, minval=0, maxval=1)
save = gcmd.get_int('SAVE', 1, minval=0, maxval=1)
try:
self._check_homed(gcmd)
if self.toolchange is not None:
if park:
# releaseFourExtruder: the carriage must be empty for TS.
self._run('TOOLCHANGE_PARK')
self._wait_moves()
# releaseFourExtruder: the carriage must be empty for TS.
self._run('TOOLCHANGE_PARK')
self._wait_moves()
carriage = self.toolchange.get_status(self.reactor.monotonic())
if carriage.get('current_tool', -1) != -1 \
or not carriage.get('state_ok'):
@@ -806,10 +804,10 @@ class FFToolOffset:
"%s: carriage is not verifiably empty (%s) -- the"
" station pass must run with no tool mounted"
% (self.name, carriage.get('state_reason')))
elif park:
raise gcmd.error("%s: [ff_toolchange] not loaded -- park"
" the tool by hand and pass PARK=0."
% self.name)
# With no [ff_toolchange] there is no TOOLCHANGE_PARK to call and
# no sensor that can confirm the carriage is empty. Emptying it is
# the operator's job then, as it is on any printer without a
# toolchanger.
self._run_plate_check(gcmd)
cylinder_x, cylinder_y = self._cylinder()
gcmd.respond_info("station calibration, start %.3f, %.3f"