Skip to content

Commit

Permalink
cutting wipe in settings
Browse files Browse the repository at this point in the history
  • Loading branch information
studiodyne committed Sep 5, 2022
1 parent a3138d7 commit b21a08d
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 28 deletions.
5 changes: 4 additions & 1 deletion Marlin/src/gcode/config/M217.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
* S[linear] Swap length
* B[linear] Extra Swap resume length
* E[linear] Extra Prime length (as used by M217 Q)
* G[linear/min] Cutting wipe retract
* P[linear/min] Prime speed
* Q[linear] [extruder] Reset primed statut (To prime on next T...)
* R[linear/min] Retract speed
Expand Down Expand Up @@ -75,6 +76,7 @@ void GcodeSuite::M217() {
if (parser.seenval('B')) { const float v = parser.value_linear_units(); toolchange_settings.extra_resume = constrain(v, -10, 10); }
if (parser.seenval('E')) { const float v = parser.value_linear_units(); toolchange_settings.extra_prime = constrain(v, 0, max_extrude); }
if (parser.seenval('P')) { const int16_t v = parser.value_linear_units(); toolchange_settings.prime_speed = constrain(v, 10, 5400); }
if (parser.seenval('G')) { const int16_t v = parser.value_linear_units(); toolchange_settings.wipe_retract = constrain(v, 0, 100); }
if (parser.seenval('R')) { const int16_t v = parser.value_linear_units(); toolchange_settings.retract_speed = constrain(v, 10, 5400); }
if (parser.seenval('U')) { const int16_t v = parser.value_linear_units(); toolchange_settings.unretract_speed = constrain(v, 10, 5400); }
#if HAS_FAN && defined(TOOLCHANGE_FS_FAN)
Expand Down Expand Up @@ -163,7 +165,8 @@ void GcodeSuite::M217_report(const bool forReplay/*=true*/) {
SERIAL_ECHOPGM(" S", LINEAR_UNIT(toolchange_settings.swap_length));
SERIAL_ECHOPGM_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed),
SP_P_STR, LINEAR_UNIT(toolchange_settings.wipe_retract));
SERIAL_ECHOPGM(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
" U", LINEAR_UNIT(toolchange_settings.unretract_speed),
" F", toolchange_settings.fan_speed,
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/language/language_en.h
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@ namespace Language_en {
LSTR MSG_TOOL_CHANGE = _UxGT("Tool Change");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Wipe Retract");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/language/language_fr.h
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,7 @@ namespace Language_fr {
LSTR MSG_TOOL_CHANGE = _UxGT("Changement outil");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Purge Retract");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/menu/menu_configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ void menu_advanced_settings();
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_UNRETRACT_SPEED, &toolchange_settings.unretract_speed, 10, 5400);
EDIT_ITEM(float3, MSG_FILAMENT_PURGE_LENGTH, &toolchange_settings.extra_prime, 0, max_extrude);
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_PRIME_SPEED, &toolchange_settings.prime_speed, 10, 5400);
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_WIPE_RETRACT, &toolchange_settings.wipe_retract, 0, 100);
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_SPEED, &toolchange_settings.fan_speed, 0, 255);
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_TIME, &toolchange_settings.fan_time, 1, 30);
#endif
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/module/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2909,6 +2909,7 @@ void MarlinSettings::reset() {
toolchange_settings.unretract_speed = TOOLCHANGE_FS_UNRETRACT_SPEED;
toolchange_settings.extra_prime = TOOLCHANGE_FS_EXTRA_PRIME;
toolchange_settings.prime_speed = TOOLCHANGE_FS_PRIME_SPEED;
toolchange_settings.wipe_retract = TOOLCHANGE_FS_WIPE_RETRACT;
#ifdef TOOLCHANGE_FS_FAN
toolchange_settings.fan_speed = TOOLCHANGE_FS_FAN_SPEED;
toolchange_settings.fan_time = TOOLCHANGE_FS_FAN_TIME;
Expand Down
51 changes: 24 additions & 27 deletions Marlin/src/module/tool_change.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -910,10 +910,10 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.

// Cool down with fan
inline void filament_swap_cooling() {
#if HAS_FAN && defined(TOOLCHANGE_FS_FAN)
thermalManager.fan_speed[TOOLCHANGE_FS_FAN < 0 ? active_extruder : TOOLCHANGE_FS_FAN] = toolchange_settings.fan_speed;
#if HAS_FAN
thermalManager.fan_speed[TERN(TOOLCHANGE_ACTIVE_TOOL_FAN , active_extruder, TOOLCHANGE_FS_FAN)] = toolchange_settings.fan_speed;
gcode.dwell(SEC_TO_MS(toolchange_settings.fan_time));
thermalManager.fan_speed[TOOLCHANGE_FS_FAN < 0 ? active_extruder : TOOLCHANGE_FS_FAN] = 0;
thermalManager.fan_speed[TERN(TOOLCHANGE_ACTIVE_TOOL_FAN , active_extruder, TOOLCHANGE_FS_FAN)] = 0;
#endif
}

Expand All @@ -935,13 +935,13 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
* Cutting recovery -- Recover from cutting retraction that occurs at the end of nozzle priming
*
* If the active_extruder is up to temp (!too_cold):
* Extrude filament distance = toolchange_settings.extra_resume + TOOLCHANGE_FS_WIPE_RETRACT
* Extrude filament distance = toolchange_settings.extra_resume + toolchange_settings.wipe_retract
* current_position.e = e;
* sync_plan_position_e();
*/
void extruder_cutting_recover(const_float_t e) {
if (!too_cold(active_extruder)) {
const float dist = toolchange_settings.extra_resume + (TOOLCHANGE_FS_WIPE_RETRACT);
const float dist = toolchange_settings.extra_resume + (toolchange_settings.wipe_retract);
FS_DEBUG("Performing Cutting Recover | Distance: ", dist, " | Speed: ", MMM_TO_MMS(toolchange_settings.unretract_speed), "mm/s");
unscaled_e_move(dist, MMM_TO_MMS(toolchange_settings.unretract_speed));
planner.synchronize();
Expand All @@ -968,17 +968,17 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
float fr = toolchange_settings.unretract_speed; // Set default speed for unretract

#if ENABLED(TOOLCHANGE_FS_SLOW_FIRST_PRIME)
/**
* Perform first unretract movement at the slower Prime_Speed to avoid breakage on first prime
*/
static Flags<EXTRUDERS> extruder_did_first_prime; // Extruders first priming status
if (!extruder_did_first_prime[active_extruder]) {
extruder_did_first_prime.set(active_extruder); // Log first prime complete
// new nozzle - prime at user-specified speed.
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");
fr = toolchange_settings.prime_speed;
unscaled_e_move(0, MMM_TO_MMS(fr)); // Init planner with 0 length move
}
/*
* Perform first unretract movement at the slower Prime_Speed to avoid breakage on first prime
*/
static Flags<EXTRUDERS> extruder_did_first_prime; // Extruders first priming status
if (!extruder_did_first_prime[active_extruder]) {
extruder_did_first_prime.set(active_extruder); // Log first prime complete
// new nozzle - prime at user-specified speed.
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");
fr = toolchange_settings.prime_speed;
unscaled_e_move(0, MMM_TO_MMS(fr)); // Init planner with 0 length move
}
#endif

//Calculate and perform the priming distance
Expand Down Expand Up @@ -1006,21 +1006,18 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.

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

// Cool down with fan
filament_swap_cooling();

if(toolchange_settings.fan_time) filament_swap_cooling();
}

// Define any variables required
Flags<EXTRUDERS> extruder_was_primed; // Extruders primed status

#endif // TOOLCHANGE_FILAMENT_SWAP


// Define any variables required
Flags<EXTRUDERS> extruder_was_primed; // Extruders primed status

/**
* Perform a tool-change, which may result in moving the
Expand Down Expand Up @@ -1103,9 +1100,9 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
if (new_tool != old_tool || TERN0(PARKING_EXTRUDER, extruder_parked) || TERN0(TOOLCHANGE_FS_PRIME_FIRST_USED, can_prime_T0)) { // PARKING_EXTRUDER may need to attach old_tool when homing
destination = current_position;

#if HAS_FAN && defined(TOOLCHANGE_FS_FAN)
#if BOTH(TOOLCHANGE_FILAMENT_SWAP, HAS_FAN)
// Store and stop fan. Restored on any exit.
REMEMBER(fan, thermalManager.fan_speed[TOOLCHANGE_FS_FAN < 0 ? active_extruder : TOOLCHANGE_FS_FAN], 0);
REMEMBER(fan, thermalManager.fan_speed[TERN(TOOLCHANGE_ACTIVE_TOOL_FAN , active_extruder, TOOLCHANGE_FS_FAN)], 0);
#endif

// Z raise before retraction
Expand Down Expand Up @@ -1292,7 +1289,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
extruder_cutting_recover(0); // New extruder primed and set to 0

// Restart Fan
#if HAS_FAN && defined(TOOLCHANGE_FS_FAN)
#if HAS_FAN
RESTORE(fan);
#endif
}
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/module/tool_change.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
float extra_prime; // M217 E
float extra_resume; // M217 B
int16_t prime_speed; // M217 P
int16_t wipe_retract; // M217 Q
int16_t retract_speed; // M217 R
int16_t unretract_speed; // M217 U
uint8_t fan_speed; // M217 F
Expand Down

0 comments on commit b21a08d

Please sign in to comment.