From a4ee731a53d63900cae64be0bb54d6fe79b66ea1 Mon Sep 17 00:00:00 2001 From: gudnimg Date: Sat, 14 Sep 2024 12:40:35 +0000 Subject: [PATCH 1/2] PFW-1561 MMU unload when there are no fan errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EFCE_FIXED is set to EFCE_OK only when the printer is not active. This resolves an issue where, while the print job is paused due to the fan error; if you allow the extruder to cool down below 50°C, then the printer will still try to heat up the extruder to do the unload. Instead of allowing both EFCE_OK and EFCE_FIXED. Only allow unloading if fan_check_error == EFCE_OK --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 1ac744c11a..14f4112af1 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5676,7 +5676,7 @@ void lcd_print_stop_finish() if (MMU2::mmu2.Enabled() && MMU2::mmu2.FindaDetectsFilament() #ifdef FANCHECK - && fan_check_error != EFCE_REPORTED + && fan_check_error == EFCE_OK #endif //FANCHECK ) { // The print was aborted while when the nozzle was cold: From 0fadb210ddd0be29295543d1747fe9b6ae1fe3a5 Mon Sep 17 00:00:00 2001 From: gudnimg Date: Sat, 14 Sep 2024 12:50:21 +0000 Subject: [PATCH 2/2] PFW-1561 Use did_pause_print explicitly print_job_timer is stopped at this point so print_job_timer.paused() always yields false. For this reason here we only need to check did_pause_print. I think this makes the code a bit easier to read and gives a reason why we are clearing the flag at the end of the function. --- Firmware/ultralcd.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 14f4112af1..2862383070 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5682,9 +5682,7 @@ void lcd_print_stop_finish() // The print was aborted while when the nozzle was cold: // 1. in a paused state => a partial backup in RAM is always available // 2. after a recoverable thermal/fan error had paused the print => only extruder temperature is saved to RAM - if (printingIsPaused()) - { - // Restore temperature saved in ram after pausing print + if (did_pause_print) { restore_extruder_temperature_from_ram(); }