I upgraded from 3.4.6 to 3.5.0-rc.3 and started getting spurious aborts while docking the Z probe on my printer. After a bunch of experiments I've managed to get a minimal repro script for the problem.
Save the script below as test.g
in the sys
directory (or macros
, it doesn't matter, but I'm assuming it's in sys
).
If you execute it from the console with M98 P"test.h"
then it'll work as you expect. If you put that same line in a print job (a job with just that one line will do) and start the job the second abort
command will trigger when the pause starts, i.e. before the if
statement is reached.
; Use probe 1 as a dummy source for values
M558 K1 P8 C"0.io6.in" H2 F1000
; Center the head before we start
G0 X{(move.axes[0].max - move.axes[0].min) / 2} Y{(move.axes[1].max - move.axes[1].min) / 2} Z50 F10000
M400
;
; First test block
;
echo "1.0 Starting test"
G91
echo "1.1 Commanding move"
G0 X50 F1000 ; ** Need to command a move for the problem to occur.
G90
G31 K1 P2000 ; ** Need to set threshold so the 'if' statement below will evaluate to true before the pause.
echo "1.2 Pausing"
G4 P1 ; ** Need a delay after the move.
echo "1.3 Setting threshold to 500"
G31 K1 P500 ; Set threshold to 500 so the 'if' statement below should be false and the 'abort' shouldn't be executed.
echo "1.4 Testing to see if probe speed "^sensors.probes[1].speeds[0]^" is less than threshold "^sensors.probes[1].threshold
if sensors.probes[1].speeds[0] < sensors.probes[1].threshold
abort "1.5 SHOULD NEVER FIRE: Probe speed "^sensors.probes[1].speeds[0]^" is less than threshold "^sensors.probes[1].threshold
echo "1.6 Finished test"
Output if you run the script from the console:
09/02/2024, 8:21:00 pm M98 P"test.g"
1.0 Starting test
1.1 Commanding move
1.2 Pausing
09/02/2024, 8:21:03 pm 1.3 Setting threshold to 500
1.4 Testing to see if probe speed 1000.0 is less than threshold 500
1.6 Finished test
Output if you run the script from a job:
09/02/2024, 8:22:09 pm M32 "0:/gcodes/run-test.g"
File 0:/gcodes/run-test.g selected for printing
1.0 Starting test
1.1 Commanding move
1.2 Pausing
Cancelled printing file 0:/gcodes/run-test.g, print time was 0h 0m
1.5 SHOULD NEVER FIRE: Probe speed 1000.0 is less than threshold 2000
09/02/2024, 8:22:12 pm 1.3 Setting threshold to 500
1.4 Testing to see if probe speed 1000.0 is less than threshold 500
1.6 Finished test
This is the same issue I see in probe dock/undock process, the critical bits being the move, the condition for the if
being true before the pause, and the pause.
EDIT: Re-pasted test.g
script to fix up the problem @OwenD pointed out, which seems to have happened copying & pasting the code.