Browse Source

Prevent extra "too long/cold" errors

pull/1/head
Scott Lahteine 5 years ago
parent
commit
0f8c3ed29a
  1. 37
      Marlin/src/module/motion.cpp

37
Marlin/src/module/motion.cpp

@ -986,32 +986,37 @@ void prepare_move_to_destination() {
#if EITHER(PREVENT_COLD_EXTRUSION, PREVENT_LENGTHY_EXTRUDE) #if EITHER(PREVENT_COLD_EXTRUSION, PREVENT_LENGTHY_EXTRUDE)
if (!DEBUGGING(DRYRUN)) { if (!DEBUGGING(DRYRUN) && destination.e != current_position.e) {
if (destination.e != current_position.e) { bool ignore_e = false;
#if ENABLED(PREVENT_COLD_EXTRUSION) #if ENABLED(PREVENT_COLD_EXTRUSION)
if (thermalManager.tooColdToExtrude(active_extruder)) { ignore_e = thermalManager.tooColdToExtrude(active_extruder);
current_position.e = destination.e; // Behave as if the move really took place, but ignore E part if (ignore_e) SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP);
SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP); #endif
}
#endif // PREVENT_COLD_EXTRUSION
#if ENABLED(PREVENT_LENGTHY_EXTRUDE) #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
const float e_delta = ABS(destination.e - current_position.e) * planner.e_factor[active_extruder]; const float e_delta = ABS(destination.e - current_position.e) * planner.e_factor[active_extruder];
if (e_delta > (EXTRUDE_MAXLENGTH)) { if (e_delta > (EXTRUDE_MAXLENGTH)) {
#if ENABLED(MIXING_EXTRUDER) #if ENABLED(MIXING_EXTRUDER)
bool ignore_e = false;
float collector[MIXING_STEPPERS]; float collector[MIXING_STEPPERS];
mixer.refresh_collector(1.0, mixer.get_current_vtool(), collector); mixer.refresh_collector(1.0, mixer.get_current_vtool(), collector);
MIXER_STEPPER_LOOP(e) MIXER_STEPPER_LOOP(e) {
if (e_delta * collector[e] > (EXTRUDE_MAXLENGTH)) { ignore_e = true; break; } if (e_delta * collector[e] > (EXTRUDE_MAXLENGTH)) {
#else ignore_e = true;
constexpr bool ignore_e = true;
#endif
if (ignore_e) {
current_position.e = destination.e; // Behave as if the move really took place, but ignore E part
SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP); SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP);
break;
}
} }
#else
ignore_e = true;
SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP);
#endif
} }
#endif // PREVENT_LENGTHY_EXTRUDE #endif
if (ignore_e) {
current_position.e = destination.e; // Behave as if the E move really took place
planner.set_e_position_mm(destination.e); // Prevent the planner from complaining too
} }
} }

Loading…
Cancel
Save