Skip to content

Commit be14933

Browse files
studiodynethinkyhead
authored andcommitted
✨ M217 G wipe retract length
1 parent 1f72c83 commit be14933

File tree

8 files changed

+40
-29
lines changed

8 files changed

+40
-29
lines changed

Marlin/Configuration_adv.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2527,7 +2527,7 @@
25272527
// Longer prime to clean out a SINGLENOZZLE
25282528
#define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length
25292529
#define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate
2530-
#define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm) Retract before cooling for less stringing, better wipe, etc.
2530+
#define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm) Cutting retraction out of park, for less stringing, better wipe, etc. Adjust with LCD or M217 G.
25312531

25322532
// Cool after prime to reduce stringing
25332533
#define TOOLCHANGE_FS_FAN -1 // Fan index or -1 to skip

Marlin/src/gcode/config/M217.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@
4343
* S[linear] Swap length
4444
* B[linear] Extra Swap resume length
4545
* E[linear] Extra Prime length (as used by M217 Q)
46-
* P[linear/min] Prime speed
46+
* G[linear] Cutting wipe retract length (<=100mm)
4747
* R[linear/min] Retract speed
4848
* U[linear/min] UnRetract speed
49+
* P[linear/min] Prime speed
4950
* V[linear] 0/1 Enable auto prime first extruder used
5051
* W[linear] 0/1 Enable park & Z Raise
5152
* X[linear] Park X (Requires TOOLCHANGE_PARK)
52-
* Y[linear] Park Y (Requires TOOLCHANGE_PARK)
53+
* Y[linear] Park Y (Requires TOOLCHANGE_PARK and NUM_AXES >= 2)
5354
* I[linear] Park I (Requires TOOLCHANGE_PARK and NUM_AXES >= 4)
5455
* J[linear] Park J (Requires TOOLCHANGE_PARK and NUM_AXES >= 5)
5556
* K[linear] Park K (Requires TOOLCHANGE_PARK and NUM_AXES >= 6)
@@ -79,6 +80,7 @@ void GcodeSuite::M217() {
7980
if (parser.seenval('B')) { const float v = parser.value_linear_units(); toolchange_settings.extra_resume = constrain(v, -10, 10); }
8081
if (parser.seenval('E')) { const float v = parser.value_linear_units(); toolchange_settings.extra_prime = constrain(v, 0, max_extrude); }
8182
if (parser.seenval('P')) { const int16_t v = parser.value_linear_units(); toolchange_settings.prime_speed = constrain(v, 10, 5400); }
83+
if (parser.seenval('G')) { const int16_t v = parser.value_linear_units(); toolchange_settings.wipe_retract = constrain(v, 0, 100); }
8284
if (parser.seenval('R')) { const int16_t v = parser.value_linear_units(); toolchange_settings.retract_speed = constrain(v, 10, 5400); }
8385
if (parser.seenval('U')) { const int16_t v = parser.value_linear_units(); toolchange_settings.unretract_speed = constrain(v, 10, 5400); }
8486
#if TOOLCHANGE_FS_FAN >= 0 && HAS_FAN
@@ -164,21 +166,24 @@ void GcodeSuite::M217_report(const bool forReplay/*=true*/) {
164166
SERIAL_ECHOPGM(" M217");
165167

166168
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
167-
SERIAL_ECHOPGM(" S", LINEAR_UNIT(toolchange_settings.swap_length));
168-
SERIAL_ECHOPGM_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
169-
SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
170-
SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
171-
SERIAL_ECHOPGM(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
172-
" U", LINEAR_UNIT(toolchange_settings.unretract_speed),
173-
" F", toolchange_settings.fan_speed,
174-
" D", toolchange_settings.fan_time);
169+
SERIAL_ECHOPGM_P(
170+
PSTR(" S"), LINEAR_UNIT(toolchange_settings.swap_length),
171+
SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
172+
SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
173+
SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed),
174+
PSTR(" G"), LINEAR_UNIT(toolchange_settings.wipe_retract),
175+
PSTR(" R"), LINEAR_UNIT(toolchange_settings.retract_speed),
176+
PSTR(" U"), LINEAR_UNIT(toolchange_settings.unretract_speed),
177+
PSTR(" F"), toolchange_settings.fan_speed,
178+
PSTR(" D"), toolchange_settings.fan_time
179+
);
175180

176181
#if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
177-
SERIAL_ECHOPGM(" A", migration.automode);
178-
SERIAL_ECHOPGM(" L", LINEAR_UNIT(migration.last));
182+
SERIAL_ECHOPGM(" A", migration.automode, " L", LINEAR_UNIT(migration.last));
179183
#endif
180184

181185
#if ENABLED(TOOLCHANGE_PARK)
186+
{
182187
SERIAL_ECHOPGM(" W", LINEAR_UNIT(toolchange_settings.enable_park));
183188
SERIAL_ECHOPGM_P(
184189
SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x)
@@ -196,6 +201,7 @@ void GcodeSuite::M217_report(const bool forReplay/*=true*/) {
196201
)
197202
#endif
198203
);
204+
}
199205
#endif
200206

201207
#if ENABLED(TOOLCHANGE_FS_PRIME_FIRST_USED)

Marlin/src/lcd/language/language_en.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ namespace Language_en {
521521
LSTR MSG_TOOL_CHANGE = _UxGT("Tool Change");
522522
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
523523
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
524+
LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Wipe Retract");
524525
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
525526
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
526527
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");

Marlin/src/lcd/language/language_fr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ namespace Language_fr {
376376
LSTR MSG_TOOL_CHANGE = _UxGT("Changement outil");
377377
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
378378
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
379+
LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Purge Retract");
379380
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
380381
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
381382
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");

Marlin/src/lcd/menu/menu_configuration.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ void menu_advanced_settings();
124124
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_UNRETRACT_SPEED, &toolchange_settings.unretract_speed, 10, 5400);
125125
EDIT_ITEM(float3, MSG_FILAMENT_PURGE_LENGTH, &toolchange_settings.extra_prime, 0, max_extrude);
126126
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_PRIME_SPEED, &toolchange_settings.prime_speed, 10, 5400);
127+
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_WIPE_RETRACT, &toolchange_settings.wipe_retract, 0, 100);
127128
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_SPEED, &toolchange_settings.fan_speed, 0, 255);
128129
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_TIME, &toolchange_settings.fan_time, 1, 30);
129130
#endif

Marlin/src/module/settings.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
*/
3737

3838
// Change EEPROM version if the structure changes
39-
#define EEPROM_VERSION "V86"
39+
#define EEPROM_VERSION "V87"
4040
#define EEPROM_OFFSET 100
4141

4242
// Check the integrity of data offsets.
@@ -2876,6 +2876,7 @@ void MarlinSettings::reset() {
28762876
toolchange_settings.unretract_speed = TOOLCHANGE_FS_UNRETRACT_SPEED;
28772877
toolchange_settings.extra_prime = TOOLCHANGE_FS_EXTRA_PRIME;
28782878
toolchange_settings.prime_speed = TOOLCHANGE_FS_PRIME_SPEED;
2879+
toolchange_settings.wipe_retract = TOOLCHANGE_FS_WIPE_RETRACT;
28792880
toolchange_settings.fan_speed = TOOLCHANGE_FS_FAN_SPEED;
28802881
toolchange_settings.fan_time = TOOLCHANGE_FS_FAN_TIME;
28812882
#endif

Marlin/src/module/tool_change.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -940,13 +940,13 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
940940
* Cutting recovery -- Recover from cutting retraction that occurs at the end of nozzle priming
941941
*
942942
* If the active_extruder is up to temp (!too_cold):
943-
* Extrude filament distance = toolchange_settings.extra_resume + TOOLCHANGE_FS_WIPE_RETRACT
943+
* Extrude filament distance = toolchange_settings.extra_resume + toolchange_settings.wipe_retract
944944
* current_position.e = e;
945945
* sync_plan_position_e();
946946
*/
947947
void extruder_cutting_recover(const_float_t e) {
948948
if (!too_cold(active_extruder)) {
949-
const float dist = toolchange_settings.extra_resume + (TOOLCHANGE_FS_WIPE_RETRACT);
949+
const float dist = toolchange_settings.extra_resume + toolchange_settings.wipe_retract;
950950
FS_DEBUG("Performing Cutting Recover | Distance: ", dist, " | Speed: ", MMM_TO_MMS(toolchange_settings.unretract_speed), "mm/s");
951951
unscaled_e_move(dist, MMM_TO_MMS(toolchange_settings.unretract_speed));
952952
planner.synchronize();
@@ -973,17 +973,17 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
973973
float fr = toolchange_settings.unretract_speed; // Set default speed for unretract
974974

975975
#if ENABLED(TOOLCHANGE_FS_SLOW_FIRST_PRIME)
976-
/*
977-
* Perform first unretract movement at the slower Prime_Speed to avoid breakage on first prime
978-
*/
979-
static Flags<EXTRUDERS> extruder_did_first_prime; // Extruders first priming status
980-
if (!extruder_did_first_prime[active_extruder]) {
981-
extruder_did_first_prime.set(active_extruder); // Log first prime complete
982-
// new nozzle - prime at user-specified speed.
983-
FS_DEBUG("First time priming T", active_extruder, ", reducing speed from ", MMM_TO_MMS(fr), " to ", MMM_TO_MMS(toolchange_settings.prime_speed), "mm/s");
984-
fr = toolchange_settings.prime_speed;
985-
unscaled_e_move(0, MMM_TO_MMS(fr)); // Init planner with 0 length move
986-
}
976+
/**
977+
* Perform first unretract movement at the slower Prime_Speed to avoid breakage on first prime
978+
*/
979+
static Flags<EXTRUDERS> extruder_did_first_prime; // Extruders first priming status
980+
if (!extruder_did_first_prime[active_extruder]) {
981+
extruder_did_first_prime.set(active_extruder); // Log first prime complete
982+
// new nozzle - prime at user-specified speed.
983+
FS_DEBUG("First time priming T", active_extruder, ", reducing speed from ", MMM_TO_MMS(fr), " to ", MMM_TO_MMS(toolchange_settings.prime_speed), "mm/s");
984+
fr = toolchange_settings.prime_speed;
985+
unscaled_e_move(0, MMM_TO_MMS(fr)); // Init planner with 0 length move
986+
}
987987
#endif
988988

989989
//Calculate and perform the priming distance
@@ -1011,8 +1011,8 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
10111011

10121012
// Cutting retraction
10131013
#if TOOLCHANGE_FS_WIPE_RETRACT
1014-
FS_DEBUG("Performing Cutting Retraction | Distance: ", -(TOOLCHANGE_FS_WIPE_RETRACT), " | Speed: ", MMM_TO_MMS(toolchange_settings.retract_speed), "mm/s");
1015-
unscaled_e_move(-(TOOLCHANGE_FS_WIPE_RETRACT), MMM_TO_MMS(toolchange_settings.retract_speed));
1014+
FS_DEBUG("Performing Cutting Retraction | Distance: ", -toolchange_settings.wipe_retract, " | Speed: ", MMM_TO_MMS(toolchange_settings.retract_speed), "mm/s");
1015+
unscaled_e_move(-toolchange_settings.wipe_retract, MMM_TO_MMS(toolchange_settings.retract_speed));
10161016
#endif
10171017

10181018
// Cool down with fan

Marlin/src/module/tool_change.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
float extra_prime; // M217 E
3434
float extra_resume; // M217 B
3535
int16_t prime_speed; // M217 P
36+
int16_t wipe_retract; // M217 G
3637
int16_t retract_speed; // M217 R
3738
int16_t unretract_speed; // M217 U
3839
uint8_t fan_speed; // M217 F

0 commit comments

Comments
 (0)