Browse Source

Apply fix for M600 filament change

- Patch from #1453 for delta movement plan
- Fix: Set X with code X instead of adding to X
pull/1/head
Scott Lahteine 10 years ago
parent
commit
b97a950f53
  1. 48
      Marlin/Marlin_main.cpp

48
Marlin/Marlin_main.cpp

@ -3598,16 +3598,17 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
#ifdef FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE
case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
{ {
float target[4]; float target[NUM_AXIS], lastpos[NUM_AXIS], fr60 = feedrate/60;
float lastpos[4]; for (int i=0; i<NUM_AXIS; i++)
target[X_AXIS]=current_position[X_AXIS]; target[i] = lastpos[i] = current_position[i];
target[Y_AXIS]=current_position[Y_AXIS];
target[Z_AXIS]=current_position[Z_AXIS]; #define BASICPLAN plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], fr60, active_extruder);
target[E_AXIS]=current_position[E_AXIS]; #ifdef DELTA
lastpos[X_AXIS]=current_position[X_AXIS]; #define RUNPLAN calculate_delta(target); BASICPLAN
lastpos[Y_AXIS]=current_position[Y_AXIS]; #else
lastpos[Z_AXIS]=current_position[Z_AXIS]; #define RUNPLAN BASICPLAN
lastpos[E_AXIS]=current_position[E_AXIS]; #endif
//retract by E //retract by E
if(code_seen('E')) if(code_seen('E'))
{ {
@ -3619,7 +3620,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
target[E_AXIS]+= FILAMENTCHANGE_FIRSTRETRACT ; target[E_AXIS]+= FILAMENTCHANGE_FIRSTRETRACT ;
#endif #endif
} }
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); RUNPLAN;
//lift Z //lift Z
if(code_seen('Z')) if(code_seen('Z'))
@ -3632,12 +3633,12 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
target[Z_AXIS]+= FILAMENTCHANGE_ZADD ; target[Z_AXIS]+= FILAMENTCHANGE_ZADD ;
#endif #endif
} }
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); RUNPLAN;
//move xy //move xy
if(code_seen('X')) if(code_seen('X'))
{ {
target[X_AXIS]+= code_value(); target[X_AXIS]= code_value();
} }
else else
{ {
@ -3656,7 +3657,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
#endif #endif
} }
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); RUNPLAN;
if(code_seen('L')) if(code_seen('L'))
{ {
@ -3669,7 +3670,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
#endif #endif
} }
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); RUNPLAN;
//finish moves //finish moves
st_synchronize(); st_synchronize();
@ -3717,10 +3718,19 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
} }
current_position[E_AXIS]=target[E_AXIS]; //the long retract of L is compensated by manual filament feeding current_position[E_AXIS]=target[E_AXIS]; //the long retract of L is compensated by manual filament feeding
plan_set_e_position(current_position[E_AXIS]); plan_set_e_position(current_position[E_AXIS]);
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //should do nothing
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //move xy back RUNPLAN; //should do nothing
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //move z back
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], lastpos[E_AXIS], feedrate/60, active_extruder); //final untretract #ifdef DELTA
calculate_delta(lastpos);
plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], target[E_AXIS], fr60, active_extruder); //move xyz back
plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder); //final untretract
#else
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], fr60, active_extruder); //should do nothing
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], target[Z_AXIS], target[E_AXIS], fr60, active_extruder); //move xy back
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], target[E_AXIS], fr60, active_extruder); //move z back
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder); //final untretract
#endif
} }
break; break;
#endif //FILAMENTCHANGEENABLE #endif //FILAMENTCHANGEENABLE

Loading…
Cancel
Save