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)