I'm attemping my first print where I pause the print, change the filament, and resume to achieve a two-color print. My first attempt failed when the printer resumed printing over a centimeter away from where it should have on the X axis. My second attempt was much better, but still resumed about 1.5mm off-target.

Here's specifically what I did:

  1. Loaded the STL in Cura, the design has a 1mm "base" with an additional 1mm design on top of the base.

  2. I used Cura's "Pause at Height" feature to specify the printer should pause after completing the first 1mm.

  3. I sent the print to Octoprint, via the Cura plugin.

  4. The pause began and went as-expected for the first 1mm. It paused after finishing the layer, as expected.

  5. To switch filament I used the controls to raise the nozzle by 1cm, then moved it to home (X/Y, away from the print). I swapped filaments, hand-feeding the 2nd color until the old color was no longer coming out the nozzle, then gently cleaned up the nozzle.

  6. I lowered the nozzle back to the height it paused at (down 1cm), then resumed the print. The printer moved the X/Y back to the print and resumed.

I'm guessing either I shouldn't move the printer head away from the print when changing filament, or perhaps need to re-home after the new filament is in.

What should I do to resume a print precisely where it paused? Is there a better approach?


You are out of luck:

Print gcode is written in relative coordinates. If you move the printhead manually, the printer does not know this, and will just follow its relative path from the new position - which is what commonly is called layer-shifting.

To try to mitigate this, there are ways, but they are a little tricky:

  1. If your printer has a change filament option, then choose that - this saves the absolute position of the printhead before moving it to X0Y0, then usually extracts the filament and waits for the new filament to be inserted and the printer waits till given a resume-OK. Then it will move to the saves absolute position, and resume the code from the point it paused.
  2. If your printer has a pause option that moves the printhead to X0Y0, this can be used, using a manual extraction. Resuming the print will be easy.
  3. Some slicers support to call "Change filament at layer X", which will call a move to X0Y0 and pause, allowing manual change even if the normal pause behavior is not to move to X0Y0.

As you see: NO manual commands are given here! You can not move the printhead up/down/sideways without having a good chance of inducing a layer shift.

The Pause behavior can be adjusted in the firmware.

  • $\begingroup$ interesting; I'll have to play with it a little more. When I use the printer's controls to move to X0Y0 and then resume it's getting very close to the previous location--which had me thinking I was bumping something. I'll try just raising the Z, doing the swap, then returning the Z. $\endgroup$ – STW Dec 14 '18 at 19:58
  • $\begingroup$ @STW Why change Z, I don't see that as a necessary step for filament changing? $\endgroup$ – 0scar Dec 14 '18 at 23:21
  • $\begingroup$ @STW do NOT change Z. NEVER! $\endgroup$ – Trish Dec 14 '18 at 23:25
  • $\begingroup$ @Oscar when the printer pauses the nozzle is still right against the print. Without changing Z I can't load the new filament. $\endgroup$ – STW Dec 15 '18 at 17:39
  • $\begingroup$ @Trish why? Can you provide anything objective $\endgroup$ – STW Dec 15 '18 at 17:40

You may have moved the nozzle in the X or Y direction a bit. Instead of resuming right away (that is, after step 5), send it to the X/Y home.

Additionally, if you have a removable build plate like in Prusas, you can remove the print, send the model to the X/Y/Z home, raise the nozzle very high, then replace the print

  • $\begingroup$ that does not work for most printers, as Gcode is usually using relative coordinates not absolute coordinates. $\endgroup$ – Trish Dec 14 '18 at 17:50

Your Answer

