Skip to content

Commit 533d752

Browse files
authored
✨ EVENT_GCODE_(BEFORE|AFTER)_G34 (#27930)
1 parent 037b009 commit 533d752

3 files changed

Lines changed: 42 additions & 14 deletions

File tree

Marlin/Configuration_adv.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,26 @@
10811081
#define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle
10821082
#define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment
10831083
#define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this
1084+
10841085
#define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done?
1086+
10851087
// After G34, re-home Z (G28 Z) or just calculate it from the last probe heights?
10861088
// Re-homing might be more precise in reproducing the actual 'G28 Z' homing height, especially on an uneven bed.
10871089
#define HOME_AFTER_G34
1088-
#endif
1090+
1091+
/**
1092+
* Commands to execute at the start of G34 probing,
1093+
* after switching to the PROBING_TOOL.
1094+
*/
1095+
//#define EVENT_GCODE_BEFORE_G34 "M300 P440 S200"
1096+
1097+
/**
1098+
* Commands to execute at the end of G34 probing.
1099+
* Useful to retract or move the Z probe out of the way.
1100+
*/
1101+
//#define EVENT_GCODE_AFTER_G34 "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
1102+
1103+
#endif // Z_STEPPER_AUTO_ALIGN
10891104

10901105
/**
10911106
* Assisted Tramming

Marlin/src/gcode/calibrate/G34_M422.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ void GcodeSuite::G34() {
143143

144144
probe.use_probing_tool();
145145

146+
#ifdef EVENT_GCODE_BEFORE_G34
147+
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Before G34 G-code: ", F(EVENT_GCODE_BEFORE_G34));
148+
gcode.process_subcommands_now(F(EVENT_GCODE_BEFORE_G34));
149+
#endif
150+
146151
TERN_(HAS_DUPLICATION_MODE, set_duplication_enabled(false));
147152

148153
// Compute a worst-case clearance height to probe from. After the first
@@ -214,19 +219,20 @@ void GcodeSuite::G34() {
214219
// Probing sanity check is disabled, as it would trigger even in normal cases because
215220
// current_position.z has been manually altered in the "dirty trick" above.
216221

217-
if (DEBUGGING(LEVELING))
218-
DEBUG_ECHOLNPGM(
219-
"Z_PROBE_LOW_POINT: ", p_float_t(Z_PROBE_LOW_POINT, 2),
220-
"z_probe: ", p_float_t(z_probe, 2),
221-
"Probe Tgt: ", p_float_t((Z_PROBE_LOW_POINT) - z_probe * 0.5f, 2)
222-
);
222+
const float minz = (Z_PROBE_LOW_POINT) - (z_probe * 0.5f);
223+
224+
if (DEBUGGING(LEVELING)) {
225+
DEBUG_ECHOPGM("Z_PROBE_LOW_POINT: " STRINGIFY(Z_PROBE_LOW_POINT));
226+
DEBUG_ECHOLNPGM(" z_probe: ", p_float_t(z_probe, 3),
227+
" Probe Tgt: ", p_float_t(minz, 3));
228+
}
223229

224230
const float z_probed_height = probe.probe_at_point(
225231
DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), // xy
226232
raise_after, // raise_after
227233
(DEBUGGING(LEVELING) || DEBUGGING(INFO)) ? 3 : 0, // verbose_level
228234
true, false, // probe_relative, sanity_check
229-
(Z_PROBE_LOW_POINT) - (z_probe * 0.5f), // z_min_point
235+
minz, // z_min_point
230236
Z_TWEEN_SAFE_CLEARANCE // z_clearance
231237
);
232238

@@ -303,7 +309,7 @@ void GcodeSuite::G34() {
303309

304310
SERIAL_EOL();
305311

306-
SString<15 + TERN0(TRIPLE_Z, 30) + TERN0(QUAD_Z, 45)> msg(F("1:2="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3));
312+
SString<15 + TERN0(TRIPLE_Z, 30) + TERN0(QUAD_Z, 45)> msg(F("2-1="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3));
307313
#if TRIPLE_Z
308314
msg.append(F(" 3-2="), p_float_t(ABS(z_measured[2] - z_measured[1]), 3))
309315
.append(F(" 3-1="), p_float_t(ABS(z_measured[2] - z_measured[0]), 3));
@@ -414,7 +420,7 @@ void GcodeSuite::G34() {
414420
SERIAL_ECHOLNPGM("G34 aborted.");
415421
else {
416422
SERIAL_ECHOLNPGM("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
417-
SERIAL_ECHOLNPGM("Accuracy: ", p_float_t(z_maxdiff, 2));
423+
SERIAL_ECHOLNPGM("Accuracy: ", p_float_t(z_maxdiff, 3));
418424
}
419425

420426
// Stow the probe because the last call to probe.probe_at_point(...)
@@ -430,16 +436,22 @@ void GcodeSuite::G34() {
430436
// Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier.
431437
if (DEBUGGING(LEVELING))
432438
DEBUG_ECHOLNPGM(
433-
"z_measured_min: ", p_float_t(z_measured_min, 2),
434-
"Z_TWEEN_SAFE_CLEARANCE: ", p_float_t(Z_TWEEN_SAFE_CLEARANCE, 2),
435-
"zoffs: ", p_float_t(zoffs, 2)
439+
"z_measured_min: ", p_float_t(z_measured_min, 3),
440+
"Z_TWEEN_SAFE_CLEARANCE: ", p_float_t(Z_TWEEN_SAFE_CLEARANCE, 3),
441+
"zoffs: ", p_float_t(zoffs, 3)
436442
);
437443

438444
if (!err_break)
439445
current_position.z -= z_measured_min - (Z_TWEEN_SAFE_CLEARANCE + zoffs); // We shouldn't want to subtract the clearance from here right? (Depends if we added it further up)
440446
sync_plan_position();
441447
#endif
442448

449+
#ifdef EVENT_GCODE_AFTER_G34
450+
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("After G34 G-code: ", F(EVENT_GCODE_AFTER_G34));
451+
planner.synchronize();
452+
process_subcommands_now(F(EVENT_GCODE_AFTER_G34));
453+
#endif
454+
443455
probe.use_probing_tool(false);
444456

445457
#if ALL(HAS_LEVELING, RESTORE_LEVELING_AFTER_G34)

buildroot/tests/LPC1769

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ opt_set MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO SERIAL_PORT -1 \
8383
Z_MIN_ENDSTOP_HIT_STATE HIGH
8484
opt_enable PIDTEMPBED \
8585
FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE \
86-
BLTOUCH BLTOUCH_FORCE_SW_MODE USE_PROBE_FOR_Z_HOMING Z_SAFE_HOMING QUICK_HOME Z_STEPPER_AUTO_ALIGN \
86+
BLTOUCH BLTOUCH_FORCE_SW_MODE USE_PROBE_FOR_Z_HOMING Z_SAFE_HOMING QUICK_HOME \
87+
Z_STEPPER_AUTO_ALIGN EVENT_GCODE_BEFORE_G34 EVENT_GCODE_AFTER_G34 \
8788
AUTO_BED_LEVELING_BILINEAR EXTRAPOLATE_BEYOND_GRID RESTORE_LEVELING_AFTER_G28 LCD_BED_LEVELING MESH_EDIT_MENU \
8889
EEPROM_SETTINGS EEPROM_AUTO_INIT \
8990
SDSUPPORT CR10_STOCKDISPLAY SPEAKER LCD_INFO_MENU STATUS_MESSAGE_SCROLLING \

0 commit comments

Comments
 (0)