G Code Befehle im 3D Druck – Lerne die Sprache deines 3D Druckers!
G-Code bzw. GCode. Diesen Begriff hast du sicher schon einmal gehört oder im Glossar gelesen, wenn du dich bereits ein wenig mit dem 3D Druck befasst hast. In diesem Artikel erzähle ich dir, was denn ein G-Code überhaupt ist und wofür er im 3D-Druck verwendet wird. Zudem zeige ich dir auf, welche G-Code Befehle für dich wichtig sind, wenn du mit dem 3D-Drucken anfangen möchtest oder schon angefangen hast.
G-Code: Was ist das und wofür wird er verwendet?
3D Drucker können mit den 3D Modellen in den Formaten .Stl, .obj etc. nicht viel anfangen, da in ihnen zwar die geometrische Form gespeichert ist, aber nicht, wie der 3D-Drucker mit dieser Form umgehen soll. „Wie schnell soll das Modell in der Schicht Nummer 5 gedruckt werden?“ und ähnliche Fragen müssen für den 3D-Drucker beantwortet werden. Die Antworten befinden sich im G-Code, der somit die Sprache des 3D Druckers darstellt. Erst mit einem G-Code weiß der Drucker, was er zu tun.
Der Slicer übersetzt das 3D-Modell in den G-Code und fügt zudem noch maschinenrelevante Daten ein. Diese wurden exakt für den verwendeten 3D-Drucker definiert. Das heißt, dass der G-Code, den du für deinen Prusa Mini+ Drucker erstellt hast, sogar bei deinem Freund mit einem Prusa i3 MK3S nicht funktionieren wird.
Dazu müssten die maschinenrelevanten Einstellungen überarbeitet werden. Zu diesen gehört zum Beispiel die Größe des Druckbetts. Ist diese Einstellung falsch gewählt, startet der Drucker bei dir in der Mitte des Druckbetts und bei deinem Freund vielleicht sogar außerhalb dessen.
Deswegen ist es von Vorteil, wenn man ein Basiswissen in Bezug auf G-Codes hat, um so fehlerhafte Codes verstehen und bei Bedarf auch verbessern zu können. Beachte, dass manche Befehle mit dem Buchstaben G und wiederum andere mit einem M beginnen.
Endlich! Mein E-Book ist da!
➡️“G-Code im 3D-Druck“ hier kaufen
Die häufig verwendeten G-Code Befehle und ihre Bedeutung
Im Folgenden werde ich dir aufzeigen, was der jeweilige G-Code Befehl aussagt, welche Individualisierungen möglich sind und wie so ein G-Code Befehl aussehen kann.
G1-Der Befehl für die Lineare Bewegung
Den G1-Befehl führt dein 3D-Drucker die meiste Zeit aus. Deswegen ist es nicht schlecht, sich diesen mal etwas näher anzuschauen. G1 sagt deinem Drucker, dass er in einer Geraden zum nächsten Punkt fahren soll. Du kannst diesen Befehl nutzen, um eine Achse oder gleich mehrere Achsen zu steuern.
Beachte: Der Extruder wird wie jede andere Achse auch angesteuert. Somit kannst du den Materialfluss (Extrusion) und den Retract des Filaments ansteuern.
Werte:
Wenn du X, Y, und Z angibst, kannst du dem Drucker sagen, welche Punkte er anfahren soll. Beachte aber, dass diese Befehle ensprechend der Art der Positionierung (absolut/relativ) ausgeführt werden und somit entweder die genaue Koordinate anfahren oder den Abstand zum aktuellen Punkt.
Wenn du einen E-Befehl hinzufügst, kannst du bestimmen, ob der 3D-Drucker auf dem Weg auch extrudieren soll und wenn ja, wie viel. Beachte hierbei, dass sich die Extrusionslänge auf das Material bezieht, was vom Feeder in die Düse (Nozzle) gedrückt wird. Sagst du deinem Drucker also, dass er 10mm extrudieren soll, ist die Länge, die aus der Düse rauskommt nicht auch 10 mm, sondern viel länger. Das liegt daran, dass das Filament ein Durchmesser von 1,75 mm oder 2,85 mm hat und die Düse meist nur 0,4 mm. Deswegen sind die E-Werte aus dem Slicer geringer als die Wegstrecke, die der Drucker überbrücken muss.
Der F-Befehl gibt deinem Drucker vor, mit welcher Geschwindigkeit er die jeweilige Bewegung ausführen soll. Diese Geschwindigkeit wird immer in der Einheit mm/min angegeben, selbst dann, wenn du im Slicer mm/s ausgewählt hast. Also nicht wundern, wenn im G-Code die umgerechneten Werte stehen.
Viele 3D-Drucker benötigen nur die Werte für die Achsen, die auch tatsächlich bewegt werden sollen. Wenn du möchtest, dass sich nur die X Achse bewegt, schreibst du X hinzu und einen F-Wert für die Geschwindigkeit.
Beispiele:
G1 Code-Beispiel | Beschreibung |
---|---|
G1 X0 Y0 F2400 | Fahre auf dem Heizbett zum Punkt X=0, Y=0 mit einer Geschwindigkeit von 2400 mm/min |
G1 Z10 F1200 | Bewege die Z-Achse auf den Wert Z=10mm mit einer Geschwindigkeit von 1200 mm/min |
G1 X30 E10 F1800 | Drücke 10mm Filament in die Düse während du auf dem Heizbett zum Punkt X=30 mm mit einer Geschwindigkeit von 1800 mm/min fährst. |
G4-Pausiere den Druck für eine bestimmte Zeit
Mit dem Befehl G4 hast du die Möglichkeit, deinen Drucker für eine bestimmte Zeit zu pausieren.
Werte:
P000 – Der Drucker wartet für eine bestimmte Zeit in Millisekunden
S000 – Der Drucker wartet für eine bestimmte Zeit in Sekunden (Dieser Befehl gilt nur für Repetier, Marlin, RepRap Firmware und Smoothieware)
Beispiele:
G4 Code-Beispiel | Beschreibung |
---|---|
G1 P500 | Warte 500 Millisekunden und tue in der Zeit nichts – Während dieser Zeit werden alle Parameter des Druckers wie die Heatbedtemperatur etc. beibehalten, sodass du keine Angst haben muss, dass dein Druck dadurch ruiniert wird. |
G21-Ändern der Einheiten in Millimeter
Eigentlich sollte es nicht so oft vorkommen, dass du diesen Befehl einsetzen musst, da fast alle 3D Drucker standardmäßig in der Einheit [mm] arbeiten. Dennoch kann es nicht schaden, diesen Code im Hinterkopf zu behalten, wenn du den Anschein hast, dass dein Drucker auf Inches eingestellt ist.
Werte:
Keine
Beispiel:
G21
G28-Führt das Homing durch
Dieser Befehl sogrt dafür, dass dein 3D-Drucker das sogenannte Homing durchführt. Beim Homing fährt der Druckkopf zurück zu seinem „Nullpunkt“, den er erreicht hat, wenn er die Endstops für alle Achsen (X, Y und Z) angefahren hat. Das ist ein wichtiger Vorgang, weil der Druckkopf dann für jeden Druck denselben Startpunkt hat. Die Wege im G-Code werden von diesem Startpunkt aus vorgegeben. Ohne diesen Bezug zu einem bestimmten Punkt, könnten 3D-Drucke nicht vernünftig durchgeführt werden. Zum Ende eines Drucks wird dieser Befehl ebenfalls oft ausgeführt. Das ermöglicht das einfache Herunternehmen der 3D-gedruckten Modelle.
Werte:
Werden keine Werte angegeben, so wird dein Drucker die Endstops aller drei Achsen anfahren. Du kannst jedoch auch selbst bestimmen, welche Achsen er anfahren soll durch das einfache Hinzufügen der Buchstaben X, Y oder Z.
Beispiele:
G20 Code-Beispiel | Beschreibung |
---|---|
G28 | Homing für alle Achsen (X, Y und Z) |
G28 X Y | Homing für die Achsen X und Y |
G28 Z | Homing nur für die Z-Achse |
G90 und G91-Den Modus für die Positionierung einstellen (Positioning Mode)
Dein Drucker kann die Positionierung entweder absolut oder relativ durchführen:
- Absolute Positionierung: Hiermit gibst du deinem 3D-Drucker die Exakte Koordinate für X, Y oder Z vor, die er anfahren soll. Dazu nutzt du den Befehl G90.
- Relative Positionierung: Hiermit sagst du deinem 3D-Drucker, wie weit er sich von seiner aktuellen Position (X,Y,Z) in (X,Y,Z)-Richtung bewegen soll. Das klappt mit dem Befehl G91.
Du wirst wahrscheinlich die absolute Positionierung in deinen G-Codes häufiger finden, da der Slicer die exakten Koordinaten für die drei Achsen bereits kennt und diese für die Ermittlung der absoluten Position nutzt.
Werte:
Keine.
Beispiele:
G90 Code-Beispiel | Beschreibung |
---|---|
G90 | Nutze die absolute Positionierung für alle drei Achsen |
G1 X10 F3600 | Fahre auf dem Heizbett zum Punkt X=10mm mit einer Geschwindigkeit von 3600 mm/min (F3600) |
G1 X20 F3600 | Fahre auf dem Heizbett zum Punkt X=20mm mit einer Geschwindigkeit von 3600 mm/min |
G91 Code-Beispiel | Beschreibung |
---|---|
G91 | Nutze die relative Positionierung für alle drei Achsen |
G1 X10 F3600 | Fahre von der aktuellen Position auf dem Heizbett 10mm nach rechts mit einer Geschwindigkeit von 3600 mm/min |
G1 X10 F3600 | Fahre von der aktuellen Position auf dem Heizbett weitere 10mm nach rechts mit einer Geschwindigkeit von 3600 mm/min |
G92-Festlegung der aktuellen Position (Current Position)
Nutze diesen Befehl, wenn du die aktuelle Position deiner Achsen definieren möchtest. So kann man Verschiebungen (Offsets) in bestimmten Achsen ausgleichen. Häufig wird dieser Befel in Verbindung mit dem Extruder also der E-„Achse“ verwendet, um die Position des Filaments zu bestimmen. Du kannst hiermit die aktuelle Filamentposition überschreiben und alle weiteren Befehle in Bezug auf den Extruder werden diese Position als Bezugspunkt nehmen.
Werte:
Bestimme die absolute Koordinate für die Achse, die du mit dem G92-Befehl überschreiben möchtest. Das geht für X, Y, Z und auch E. Wenn du eine Achse weglässt, wird deren Wert auch nicht mit der aktuellen Position überschrieben.
Beispiele:
G92 Code-Beispiel | Beschreibung |
---|---|
G92 E0 | Stell die aktuelle Filamentposition auf E=0 im Extruder. |
G1 E10 F800 | Extrudiere Filament mit einer Länge von 10mm |
M104 und M109-Befehle für die Temperatureinstellung des Extruders
Diese beiden G-Code Befehle dienen dazu, die Temperatureinstellung des Extruders einzustellen.
- M104: Dieser Befehl beginnt mit dem Aufheizen des Extruders und erlaubt das direkte Ausführen von weiteren Befehlen.
- M109: Dieser Befehlt führt dazu, dass erst gewartet wird, bis die gewünschte Temperatur des Extruders erreicht ist. Erst danach können weitere Befehle ausgeführt werden.
Den G-Code-Befehl M109 sieht man wahrscheinlich öfter, da es ansonsten vorkommen kann, dass der Druck startet, bevor die gewünschte Temperatur überhaupt erreicht ist.
Sind die G-Codes für jeden 3D-Drucker so?
Während M104 und M109 meistens verwendet werden, gibt es auch Fälle, in denen andere Befehle zum Einsatz kommen. Das kommt zum Beispiel dann vor, wenn der Drucker .x3g Codes liest anstelle von .gcode-Dateien. Dann wird M133 anstelle des Befehls M109 genutzt. Manche 3D-Drucker wiederum (Flashforge Dreamer, Dremel oder ähnliche) verwenden dann den M6 Befehl. Das hängt dann von der verwendeten Firmware ab.
Werte:
- Mit dem S-Wert kannst du die Temperatur des Extruders in Grad Celsius festlegen (S190= 190 Grad Celsius).
- Der Einsatz des T-Werts eignet sich dann am besten, wenn dein 3D-Drucker mehrere Extruder hat und du einen bestimmten auf die gewünschte Temperatur bringen möchtest. Normalerweise ist T0 dann der rechte Extruder, wohingegen T1 dann den linken Extruder beschreibt.
Beispiele:
M104 Code-Beispiel | Beschreibung |
---|---|
M104 S190 T0 | Beginne mit dem Aufheizen von T0 auf 190 Grad Celsius. |
G28 X0 | Führe das Homing für die X-Achse durch, während der Extruder noch aufheizt. |
M109 S190 T0 | Warte bis T0 die Temperatur von 190 Grad Celsius erreicht hat, um dann weitere Befehle ausführen zu können. |
M106-Steuerung der Lüftergeschwindigkeit (Set Fan Speed)
Mit dem M106-Befehl kannst du die Geschwindigkeit des Bauteilelüfters deines 3D-Druckers einstellen. Beachte bitte, dass dein Drucker auch einen Lüfter besitzen könnte, der den Extruder kühlt. Du solltest also zunächst schauen, ob du den richtigen Lüfter steuerst. Es kann nämlich auch sein, dass du noch keinen Bauteilelüfter eingebaut hast.
Werte:
Hier bestimmt der S-Wert die Geschwindigkeit des Lüfters, wobei 0=Aus und 255=100% Geschwindigkeit bedeuten.
Beispiele:
M106 Code-Beispiel | Beschreibung |
---|---|
M106 S255 | Stelle die Lüftergeschwindigkeit auf 100%. |
M106 S127 | Stelle die Lüftergeschwindigkeit auf ca. 50%. (255/2=127,5) |
M106 S0 | Schalte den Lüfter komplett aus. |
M140 und M190-G Code Befehle für die Temperatureinstellung des Heizbetts (Bed Heating Commands)
Mit den M140- und M190-Befehlen bestimmst du die Temperatureinstellung des Heizbetts analog zum M104- und M109-Befehl wie im oben bereits beschrieben.
- M140: Dieser Befehl beginnt mit dem Aufheizen des Heizbetts und erlaubt das direkte Ausführen von weiteren Befehlen.
- M190: Dieser Befehlt führt dazu, dass erst gewartet wird, bis die gewünschte Temperatur des Heizbetts erreicht ist. Erst danach können weitere Befehle ausgeführt werden.
Beachte, dass das Aufheizen des Heizbetts einige Zeit in Anspruch nehmen kann. Nicht wundern, wenn dein 3D-Drucker während des Drucks plötzlich eine kleine Pause einlegt (bei M190) bis er dann wieder weiter macht.
Häufig wird der M140-Befehl an den Anfang des G-Codes gesetzt, um dann die anderen Befehle wie das Homing etc. durchführen zu können. Bevor der Druck aber startet, sollte ein M190-Befehl eingebaut werden, um eine stabile Temperatur für die erste Schicht zu gewährleisten.
Gilt das für jeden 3D Drucker?
Wie bei den M104- und M109-Befehlen gilt auch hier, dass dies von der verwendeten Firmware abhängig ist. Liest dein 3D-Drucker .x3g-Dateien dann wird M134 anstelle von M190verwendet und bei Flashforge Dreamer, Dremel oder ähnlichen Druckern ist M7 zu nutzen.
Werte:
Mit dem S-Wert kannst du die Temperatur des Heizbetts in Grad Celsius festlegen (S30= 30 Grad Celsius). Da die meisten 3D-Drucker nur über ein Heizbett verfügen, bedarf es keiner weiteren Anpassung etc.
Beispiele:
M140 / M190 Code-Beispiel | Beschreibung |
---|---|
M140 S50 | Beginne mit dem Aufheizen des Heizbetts auf 50 Grad Celsius. |
G28 | Führe das Homing für alle Achsen durch und heize gleichzeitig das Heizbett auf 50 Grad Celsius. |
M190 S50 | Warte bis die Temperatur von 50 Grad Celsius für das Heizbett erreicht ist, um dann weitere Befehle ausführen zu können. |
Weitere GCode Befehle für deinen 3D Drucker folgen.
G-Code im 3D-Druck: FAQ
Hier befinden sich einige Fragen, die häufig gestellt werden.
Hi und danke für die ausführlichen Erklärungen.
Mal ne Frage wie müssten die GCode Befehle aussehen, um einen Druck zu pausieren (evtl. nach dem Filamentwechsel zb.). Der Druckkopf sollte beim auslösen des Pause Befehls den Druck pausieren und zur einer bestimmten Koordinate fahren. Zuvor natürlich den Kopf vom Modell hoch fahren und dann seitlich weg.
Dann stellt sich gleich noch die Frage wie man danach den Druck an der pausierten Position fortfährt.
Danke
Bye Jens
Hallo Jens,
vielen Dank für deine Fragen.
Ich schreibe die Tage eine kleine Erweiterung des Artikels, da neue Befehle drin sind 🙂
Beste Grüße
Sercan 🙂
Hi Sercan.
Herzlichen Dank für deine tollen Erklärungen.
Wann kommt die Erweiterung zu diesem Artikel heraus?
Tschau Walter
Hi Jens,
nach RaspBars Kommentar wurde ich wieder auf den Artikel Aufmerksam gemacht. Sorry, dass das so lange gedauert hat…
Ich habe mich damit die Tage nochmal näher befasst und du könntest den Befehl von RaspBar nehmen, um den Druck für eine bestimmte Zeit zu pausieren.
Du kannst aber auch den Befehl M226/M25 verwenden. Anschließend wird mit dem Befehl M24 der Druck wieder aufgenommen.
Alternativen:
Wenn du Simplify3D nutzt, kannst du beispielsweise 2 Prozesse machen und nach dem ersten Prozess die Pause einbauen und im zweiten Prozess gibst du dann an, ab welchem Layer er dann wieder weiter drucken soll.
Bei Cura gab es mal ein Plugin namens PauseAtZ (Ist das inzwischen komplett implementiert?), bei dem du dann direkt angeben konntest, wo der Drucker pausieren soll und wann er wieder weiter machen soll.
Hoffe, dass das ein wenig Licht ins Dunkeln bringt, auch wenn das so lange gedauert hat -.-
Liebe Grüße
Sercan
Hallo,
Ich sehe schon das der Beitrag älter ist. Aber vielleicht hat ja schon einer eine Lösung. Und zwar habe ich einen anycubic vyper. Problem, ich möchte einen filament Wechsel machen. Bei den anycubic scheint es ein Problem zu geben wenn man wie ich in cura einen filament Wechsel machen will oder „Pause at high“. Während des druckens kann man Pause drücken und weiter drucken lassen.
Aber in cura zusätzlich den Wechsel oder Pause at high geht nicht. Er hält zwar an, fährt auch in eine gewisse Höhe, aber man kann dann nicht weiter drucken. Scheint ein Problem von anycubic zu sein.
Oder er hält an und fährt nach 5 Sekunden weiter. Da kann ich dann Pause drücken, filament wechseln, das würde gehen. aber wenn man einen stundenlangen Druck hat, weiß man ja nicht wann er an der gewissen Stelle ist um zu wechseln.
Vielleicht hat ja einer eine Lösung. Man muss doch irgendwo vielleicht einen gcode angeben können wo man sagt halt an und fahr weiter wenn ich es will.
Während des druckens kann ich ja auch Pause und weiter fahren lassen.
Danke schon mal für eventuelle Hilfe und Tipps.
Gruß Frank
Hallo, toller Artikel! Bitte mehr Artikel dieser Art. Viele Grüße
Hi Dennis,
vielen Dank für die positiven Worte.
Ich gebe mir seit Jahren Mühe und freue mich mehr über solche Kommentare als über alles andere 🙂
Falls du Ideen oder Wünsche für weitere Artikel dieser Art hast, dann schreib mir gerne.
LG
Sercan
Hallo . Mein Elegoo Neptun 3Pro druckt mir die Firstline auf der Linken Kante vom Druckbett!! Was für Befehle muss ich eingeben um die Fistline um etwa 5-10 mm ins Bettinnere zu verschieben?. Um eine Hilfreiche Antwort wäre ich dankbar. Mit freundlichen Grüßen
Gute Artikel. verstehe jetzt einges besser. Trotzdem eine Frage: Ich benutze Simplify mit meinem CR10Sprov2.
Immer wenn das Filament leer wird fährt der Druckkopf zur Seite zum Wechsel. Das ist soweit OK. Allerdings sinkt die Temperatur des Betts auf Raumtemperatur ab und die Teile werden dadurch locker. Wird der Druck dann weitergeführt werden die Teile nicht mehr fest und der Druckkopf verschiebt die Bauteile und der Druckl ist hin.
Wo müsste ich welchen G/M code eingeben um das Druckbett auf Temperatur zu halten.
Tolle Zusammenfassung.
Wäre es eigentlich möglich, GCode zu nutzen, um einen Gosundstecker im eigenen Netzwerk zu schalten? Genauer: Gibt es einen GCode-Befehl, der einen HTML-Link abschicken kann? Dann könnte sich der Drucker nach dem Drucken automatisch abschalten. Im Moment nutze ich einen Gosund mit Stromverbrauchsanzeige. Sobald mein Drucker einen bestimmten – geringen, weil er nicht mehr heizt, – Stromverbrauch hat, schaltet mein iobroker ihn ab.
Hey,
ich probiere zur Zeit in einem Projekt mit einem Roboter (UR10e) der Firma Universal Robots und einem daran montierten Schweißgerät der Firma Lorch einen metallischen 3D-Druck durchzuführen. Hierfür bräuchte ich jedoch einen Commad für den GCode, der das Schweißgerät ein und aus stellt. Gibt es denn einen solchen Befehl für den GCode. Das wäre mir wirklich eine sehr große Hilfe.
Danke schonmal im Voraus:)
LG