<p>You should never use a feed rate of zero to start a command with. Theoretically, the other way around would work as the feed rate specified in the command is the feed rate at the end of the operation, but that is theoretically; if you look into the <a href="https://github.com/MarlinFirmware/Marlin/blob/1.1.x/Marlin/Marlin_main.cpp" rel="nofollow noreferrer">Marlin Firmware sources</a> you will find the following C-code for the <code>G0</code> and <code>G1</code> commands in the function <code>void gcode_get_destination()</code>:</p>

<pre><code>if (parser.linearval('F') &gt; 0)
  feedrate_mm_s = MMM_TO_MMS(parser.value_feedrate());
</code></pre>

<p>From the first code line you read that the value for the feed rate is only parsed as the value is larger than <code>0</code>. As there is no prior code shown or feed rate set, the command will not be executed.</p>

<hr>

<p>Some extra information from <a href="https://reprap.org/wiki/G-code#G0_.26_G1:_Move" rel="nofollow noreferrer">G0 &amp; G1: Move</a> describing the usage of the feed rate:</p>

<blockquote>
  <p>Most RepRap firmwares do subtle things with feedrates.</p>

<pre>G1 F1500           ; Set feedrate to 1500mm/m 
G1 X50 Y25.3 E22.4 ;</pre>
  
  <p>Move and extrude In the above example, we first set the feedrate to
  1500mm/m, then move to 50mm on X and 25.3mm on Y while extruding
  22.4mm of filament between the two points.</p>
  
  <p><pre>G1 F1500                 ; Feedrate 1500mm/m 
G1 X50 Y25.3 E22.4 F3000 ; Accelerate to 3000mm/m</pre> However, in the above example, we set a
  feedrate of 1500 mm/m, then do the same move, but accelerating to 3000
  mm/m. Everything stays synchronized, so extrusion accelerates right
  along with X and Y movement.</p>
</blockquote>

CC BY-SA 4.0
2018-11-17T23:22:29.953Z
2018-11-20T21:25:31.410Z
2018-11-20T21:25:31.410Z
0scar
<p>Will the two following lines of code behave differently given that the path that they describe is exactly the same (two segments)?  </p>

<p><strong>Option 1</strong> <em>(describes separate segments giving the start and end point)</em>:</p>

<pre><code>G92 E0
G1 F0 X14.73 Y-30.28 Z0
G1 F3000 X-27.15 Y-18.58 Z0 E2.01
G92 E0
G1 F0 X-27.15 Y-18.58 Z0
G1 F3000 X17.65 Y0.51 Z0 E2.26
</code></pre>

<p><strong>Option 2</strong> <em>(describes end points only)</em>:</p>

<pre><code>G92 E0
G1 F0 X14.73 Y-30.28 Z0
G1 F3000 X-27.15 Y-18.58 Z0 E2.01
G1 F3000 X17.65 Y0.51 Z0 E2.26
</code></pre>

CC BY-SA 4.0
2018-11-16T20:42:14.117Z
You'll never get anywhere at F0.
Davo
CC BY-SA 4.0
2018-11-17T18:11:13.513Z
@Davo will the printer just ignore that line?
Arthur Mamou-Mani
CC BY-SA 4.0
2018-11-18T18:08:30.100Z
Manou-Mani I don't know, but logically it should not. I'm away from my machine. I'll try it next week.
Davo
CC BY-SA 4.0
2018-11-19T07:41:57.087Z
Well, the second F0 is a repetitive X,Y,Z position since on the first F3000 the printer reach that position; so the Second F0 wil be ignored. I don't know if the firts F0 form the example will be Ignored but Gcode sender 0.8 normally refuses to work with undefined feed rate, Zero value is taken as undefined.
Fernando Baltazar
<g-code>
Describing G-code by start and end point versus end only
Arthur Mamou-Mani
# Describing G-code by start and end point versus end only

(Asked by: username_0 on 2018-11-16)

Will the two following lines of code behave differently given that the path that they describe is exactly the same (two segments)?

**Option 1** *(describes separate segments giving the start and end point)*:

```
G92 E0
G1 F0 X14.73 Y-30.28 Z0
G1 F3000 X-27.15 Y-18.58 Z0 E2.01
G92 E0
G1 F0 X-27.15 Y-18.58 Z0
G1 F3000 X17.65 Y0.51 Z0 E2.26

```

**Option 2** *(describes end points only)*:

```
G92 E0
G1 F0 X14.73 Y-30.28 Z0
G1 F3000 X-27.15 Y-18.58 Z0 E2.01
G1 F3000 X17.65 Y0.51 Z0 E2.26

```

**Tags:** g-code

> **Comments:**
> **username_1**: You'll never get anywhere at F0.  
> **username_0**: @username_1 will the printer just ignore that line?  
> **username_1**: Manou-Mani I don't know, but logically it should not. I'm away from my machine. I'll try it next week.  
> **username_2**: Well, the second F0 is a repetitive X,Y,Z position since on the first F3000 the printer reach that position; so the Second F0 wil be ignored. I don't know if the firts F0 form the example will be Ignored but Gcode sender 0.8 normally refuses to work with undefined feed rate, Zero value is taken as undefined.  

---

## 1 answers

### Answer by username_3 on 2018-11-17. Score: 1

You should never use a feed rate of zero to start a command with. Theoretically, the other way around would work as the feed rate specified in the command is the feed rate at the end of the operation, but that is theoretically; if you look into the [Marlin Firmware sources](https://github.com/MarlinFirmware/Marlin/blob/1.1.x/Marlin/Marlin_main.cpp) you will find the following C-code for the `G0` and `G1` commands in the function `void gcode_get_destination()`:

```
if (parser.linearval('F') > 0)
  feedrate_mm_s = MMM_TO_MMS(parser.value_feedrate());

```

From the first code line you read that the value for the feed rate is only parsed as the value is larger than `0`. As there is no prior code shown or feed rate set, the command will not be executed.

---

Some extra information from [G0 & G1: Move](https://reprap.org/wiki/G-code#G0_.26_G1:_Move) describing the usage of the feed rate:

> Most RepRap firmwares do subtle things with feedrates.
>
> ```
> G1 F1500           ; Set feedrate to 1500mm/m 
> G1 X50 Y25.3 E22.4 ;
> ```
>
> Move and extrude In the above example, we first set the feedrate to
> 1500mm/m, then move to 50mm on X and 25.3mm on Y while extruding
> 22.4mm of filament between the two points.
>
> ```
> G1 F1500                 ; Feedrate 1500mm/m 
> G1 X50 Y25.3 E22.4 F3000 ; Accelerate to 3000mm/m
> ```
>
> However, in the above example, we set a
> feedrate of 1500 mm/m, then do the same move, but accelerating to 3000
> mm/m. Everything stays synchronized, so extrusion accelerates right
> along with X and Y movement.


---

