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.
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.
- Open Repetier-Host solidoodle and go to the "Edit G-code" tab"
- In the drop down menu, select "Start Code"
- Copy the above code into the text box, or write your own
- Click the Save icon above the text box
If you would like to test your G-code, click "Run Job" without slicing a model.
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:
- Open Repetier-Host and go to the "Slicer" tab
- Under "Slic3r" click the "Configure" button to open the Slic3r program
- Select the "Printer Settings" tab
- In the left box, select "Custom G-code"
- 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.
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
G2 - CW ARC
G3 - CCW ARC
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