diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 438b66c8e..ddf70b8d3 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3576,7 +3576,7 @@ static void gcode_M600(const bool automatic, const float x_position, const float custom_message_type = CustomMsg::Status; } -void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex){ +void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex, bool raise_z_axis = false){ FSensorBlockRunout fsBlockRunout; prusa_statistics(22); @@ -3592,6 +3592,10 @@ void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex){ current_position[E_AXIS] += fastLoadLength; plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST); //fast sequence + if (raise_z_axis) { // backwards compatibility for 3.12 and older FW + raise_z_above(MIN_Z_FOR_LOAD); + } + load_filament_final_feed(); // slow sequence st_synchronize(); @@ -8769,13 +8773,12 @@ Sigma_Exit: // Z lift. For safety only allow positive values if (code_seen('Z')) z_target = fabs(code_value()); - else raise_z_above(MIN_Z_FOR_LOAD); // backwards compatibility for 3.12 and older FW - + // Raise the Z axis float delta = raise_z(z_target); // Load filament - gcode_M701(fastLoadLength, mmuSlotIndex); + gcode_M701(fastLoadLength, mmuSlotIndex, !code_seen('Z')); // if no z -> trigger MIN_Z_FOR_LOAD for backwards compatibility on 3.12 and older FW // Restore Z axis raise_z(-delta); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 42c0382d9..8ee9733f8 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1988,7 +1988,6 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed) // modified elsewhere and needs to be redrawn in full. // reset bFilamentWaitingFlag immediately to avoid re-entry from raise_z_above()! - bool once = !bFilamentWaitingFlag; bFilamentWaitingFlag = true; // also force-enable lcd_draw_update (might be 0 when called from outside a menu) @@ -2005,12 +2004,10 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed) case FilamentAction::MmuLoad: case FilamentAction::MmuLoadingTest: lcd_puts_P(_T(MSG_PREHEATING_TO_LOAD)); - if (once) raise_z_above(MIN_Z_FOR_LOAD); break; case FilamentAction::UnLoad: case FilamentAction::MmuUnLoad: lcd_puts_P(_T(MSG_PREHEATING_TO_UNLOAD)); - if (once) raise_z_above(MIN_Z_FOR_UNLOAD); break; case FilamentAction::MmuEject: lcd_puts_P(_T(MSG_PREHEATING_TO_EJECT));