Setting And Editing Your Start Gcode

G-code (and M-code) is a set of instructions sent to your motherboard which controls the actions of your printer. Each line may only contain one G-code (or Mcode) with included variables. Comments can be added by adding a semicolon (;) after the instruction. There are a very few reasons you may want to edit the G-code produced by your slicer, but knowing how to edit the Start and End G-code may be quite useful.

Start G-code

The Start G-code is a block of instructions that gets sent to the printer before the printer begins the print. At a minimum, this code should home the axes and reset the extruder. The default G-code we currently have implemented is listed below:

G21; Set units to milimeters
G90; Set absolute coordinates
G92 E0; Reset extruder
G28 X0 Y0; Home x and y axis
G1 X100 Y100 F4000; Center extruder above bed
G28 Z0; Home Z axis 
G1 F3000; Set feed rate (speed) for first move

The start G-code may be implemented in either Repetier Host software, Slic3r, or Both.
Note: If you decide to use both, the Repetier-Host start code will be implemented first.

In Repetier Host

If you have a simple start code that you would like to be followed no matter what slic3r settings you use, it's usually easier to apply the start G-code in Repetier-Host.

  1. Open Repetier-Host solidoodle and go to the "Edit G-code" tab"
  2. In the drop down menu, select "Start Code"
  3. Copy the above code into the text box, or write your own
  4. Click the Save icon above the text box

If you would like to test your G-code, click "Run Job" without slicing a model.

In Slic3r

Adding start G-code to Slic3r is useful if you want your printer to perform different actions upon start up depending on the profile used. Slicer will also accept variables in your G-code. To use a variable, type the G-code as normal, but replace the value with a variable in square brackets[]. e.g. G1 X100 Y100 Z[first_layer_height]. You can find all of the variables in your slic3r .ini files, but the most useful are listed below:

first_layer_height: Useful if you want the home position touching the build plate.
first_layer_bed_temperature: Useful if you want to use the M104 or M109 codes for automatic heating of extruder.
first_layer_temperature: Useful if you want to use the M140 or M190 codes for automatic heating of bed.

Another great use for having Slic3r implement your start G-code is for setting PID parameters. The PID parameters will be different for every target temperature, hot end, material, and sometimes even color. Adding the M301 command to your start G-code will allow you to to have the properly calibrated PID settings for each one of these.

To set the start Gcode in Slic3r:

  1. Open Repetier-Host and go to the "Slicer" tab
  2. Under "Slic3r" click the "Configure" button to open the Slic3r program
  3. Select the "Printer Settings" tab
  4. In the left box, select "Custom G-code"
  5. Type in or copy the G-code into the "Start G-code" text box and save your profile

Note: You must select the proper slic3r profile in Repetier-Host before slicing your file.

The following code is an example of what you may want to include in your Slic3r start G-code:

G21; set mm units
G92 E0; reset extruder distance
G90; set absolute coordinates
G28; home all axes
G1 Z5; lower platform 5mm to clear bed in case of improper leveling
G1 X100 Y100 F3000; move extruder over bed center
M104 S195; set extruder temp to 195°C and start heating
M301 P39.04 I2.55 D149.66; Set PID for 195°C
M109 S195; wait for target extruder temp to be reached
G1 Z[first_layer_height]; Move Z to first layer height.

End G-code

All of the instructions above apply directly to the End G-code. You may want to home the X and Y axes, lower the platform to the bottom, shut off your heaters or lower them to a temperature that will not damage your hot end, or maybe even try writing code to knock off your part using the carriage as a ram.

Implemented G-code for Marlin firmware


G0 -> G1
G1 - Coordinated Movement X Y Z E
G4 - Dwell S or P
G10 - retract filament according to settings of M207
G11 - retract recover filament according to settings of M208
G28 - Home all Axis
G90 - Use Absolute Coordinates
G91 - Use Relative Coordinates
G92 - Set current position to cordinates given

M0 - Unconditional stop - Wait for user to press a button on the LCD (Only if ULTRA_LCD is enabled)
M1 - Same as M0
M17 - Enable/Power all stepper motors
M18 - Disable all stepper motors; same as M84
M20 - List SD card
M21 - Init SD card
M22 - Release SD card
M23 - Select SD file (M23 filename.g)
M24 - Start/resume SD print
M25 - Pause SD print
M26 - Set SD position in bytes (M26 S12345)
M27 - Report SD print status
M28 - Start SD write (M28 filename.g)
M29 - Stop SD write
M30 - Delete file from SD (M30 filename.g)
M31 - Output time since last M109 or SD card start to serial
M32 - Select file and start SD print (Can be used when printing from SD card)
M42 - Change pin status via G-code Use M42 Px Sy to set pin x to value y, when omitting Px the onboard led will be used.
M80 - Turn on Power Supply
M81 - Turn off Power Supply
M82 - Set E codes absolute (default)
M83 - Set E codes relative while in Absolute Coordinates (G90) mode
M84 - Disable steppers until next move, or use S to specify an inactivity timeout, after which the steppers will be disabled. S0 to disable the timeout.
M85 - Set inactivity shutdown timer with parameter S. To disable set zero (default)
M92 - Set axis_steps_per_unit - same syntax as G92
M104 - Set extruder target temp
M105 - Read current temp
M106 - Fan on
M107 - Fan off
M109 - Sxxx Wait for extruder current temp to reach target temp. Waits only when heating
Rxxx Wait for extruder current temp to reach target temp. Waits when heating and cooling
M114 - Output current position to serial port
M115 - Capabilities string
M117 - display message
M119 - Output Endstop status to serial port
M126 - Solenoid Air Valve Open (BariCUDA support by jmil)
M127 - Solenoid Air Valve Closed (BariCUDA vent to atmospheric pressure by jmil)
M128 - EtoP Open (BariCUDA EtoP = electricity to air pressure transducer by jmil)
M129 - EtoP Closed (BariCUDA EtoP = electricity to air pressure transducer by jmil)
M140 - Set bed target temp
M190 - Sxxx Wait for bed current temp to reach target temp. Waits only when heating
Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
M200 - Set filament diameter
M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate
M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
M206 - set additional homeing offset
M207 - set retract length S[positive mm] F[feedrate mm/sec] Z[additional zlift/hop]
M208 - set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/sec]
M209 - S enable automatic retract detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction.
M218 - set hotend offset (in mm): T X Y
M220 S- set speed factor override percentage
M221 S- set extrude factor override percentage
M240 - Trigger a camera to take a photograph
M280 - Position an RC Servo P S, ommit S to report back current angle
M300 - Play beepsound S P
M301 - Set PID parameters P I and D
M302 - Allow cold extrudes
M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C)
M304 - Set bed PID parameters P I and D
M400 - Finish all moves
M500 - stores paramters in EEPROM
M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
M503 - print the current settings (from memory not from eeprom)
M540 - Use S[0|1] to enable or disable the stop SD card print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
M907 - Set digital trimpot motor current using axis codes.
M908 - Control digital trimpot directly.
M350 - Set microstepping mode.
M351 - Toggle MS1 MS2 pins directly.
M928 - Start SD logging (M928 filename.g) - ended by M29
M999 - Restart after being stopped by error

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License