# Why did my printer's nozzle dig itself into my print?

I just completed my first print on my Ender-3 and when the print finalized itself the nozzle didn't elevate itself to clear away from the piece. I watched as the nozzle slowly lowered itself into my print and destroy it. Here is the gcode generated by Slic3r used:

; Filament-specific end gcode
G4 ; wait
M221 S100
M106 S0 ; turn off cooling fan
M104 S0 ; turn off extruder
M140 S0 ; turn off bed
G91
G1 F1800 E-3
G90
G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up
G28 X0 ; home x and y axis
G1 Y180; Remove Print Position
M84 ; disable motors
M300 S2600 P100; Beep
; filament used = 24040.5mm (57.8cm3)
; total filament cost = 0.0


You are using incorrect commands in your end-code for the incorrect tool with respect to the print head raise.

Slic3r has no knowledge of the maximum printer height (as in variable max_print_height) because there is no input field to specify this, as can be seen in this partial screenshot:

However, in Slic3r PE (Prusa Edition), there is a possibility to enter such a value, as seen in the following partial screenshot:

Note that in both editions, the Bed shape interface is equivalent when Set... is pressed:

To use the raising of the head, respecting the maximum print height, in Slic3r PE, you need to add the following line:

{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+60, max_print_height)}{endif}


This will parse fine in Slic3r PE, but not in Slic3r (as max_print_height is not known).

If you want such a command in Slic3r, you need to enter (for a printer with a maximum print height of 240 mm):

G1 Z{[z_offset]+min([layer_z]+3, 240)}


results in Slic3r for a 20x20x20 mm calibration cube with a zero z_offset to:

G1 Z23

• But there shouldn't be a need to change the Z-pos at all! Once the print is done, the head should be able to clear the last layer applied and move to X=0,Y=0 . No need to do anything else, right? – Carl Witthoft Feb 4 '19 at 20:27
• @CarlWitthoft Have you never seen the straight ironing line that some slicers generate over the top layer? Raising the head prevents that. – 0scar Feb 4 '19 at 20:46
• @Oscar I have to admit I have not. Certainly a good reason, then, to do a small relative-Z move first. – Carl Witthoft Feb 5 '19 at 13:21

; Filament sy end gcode
G4 ; wait
M221 S100
M106 S0 ; turn off cooling fan
M104 S0 ; turn off extruder
M140 S0 ; turn off bed

; End code
G1 F1800 E-3 ; retract 3 mm
G1 Z30 ; Move print head up 30mm
G28 X0 ; home x and y axis
M84 ; disable motors
M300 S2600 P100; Beep


The problem with your end code is the G90 for absolute measurements together with the formula G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} to set the height. The printer itself doesn't calculate anything. That what it doesn't interpret, it ignores, interpreting that whole thing as something crazy like G1 Z30 to force the printer to go to Absolute 30 mm above absolute 0. To fix it, your slicer would need to calculate {z_offset+min(layer_z+30, max_print_height)} for the printer - which seems to come out to 30mm above the print and then an if-statement that is not started anywhere.

Going up 30 mm can be much easier be done by staying in G91 ; relative measurements and calling G1 Z30 to go up another 30 mm, though this might be too high for the printer frame.

• The G-code in the slic3r reads: G90 {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up I notice that 'if' statement doesn't seem to be present in the output G-code file. Is this the problem? – Jonathan Gallant-Mills Feb 3 '19 at 3:48
• @JonathanGallant-Mills yes, it is a problem. you should also have some else... or just skip that – Trish Feb 3 '19 at 5:00

The same thing happened to me several years ago. My print was a fairly tall part for my delta printer, about 220 mm. In many previous prints, the print head would always go up after finishing, but what I didn't know was that the Slic3r finish print routine specified an absolute Z height of about 200 mm. When the tall part finished, the still-hot print head moved down and ruined the top of the print.

After figuring out that the routine had an absolute reference, I replaced it with a relative movement 20 mm up. It's worked fine since then. An easy fix.