<p>You're correct that the G28 line should be changed. What I would do is the following:</p>

<pre><code>M104 S0 ;extruder heater off 
G91 ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 ;move X to min endstop, so the head is out of the way
G90 ;absolute positioning
G1 Y200 ;Move bed forward
M84 ;steppers off
</code></pre>

<p>This way your X axis still gets homed after the Z bumps up and before Y moves to present the print.</p>

<p>G28 is the command to home the print head. Your current settings homes the X and Y axes. G1 is a linear movement. One caveat to this change in G-Code is that there needs to be a home command at the start of your prints since you're not homing afterwards anymore. (I believe most slicers default to a G28 at the start AND end of prints so it's not a major concern, but one to be wary of now just in case.)</p>

CC BY-SA 4.0
2019-02-06T18:55:08.340Z
Cool. What do I use for the max Y value, given a 200mm bed? Is it just 200? And why G1 instead of G28?
Joel Coehoorn
CC BY-SA 4.0
2019-02-06T18:59:21.517Z
@JoelCoehoorn Sorry, having a caffeine crash and brain farted those particulars. Edited answer to clarify.
Lux Claridge
CC BY-SA 4.0
2019-02-06T19:14:08.737Z
@JoelCoehoorn You can do even better and use the actual bed size, I'll show you in [an answer](/a/8186/).
0scar
CC BY-SA 4.0
2019-02-06T18:53:12.073Z
2019-02-06T18:58:37.580Z
2019-02-06T18:58:37.580Z
Lux Claridge
<p>Note that <a href="https://reprap.org/wiki/G-code#G28:_Move_to_Origin_.28Home.29" rel="nofollow noreferrer">this reference</a> states that:</p>

<blockquote>
  <p>Because the behavior of <code>G28</code> is unspecified, it is recommended <strong>not</strong> to automatically include <code>G28</code> in your <strong>ending GCode</strong>. On a Cartesian this will result in damaging the printed object. If you need to move the carriage at the completion of a print, use <code>G0</code> or <code>G1</code>.</p>
</blockquote>

<p>So you need to use a <a href="https://reprap.org/wiki/G-code#G0_.26_G1:_Move" rel="nofollow noreferrer"><code>G0</code> or <code>G1</code></a> move.</p>

<p>When using Ultimaker Cura (like many other slicers), there is built in functionality known as <a href="https://github.com/Ultimaker/Cura/issues/1131" rel="nofollow noreferrer">keywords</a> with a complete list found <a href="https://github.com/Ultimaker/Cura/blob/master/resources/definitions/fdmprinter.def.json" rel="nofollow noreferrer">here</a>.</p>

<p>The keyword <code>machine_depth</code> is the one that is of use to you, embed this in your end G-code in between curly brackets and it will expand to the bed size of your machine (replacing <code>G28 X0 Y0</code>):</p>

<p><code>G1 X0 Y{machine_depth}</code></p>

<p>For me this compiles to (e.g. for my coreXY printer):</p>

<p><code>G1 X0 Y300</code></p>

<p>To set the speed, just add the following command prior to the one above:</p>

<p><code>G1 F2500</code></p>

<p>Adding this line before the actual move ensures that the speed is constant, if <code>F2500</code> would have been included in the move command (like <code>G1 X0 Y{machine_depth} F2500</code>), this defines the end speed, it would start moving at the last speed value prior to the move.</p>

<p>This results in adding the following lines in your endscript:</p>

<pre>
G1 F2500
G1 X0 Y{machine_depth}
</pre>

CC BY-SA 4.0
2019-02-06T19:23:01.133Z
2019-02-08T10:12:25.840Z
2019-02-08T10:12:25.840Z
0scar
<p>I have a Monoprice Maker Select Plus, currently using Ultimaker Cura 3.6.0 with the default settings for a Wanhao Duplicator i3 Plus. Right now when a print finishes, the bed retreats towards the back of the machine. I'd rather present the bed forward for easier part removal.</p>

<p>Here is my ending G-Code:</p>

<pre>
M104 S0      ;extruder heater off 
G91          ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0    ;move X/Y to min endstops, so the head is out of the way
M84          ;steppers off
G90          ;absolute positioning
</pre>

<p>It looks like I need to change that <code>G28</code> line third from the bottom, but I'm not sure what to change it to. I've not yet done any g-code manipulation of my own. I don't know what units it's using, and it looks like it still has relative positioning, so even then I don't know it's a good idea to just set it for the max size of the bed. </p>

<p>So how can I change this code to move the bed as I want?</p>

<ultimaker-cura><g-code>
Move print bed to front at the end of a print rather than the back
Joel Coehoorn
# Move print bed to front at the end of a print rather than the back

(Asked by: username_0 on 2019-02-06)

I have a Monoprice Maker Select Plus, currently using Ultimaker Cura 3.6.0 with the default settings for a Wanhao Duplicator i3 Plus. Right now when a print finishes, the bed retreats towards the back of the machine. I'd rather present the bed forward for easier part removal.

Here is my ending G-Code:

```

M104 S0      ;extruder heater off 
G91          ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0    ;move X/Y to min endstops, so the head is out of the way
M84          ;steppers off
G90          ;absolute positioning

```

It looks like I need to change that `G28` line third from the bottom, but I'm not sure what to change it to. I've not yet done any g-code manipulation of my own. I don't know what units it's using, and it looks like it still has relative positioning, so even then I don't know it's a good idea to just set it for the max size of the bed.

So how can I change this code to move the bed as I want?

**Tags:** ultimaker-cura, g-code


---

## 2 answers

### Answer by username_2 on 2019-02-06. Score: 8 | Accepted answer

Note that [this reference](https://reprap.org/wiki/G-code#G28:_Move_to_Origin_.28Home.29) states that:

> Because the behavior of `G28` is unspecified, it is recommended **not** to automatically include `G28` in your **ending GCode**. On a Cartesian this will result in damaging the printed object. If you need to move the carriage at the completion of a print, use `G0` or `G1`.

So you need to use a [`G0` or `G1`](https://reprap.org/wiki/G-code#G0_.26_G1:_Move) move.

When using Ultimaker Cura (like many other slicers), there is built in functionality known as [keywords](https://github.com/Ultimaker/Cura/issues/1131) with a complete list found [here](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/fdmprinter.def.json).

The keyword `machine_depth` is the one that is of use to you, embed this in your end G-code in between curly brackets and it will expand to the bed size of your machine (replacing `G28 X0 Y0`):

`G1 X0 Y{machine_depth}`

For me this compiles to (e.g. for my coreXY printer):

`G1 X0 Y300`

To set the speed, just add the following command prior to the one above:

`G1 F2500`

Adding this line before the actual move ensures that the speed is constant, if `F2500` would have been included in the move command (like `G1 X0 Y{machine_depth} F2500`), this defines the end speed, it would start moving at the last speed value prior to the move.

This results in adding the following lines in your endscript:

```

G1 F2500
G1 X0 Y{machine_depth}

```


---

### Answer by username_1 on 2019-02-06. Score: 2

You're correct that the G28 line should be changed. What I would do is the following:

```
M104 S0 ;extruder heater off 
G91 ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 ;move X to min endstop, so the head is out of the way
G90 ;absolute positioning
G1 Y200 ;Move bed forward
M84 ;steppers off

```

This way your X axis still gets homed after the Z bumps up and before Y moves to present the print.

G28 is the command to home the print head. Your current settings homes the X and Y axes. G1 is a linear movement. One caveat to this change in G-Code is that there needs to be a home command at the start of your prints since you're not homing afterwards anymore. (I believe most slicers default to a G28 at the start AND end of prints so it's not a major concern, but one to be wary of now just in case.)

> **Comments:**
> **username_0**: Cool. What do I use for the max Y value, given a 200mm bed? Is it just 200? And why G1 instead of G28?  
> **username_1**: @username_0 Sorry, having a caffeine crash and brain farted those particulars. Edited answer to clarify.  
> **username_2**: @username_0 You can do even better and use the actual bed size, I'll show you in [an answer](/a/8186/).  

---

