Prusaslicer: [Feature Request] Add a Pause Print at a Specific Layer Height

Created on 5 Mar 2019  路  28Comments  路  Source: prusa3d/PrusaSlicer

Version

1.42.0-Alpha7

Behavior

I would like a button to add a pause at a specific layer height for embedding objects in 3d prints, possibly a button next to the button that adds a color change

_Is this a new feature request?_
Yes

Most helpful comment

We are discussing this feature with the firmware team. @YuSanka will possibly implement this feature into Slic3r.

All 28 comments

+1

The firmware for my Atom2 printer includes a Pause/Move and a Resume command. The Move part raises the printhead about 4 cm above it's current position; this makes it easy to change filament colors or replace a near empty reel with a new one. The Resume command lowers the printhead to where it was and simply resumes printing.

If this were done in GCode it's not clear to me how the Resume function would work. How would you signal the printer that it was time to resume printing? Perhaps the Pause command could be set to pause for a set time (60 seconds?) and then automatically resume.

I was thinking it would pause and move the head up and the bed forward then wait for you to resume the print through the lcd

I think this feature would be really cool. As a workaround you could use the filament change code M600. It's pausing and moving the print head away waiting for you to change filament. The odd thing is that you have to unplug the filament and shove it back it but it's the simplest thing you can do.

Either use the Prusa tool for multicolor print: https://www.prusaprinters.org/color-print/
Or add a custom G-Code after layer change:

{if layer_num == youlayernumhere}
M600
{endif}

Thanks victy, I've never checked out the M600 command. I don't have a Prusa printer so I don't know how to get the printer to start working again. Maybe the explanation for the M600 explains how to do this.

Yeah it's done by the printer firmware. On Prusa printers it lifts the nozzle up a bit and moves the extruder to the front. The printer guides you through the filament change. I hope your printer supports it! :-)

We are discussing this feature with the firmware team. @YuSanka will possibly implement this feature into Slic3r.

Excellent news - thanks. This capability would make it possible to change filament colors every 200 mm (for example) of height throughout the print. Very spiffy indeed.

Please see this for good technique for introducing a pause in the print for embedding magnets or nuts.
https://www.youtube.com/watch?v=oF1SdIR-Kow

Being able to do this in PrusaSlicer using the user interface rather than modifying the GCODE manually would be awesome.

G1 X10.000 Y200.000 E0; parking position
M1; user stop
M105; return to current temp

works best for adding magnets, because the printplate is moved to the front and no filament change is required. you can continue the print with a push on the button at the printer. or if you print via octoprint just click continue in the web interface.

Shame, looks like there was a setting in PrusaSlicer 2.0.0+ in "Printer Setting" in the Custom G-Code section that would allow us to put this code in as a temporary workaround.
If this section was usable then you could put the "Pause" GCode in there.
But I can't seem to edit this section.

I would love to see this as well. I currently do a find/replace in a text editor to replace M600 with the following:

G91                  ; Put in relative mode
G1 Z10               ; Lower bed by 10mm
G90                  ; Put back in absolute mode
G1 X0 Y0             ; Zero (home) the X & Y
M300 S300 P1000      ; play beep sound to signal attention
M0 Click To Restart  ; Pause and wait for the user
G91                  ; Put in relative mode
G1 Z-10              ; Raise the bed back up 10mm
G90                  ; Put back in absolute mode

The ability to specify this custom code instead of M600 for color change layers would be ideal. Adding M125 support to the firmware may be a further improvement.

~PrusaSlicer has now the ability to add a color change at a specific height.~ Sorry! Offtopic! Somehow thought this topic was about filament change at specific height! Ignore me please.

@vlcty Is this a new feature for multimaterial printers? I believe the reason this ticket was opened is because the feature only shows up for single-material printers. It's just that some of us also use the feature to pause the print at certain heights (e.g. to insert an embedded nut) rather than to actually change colors.

Oh yeah. I'm so sorry! I somehow thought this topic was about changeing filamet at a specific height! I don't know any new feature other than filament change to pause at a specifiy height.
Well actually: You could do a pseudo filament change of course. So you unload the current filament and then load it again.
Again sorry for the disturbance!

I use a version that I've modified from a post on the forum by Joan Tabb (link in the gcode comments).

{if layer_z=4.74}; Pause to insert objects
M400 ; wait for movement buffer to empty
M300 ; beep
M104 S0; Turn off extruder heater to avoid too much oozing
; code snippet originally Prusa forums joantabb here: https://forum.prusaprinters.org/forum/original-prusa-i3-mk2-s-others-archive/pause-print-in-gcode/#post-125758
G1 X10.000 Y200.000 E0; parking position GET THE PRUSA TO STICK IT'S TONGUE OUT! (edited to revise Y coordinate)
M400; wait for bed to stop moving
M300; beep again
M84; disable motors (may not be necessary)
M0; user stop
G28 X Y; Home X and Y (only) to correct for accidentally moved bed or extruder (it is assumed Z didn't move because that is a harder axis to manually move).
M109 S[temperature]; return nozzle to printing temperature
{endif}

Change the layer_z value to what is required for your print, copy the full if...endif statement as many times as you need to pause and enter the proper layer_z value for each copy.

An error above (and in the forum thread) is using M105 to turn the hot end heater back on. M105 only returns the temperatures to the console and M0 doesn't seem to turn off either the hot end nor the bed heaters. Turning off the hot end reduces oozing while paused but the bed stays hot so the part doesn't pop off of a cooling bed.

@Sembazuru Where exactly do you put that custom gcode? I assume it's one of either "before" or "after" layer change.

@ex-nerd I put the custom code in the "before layer change" g-code. Good luck with your prints.

I noticed that several of the gcode solutions posted above were generating errors in the current prusaslicer release. The comparison operator should be == not =. And since my Duet-based printer supports it, the pause command should work just fine with M600:

; For reference: https://github.com/prusa3d/PrusaSlicer/wiki/Slic3r-Prusa-Edition-Macro-Language
; Pause to insert objects (e.g. a nut or magnet)
{if layer_num == 58}
M600
{endif}

If this is added to the "Before layer change G-code", layer_num will be the number of the layer that just finished printing.

Remember Murphy's Law*. The problem with manual Gcode edits is the possibility of mistakes. Putting in an "Insert Object" function, once it's debugged, is a really good idea. Using "Change Filament" does not (at present anyway) leave easy access for inserting nuts, magnets, blades or things to be smuggled, and replacing the ejected filament is not only a (very minor) inconvenience but also an additional opportunity to accidentally do something damaging to the print.

  • "If it can go wrong, it will go wrong."

A feature teaser from Josef https://twitter.com/josefprusa/status/1208063594950266881. Looks like we'll see this soon.

Alpha build that adds this feature is available https://github.com/prusa3d/PrusaSlicer/releases/tag/version_2.2.0-alpha1

In my gcode generated with 2.2.0-alpha2 for MK3SMMU2S Single mode the code inserted is M601 which leads the printer into an infinite pause/resume loop. Am i wrong or are there other commands to trigger a pause?

My CR-10S simply ignored the M601, is a specific version (of marlin?) needed?

Its not versions of Marlin, it depends on if the Creality implementation of Marlin supports M601. Not all vendors support all the possible codes. The Prusa firmware only supports a subset too.

I'm currently testing the new "insert pause" implementation in slicer 2.2.0 alpha 2. I think one nice thing to have would be a time estimate to each pause just as you get when you insert color changes.

The feature asked for has been implemented in PrusaSlicer 2.2.0-alpha2. Closing.

What if I want to change the color of an engraved text only at the exposed text area and NOT at the whole layer as it happens for a typical filament change?

What I'd like to do is, place the face with the text touching the bed (take Prusa LCD case as an example), so that the color change only takes place for the bridge infill. However this forces you to have a single layer thickness for this color (gaps).

I can't also find a way to print this in 3 parts, as printing something on top of something that's already printed doesn't seem to be a possibility at the moment?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Bubolz picture Bubolz  路  3Comments

DROBORD picture DROBORD  路  3Comments

jon-cpu picture jon-cpu  路  3Comments

tkircher picture tkircher  路  3Comments

frakman1 picture frakman1  路  4Comments