From 85563361858a47d8fdb3e57ae871cf885c7b5351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 6 May 2023 14:33:57 +0000 Subject: [PATCH 1/5] Fix unload sequence for users without MMU Restores 3.12 sequence which was working well before. M600 "L" parameter now works like M702 "U" parameter. Removed a lot of the unused parameters which were copied from Marlin 2. Change in memory: Flash: +96 bytes --- Firmware/Configuration_adv.h | 57 +------------------ Firmware/Marlin_main.cpp | 20 ++----- Firmware/ultralcd.cpp | 38 ++++++------- .../variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 1 - .../variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 1 - .../1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 1 - .../1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 1 - .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 1 - .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 1 - .../obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 1 - .../obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 1 - 11 files changed, 26 insertions(+), 97 deletions(-) diff --git a/Firmware/Configuration_adv.h b/Firmware/Configuration_adv.h index aa663228d..df26f6c23 100644 --- a/Firmware/Configuration_adv.h +++ b/Firmware/Configuration_adv.h @@ -346,62 +346,9 @@ const unsigned int dropsegments=5; //everything with less than this number of st // 2nd and 3rd byte (LSB first) contains a 16bit length of a command including its preceding comments. #define CMDHDRSIZE 3 -/** - * Advanced Pause for Filament Change - * - Adds the G-code M600 Filament Change to initiate a filament change. - * - This feature is required for the default FILAMENT_RUNOUT_SCRIPT. - * - * Requirements: - * - For Filament Change parking enable and configure NOZZLE_PARK_FEATURE. - * - For user interaction enable an LCD display, HOST_PROMPT_SUPPORT, or EMERGENCY_PARSER. - * - * Enable PARK_HEAD_ON_PAUSE to add the G-code M125 Pause and Park. - */ - -#define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. -#define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract. - // This short retract is done immediately, before parking the nozzle. #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. -#define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. -#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload. - // For Bowden, the full length of the tube and nozzle. - // For direct drive, the full length of the nozzle. - // Set to 0 for manual unloading. -#define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load. -#define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material. - // 0 to disable start loading and skip to fast load only -#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast. -#define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. -#define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle. - // For Bowden, the full length of the tube and nozzle. - // For direct drive, the full length of the nozzle. -//#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted. -#define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. -#define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading. - // Set to 0 for manual extrusion. - // Filament can be extruded repeatedly from the Filament Change menu - // until extrusion is consistent, and to purge old filament. -#define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. -//#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. - - // Filament Unload does a Retract, Delay, and Purge first: -#define FILAMENT_UNLOAD_PURGE_RETRACT 13 // (mm) Unload initial retract length. -#define FILAMENT_UNLOAD_PURGE_DELAY 5000 // (ms) Delay for the filament to cool after retract. -#define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. -#define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload - -#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety. -#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. -#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. -//#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again. -//#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing. - -//#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. -//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change - -//#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. -//#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) - +#define FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE 86.67f // (mm/s) Unload fast retract feedrate. +#define FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE 16.67f // (mm/s) Unload slow retract feedrate. // Firmware based and LCD controlled retract // M207 and M208 can be used to define parameters for the retraction. diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 48acea582..0a3a9519b 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3456,7 +3456,7 @@ static void mmu_M600_load_filament(bool automatic, float nozzle_temp) { st_synchronize(); } -static void gcode_M600(bool automatic, float x_position, float y_position, float z_shift, float e_shift, float /*e_shift_late*/) { +static void gcode_M600(bool automatic, float x_position, float y_position, float z_shift, float e_shift, float e_shift_late) { st_synchronize(); float lastpos[4]; @@ -3492,7 +3492,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float } else { // Beep, manage nozzle heater and wait for user to start unload filament M600_wait_for_user(HotendTempBckp); - unload_filament(FILAMENTCHANGE_FINALRETRACT); + unload_filament(e_shift_late); } st_synchronize(); // finish moves { @@ -7586,7 +7586,7 @@ Sigma_Exit: - `Y` - Y position, default 0 - `Z` - relative lift Z, default MIN_Z_FOR_SWAP. - `E` - initial retract, default -2 - - `L` - later retract distance for removal, default -80 + - `L` - later retract distance for removal, default 0 - `AUTO` - Automatically (only with MMU) */ case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] @@ -7612,17 +7612,7 @@ Sigma_Exit: #endif } - //currently don't work as we are using the same unload sequence as in M702, needs re-work - if (code_seen('L')) - { - e_shift_late = code_value(); - } - else - { - #ifdef FILAMENTCHANGE_FINALRETRACT - e_shift_late = FILAMENTCHANGE_FINALRETRACT; - #endif - } + if (code_seen('L')) e_shift_late = code_value(); // Z lift. For safety only allow positive values if (code_seen('Z')) z_shift = fabs(code_value()); @@ -8436,7 +8426,7 @@ Sigma_Exit: case 702: { float z_target = 0; - float unloadLength = FILAMENTCHANGE_FINALRETRACT; + float unloadLength = 0; if (code_seen('U')) unloadLength = code_value(); // For safety only allow positive values diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 3ad8d192e..e2e4e0591 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3859,10 +3859,8 @@ void lcd_wizard(WizState state) setTargetHotend(PLA_PREHEAT_HOTEND_TEMP); lcd_display_message_fullscreen_P(_i("Now I will preheat nozzle for PLA.")); ////MSG_WIZARD_WILL_PREHEAT c=20 r=4 wait_preheat(); - //unload current filament - unload_filament(FILAMENTCHANGE_FINALRETRACT); - //load filament - lcd_wizard_load(); + unload_filament(0); // unload current filament + lcd_wizard_load(); // load filament setTargetHotend(0); //we are finished, cooldown nozzle state = S::Restore; } @@ -4856,29 +4854,32 @@ static void mmu_loading_test_menu() { /// @param unloadLength Retract distance for removal (manual reload) void unload_filament(float unloadLength) { - custom_message_type = CustomMsg::FilamentLoading; - lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT)); + custom_message_type = CustomMsg::FilamentLoading; + lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT)); FSensorBlockRunout fsBlockRunout; - // Retract filament - current_position[E_AXIS] += -FILAMENT_UNLOAD_PURGE_RETRACT; - plan_buffer_line_curposXYZE(PAUSE_PARK_RETRACT_FEEDRATE); + current_position[E_AXIS] -= 45; + plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE); st_synchronize(); - // Wait for filament to cool - delay_keep_alive(FILAMENT_UNLOAD_PURGE_DELAY); - - // Quickly purge - current_position[E_AXIS] += (FILAMENT_UNLOAD_PURGE_RETRACT + FILAMENT_UNLOAD_PURGE_LENGTH); - plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_PURGE_FEEDRATE); + current_position[E_AXIS] -= 15; + plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE); st_synchronize(); - // Configurable length - current_position[E_AXIS] += unloadLength; - plan_buffer_line_curposXYZE(FILAMENT_CHANGE_UNLOAD_FEEDRATE); + current_position[E_AXIS] -= 20; + plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE); st_synchronize(); + // Configurable length, by default it's 0. + // only plan the move if the length is set to a non-zero value + if (unloadLength) + { + current_position[E_AXIS] += unloadLength; + plan_buffer_line_curposXYZE(FILAMENT_CHANGE_UNLOAD_FEEDRATE); + st_synchronize(); + } + lcd_display_message_fullscreen_P(_T(MSG_PULL_OUT_FILAMENT)); //disable extruder steppers so filament can be removed @@ -4898,7 +4899,6 @@ void unload_filament(float unloadLength) lcd_setstatuspgm(MSG_WELCOME); custom_message_type = CustomMsg::Status; - eFilamentAction = FilamentAction::None; } diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index d227f54af..5d3c63e5c 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -219,7 +219,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 33217ad65..31c343107 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -220,7 +220,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index 6b0d3e8a7..6024ef5b2 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -219,7 +219,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 692616786..59531ff5e 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -220,7 +220,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index dffc509d3..151636797 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -358,7 +358,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 3a2a1359c..3c3634bd0 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -362,7 +362,6 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h index 31ded6c88..bdb1de69d 100644 --- a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -149,7 +149,6 @@ CHANGE FILAMENT SETTINGS #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 50 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h index 9a8086739..f66a56f88 100644 --- a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -148,7 +148,6 @@ CHANGE FILAMENT SETTINGS #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 50 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) From 71180ac28471ba7d05fcbf8be23956d05644fc08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 6 May 2023 14:53:36 +0000 Subject: [PATCH 2/5] Cleanup M600 init Instead of removing FILAMENTCHANGE_FINALRETRACT just set it to 0 No change in memory --- Firmware/Marlin_main.cpp | 79 ++++++------------- .../variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h | 1 + .../variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h | 1 + .../1_75mm_MK25S-RAMBo10a-E3Dv6full.h | 1 + .../1_75mm_MK25S-RAMBo13a-E3Dv6full.h | 1 + .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 1 + .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 1 + .../obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 1 + .../obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 1 + 9 files changed, 33 insertions(+), 54 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0a3a9519b..d4d5a6eed 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3456,7 +3456,7 @@ static void mmu_M600_load_filament(bool automatic, float nozzle_temp) { st_synchronize(); } -static void gcode_M600(bool automatic, float x_position, float y_position, float z_shift, float e_shift, float e_shift_late) { +static void gcode_M600(const bool automatic, const float x_position, const float y_position, const float z_shift, const float e_shift, const float e_shift_late) { st_synchronize(); float lastpos[4]; @@ -7582,69 +7582,40 @@ Sigma_Exit: M600 [ X | Y | Z | E | L | AUTO ] - - `X` - X position, default 211 - - `Y` - Y position, default 0 + - `X` - X position, default FILAMENTCHANGE_XPOS + - `Y` - Y position, default FILAMENTCHANGE_YPOS - `Z` - relative lift Z, default MIN_Z_FOR_SWAP. - - `E` - initial retract, default -2 - - `L` - later retract distance for removal, default 0 + - `E` - initial retract, default FILAMENTCHANGE_FIRSTRETRACT + - `L` - later retract distance for removal, default FILAMENTCHANGE_FINALRETRACT - `AUTO` - Automatically (only with MMU) */ case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] - { - st_synchronize(); + { + st_synchronize(); - float x_position = current_position[X_AXIS]; - float y_position = current_position[Y_AXIS]; - float z_shift = MIN_Z_FOR_SWAP; - float e_shift_init = 0; - float e_shift_late = 0; - bool automatic = false; - - //Retract extruder - if(code_seen('E')) - { - e_shift_init = code_value(); - } - else - { - #ifdef FILAMENTCHANGE_FIRSTRETRACT - e_shift_init = FILAMENTCHANGE_FIRSTRETRACT ; - #endif - } + float x_position = FILAMENTCHANGE_XPOS; + float y_position = FILAMENTCHANGE_YPOS; + float z_shift = MIN_Z_FOR_SWAP; + float e_shift_init = FILAMENTCHANGE_FIRSTRETRACT; + float e_shift_late = FILAMENTCHANGE_FINALRETRACT; + bool automatic = false; - if (code_seen('L')) e_shift_late = code_value(); + //Retract extruder + if (code_seen('E')) e_shift_init = code_value(); + if (code_seen('L')) e_shift_late = code_value(); - // Z lift. For safety only allow positive values - if (code_seen('Z')) z_shift = fabs(code_value()); + // Z lift. For safety only allow positive values + if (code_seen('Z')) z_shift = fabs(code_value()); - //Move XY to side - if(code_seen('X')) - { - x_position = code_value(); - } - else - { - #ifdef FILAMENTCHANGE_XPOS - x_position = FILAMENTCHANGE_XPOS; - #endif - } - if(code_seen('Y')) - { - y_position = code_value(); - } - else - { - #ifdef FILAMENTCHANGE_YPOS - y_position = FILAMENTCHANGE_YPOS ; - #endif - } + //Move XY to side + if (code_seen('X')) x_position = code_value(); + if (code_seen('Y')) y_position = code_value(); - if (MMU2::mmu2.Enabled() && code_seen_P(PSTR("AUTO"))) - automatic = true; + if (MMU2::mmu2.Enabled() && code_seen_P(PSTR("AUTO"))) + automatic = true; - gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late); - - } + gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late); + } break; #endif //FILAMENTCHANGEENABLE diff --git a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h index 5d3c63e5c..a4721d978 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h @@ -219,6 +219,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h index 31c343107..470a02c06 100644 --- a/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h @@ -220,6 +220,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h index 6024ef5b2..ae7237305 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h @@ -219,6 +219,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h index 59531ff5e..6e266cc1f 100644 --- a/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h @@ -220,6 +220,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 151636797..21adab2d1 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -358,6 +358,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 3c3634bd0..ee7550acd 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -362,6 +362,7 @@ #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 25 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h index bdb1de69d..6aace7ed1 100644 --- a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -149,6 +149,7 @@ CHANGE FILAMENT SETTINGS #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 50 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) diff --git a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h index f66a56f88..b69a405ee 100644 --- a/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/obsolete/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -148,6 +148,7 @@ CHANGE FILAMENT SETTINGS #define FILAMENTCHANGE_YPOS 0 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 +#define FILAMENTCHANGE_FINALRETRACT 0 #define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600) #define FILAMENTCHANGE_FINALFEED 50 //E distance in mm for slow filament loading sequence used used in filament change (M600) and filament load (M701) From d781dae35bc511a554014d050721f5b544677ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 6 May 2023 14:55:44 +0000 Subject: [PATCH 3/5] Combine two moves since they have the same feedrate Change in memory: Flash: -60 bytes SRAM: 0 bytes --- Firmware/ultralcd.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e2e4e0591..2b1f7e8c2 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4863,11 +4863,7 @@ void unload_filament(float unloadLength) plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE); st_synchronize(); - current_position[E_AXIS] -= 15; - plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE); - st_synchronize(); - - current_position[E_AXIS] -= 20; + current_position[E_AXIS] -= 35; plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE); st_synchronize(); From e24c2200f12e9ead1143372a8067c77ac52d45ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Mon, 8 May 2023 19:33:42 +0000 Subject: [PATCH 4/5] Set FILAMENTCHANGE_FINALRETRACT instead of hardcoded 0 --- Firmware/Marlin_main.cpp | 4 ++-- Firmware/ultralcd.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index d4d5a6eed..351e2aec8 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8391,13 +8391,13 @@ Sigma_Exit: M702 [ U | Z ] #### Parameters - - `U` - Retract distance for removal (manual reload). Default value is 0. + - `U` - Retract distance for removal (manual reload). Default value is FILAMENTCHANGE_FINALRETRACT. - `Z` - Move the Z axis by this distance. Default value is 0 to maintain backwards compatibility with older gcodes. */ case 702: { float z_target = 0; - float unloadLength = 0; + float unloadLength = FILAMENTCHANGE_FINALRETRACT; if (code_seen('U')) unloadLength = code_value(); // For safety only allow positive values diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2b1f7e8c2..f24338b6b 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3859,7 +3859,7 @@ void lcd_wizard(WizState state) setTargetHotend(PLA_PREHEAT_HOTEND_TEMP); lcd_display_message_fullscreen_P(_i("Now I will preheat nozzle for PLA.")); ////MSG_WIZARD_WILL_PREHEAT c=20 r=4 wait_preheat(); - unload_filament(0); // unload current filament + unload_filament(FILAMENTCHANGE_FINALRETRACT); // unload current filament lcd_wizard_load(); // load filament setTargetHotend(0); //we are finished, cooldown nozzle state = S::Restore; From 3c79e77220ed6d1471ac1d06e77835b426061c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Mon, 8 May 2023 19:44:13 +0000 Subject: [PATCH 5/5] Create define for two hardcoded values --- Firmware/Configuration_adv.h | 8 +++++--- Firmware/ultralcd.cpp | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Firmware/Configuration_adv.h b/Firmware/Configuration_adv.h index df26f6c23..94b86c608 100644 --- a/Firmware/Configuration_adv.h +++ b/Firmware/Configuration_adv.h @@ -346,9 +346,11 @@ const unsigned int dropsegments=5; //everything with less than this number of st // 2nd and 3rd byte (LSB first) contains a 16bit length of a command including its preceding comments. #define CMDHDRSIZE 3 -#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. -#define FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE 86.67f // (mm/s) Unload fast retract feedrate. -#define FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE 16.67f // (mm/s) Unload slow retract feedrate. +#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10.f // (mm/s) Unload filament feedrate. This can be pretty fast. +#define FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE 86.67f // (mm/s) Unload fast retract feedrate. +#define FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE 16.67f // (mm/s) Unload slow retract feedrate. +#define FILAMENT_UNLOAD_FAST_RETRACT_LENGTH 45.f // (mm) Unload fast retract length. +#define FILAMENT_UNLOAD_SLOW_RETRACT_LENGTH 35.f // (mm) Unload slow retract length. // Firmware based and LCD controlled retract // M207 and M208 can be used to define parameters for the retraction. diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f24338b6b..4c0edabdf 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4859,11 +4859,11 @@ void unload_filament(float unloadLength) FSensorBlockRunout fsBlockRunout; - current_position[E_AXIS] -= 45; + current_position[E_AXIS] -= FILAMENT_UNLOAD_FAST_RETRACT_LENGTH; plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_FAST_RETRACT_FEEDRATE); st_synchronize(); - current_position[E_AXIS] -= 35; + current_position[E_AXIS] -= FILAMENT_UNLOAD_SLOW_RETRACT_LENGTH; plan_buffer_line_curposXYZE(FILAMENT_UNLOAD_SLOW_RETRACT_FEEDRATE); st_synchronize();