Technologist and Maker

Tweak Simplify3D GCode Start Script

Initially, I print a lot while tethered to my Printrbot Plus Metal because it allowed me to prime the extruder with plastic prior to printing to make sure my print started properly and also provided a lot of feedback, for example, how much time is left to print a model. And it allowed me to manually home my machine prior to printing by clicking home all.

However, more recently I’ve started to print more often from a micro SD card or via OctoPrint so I don’t have to tether my laptop. Without being tethered, I can run longer prints. I use the OctoPi distribution to run OctoPrint on a Raspberry Pi computer, which I will discuss more in a future blog…

Although for years I’ve sliced and printing using Repetier/Slic3r and Cura, more recently I have been slicing and printing using Simplify3D. I like Simplify3D because it slices better (better final printed piece) and also allows for precise placement (addition/deletion) of support. Although it is possible to use Cura to slice in OctoPrint, I don’t. I do all my slicing with Simplify3D and save/export the toolpath GCode to a micro SD card to print via an SD card or upload to OctoPrint’s website if printing via OctoPrint.

One thing that has been annoying me is that my Printrbot Plus Metal (with the auto Z height probe) is not setting the Z axis properly before it prints using Simplify3D. The issue is that the Z axis is left about 1″ above the bed, which is way too high, and that is the z height where it starts printing, which is obviously makes every print fail. However, the Z height is being set properly when I print with Cura. So, up until recently, when I use Simplify3D, I have to manually home the machine (by clicking home all from Simplify3D’s Machine Control Panel). If I’m printing while tethered, it is not a big deal to manually home the machine by clicking one button, but if I want to print untethered, it is inconvenient to have to plug in the USB cable and connect to the printer just to home the machine prior to printing untethered. And if a print fails while printing untethered, I have to connect again to the printer to home it before restarting a new print.

So I got fed up and decided to investigate how to cause my printer to auto home prior to every print…

I compared the generated GCode from Cura (homes machine properly) and Simplify3D (does not home properly) to see what was different in the initial setup where the printer is homed and prepared to print. The original Simplify3D “Starting G-Code”, which can be found in the Scripts tab in the settings for the printer process, only contained two lines:

1

2

G28 X0 Y0;homeXandYaxes

G29;probeZ

I found that I needed to insert one new line (line 2 below: “G28 Z0”). NOTE: this only works for printers where the Z height is set in the firmware or where a functioning Z probe is installed and configured. Line 1 tells the printer to move along the X and Y axis until the end stops are triggered on each axis. Line 2 (this is the new line) tells the printer to move the Z axis until it’s end stop is triggered, which in my case for the Printrbot printers will be when the sensor senses the metal bed. Line 3 initiates the process to auto level by checking 3 points on the bed.

1

2

3

G28 X0 Y0;homeXandYaxes

G28 Z0;homeZaxis

G29;probeZ

I updated my “Starting G-Code” script in Simplify3D to add the second line. Now, the GCode created from Simplify3D always has the correct codes to home the machine properly. So whether printing tethered or untethered, I don’t need to manually home the machine.

One last tip, if you are planning to print from an SD card or OctoPrint, it is a good idea to include a skirt that has enough outlines to get your extruder primed prior to starting your print. For large objects (3+ inches in diameter), 2 outlines may be enough. But for smaller objects, you may want upwards of 4 lines or more to make sure your extruder is laying an even bead of plastic when your piece starts printing.