|
|
@ -106,7 +106,9 @@ volatile unsigned char block_buffer_tail; // Index of the block to pro |
|
|
|
//===========================================================================
|
|
|
|
//=============================private variables ============================
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
#ifdef PREVENT_DANGEROUS_EXTRUDE |
|
|
|
bool allow_cold_extrude=false; |
|
|
|
#endif |
|
|
|
#ifdef XY_FREQUENCY_LIMIT |
|
|
|
// Used for the frequency limit
|
|
|
|
static unsigned char old_direction_bits = 0; // Old direction bits. Used for speed calculations
|
|
|
@ -465,7 +467,23 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa |
|
|
|
target[X_AXIS] = lround(x*axis_steps_per_unit[X_AXIS]); |
|
|
|
target[Y_AXIS] = lround(y*axis_steps_per_unit[Y_AXIS]); |
|
|
|
target[Z_AXIS] = lround(z*axis_steps_per_unit[Z_AXIS]); |
|
|
|
target[E_AXIS] = lround(e*axis_steps_per_unit[E_AXIS]); |
|
|
|
target[E_AXIS] = lround(e*axis_steps_per_unit[E_AXIS]); |
|
|
|
|
|
|
|
#ifdef PREVENT_DANGEROUS_EXTRUDE |
|
|
|
if(target[E_AXIS]!=position[E_AXIS]) |
|
|
|
if(degHotend(active_extruder)<EXTRUDE_MINTEMP && !allow_cold_extrude) |
|
|
|
{ |
|
|
|
position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHOLNPGM(" cold extrusion prevented"); |
|
|
|
} |
|
|
|
if(labs(target[E_AXIS]-position[E_AXIS])>axis_steps_per_unit[E_AXIS]*EXTRUDE_MAXLENGTH) |
|
|
|
{ |
|
|
|
position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHOLNPGM(" too long extrusion prevented"); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// Prepare to set up new block
|
|
|
|
block_t *block = &block_buffer[block_buffer_head]; |
|
|
@ -786,3 +804,9 @@ uint8_t movesplanned() |
|
|
|
return (block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); |
|
|
|
} |
|
|
|
|
|
|
|
void allow_cold_extrudes(bool allow) |
|
|
|
{ |
|
|
|
#ifdef PREVENT_DANGEROUS_EXTRUDE |
|
|
|
allow_cold_extrude=allow; |
|
|
|
#endif |
|
|
|
} |