G-Code lernen Teil 2/2:
Fortgeschrittene CNC Programmierung
Im ersten Teil der Serie „CNC Programmierung: G-Code lernen – Einfach und Schnell“ haben wir die Grundlagen des G-Codes erlernt. In diesem Beitrag werden Sie weitere Befehle wie Unterprogramme, Schleifen, IF-Anweisungen und R-Parameter lernen.
Motivation: In der CNC-Fertigung ist es oft notwendig, รคhnliche Teile mit leichten Variationen zu produzieren. Die Erstellung einer neuen G-Code-Datei fรผr jede kleine รnderung mittels CAD/CAM-Software kann zeitaufwendig sein. Eine gute Lรถsung bietet die Nutzung einer anpassbaren G-Code-Datei. Mit Parametern lassen sich Verรคnderungen in der G-Code Datei schnell und einfach umsetzen, was Zeit spart und die Flexibilitรคt erhรถht. In diesem Artikel erfahren Sie wie die parametrisierte G-Code-Programmierung Ihre CNC-Prozesse effizienter macht.
Fรผr die CNC Programmierung (G-Code) nutzen wir unsere CNC Steuerungssoftware als kostenlosen G-Code-Simulator. Klicken Sie hier, um cncGraF kostenlos herunterzuladen.
Um mehr รผber den kostenlosen G-Code Simulator zu erfahren, klicken Sie auf den Blogartikel
„cncGraF: Kostenloser G-Code Simulator und CNC Maschinen-Emulator„.
รbersicht: Fortgeschrittene CNC Programmierung
G-Code: Unterprogramme
Zuerst fรผgen wir ein Unterprogramm hinzu. Dabei verwenden wir das G-Code-Beispiel aus dem ersten Teil dieser Serie „CNC Programmierung: G-Code lernen – Einfach und Schnell„. Die erweiterten G-Code-Zeilen sind farblich in Hellrot hervorgehoben. Der G-Code sieht dann folgendermaรen aus:
; G-Code-Datei: Herstellung eines Rechtecks am 22.12.2023
; Update am 23.01.2024
; Werkzeugnummer 1 wird gewรคhlt
T1
; Werkzeug heben mit Eilgeschwindigkeit auf die Hรถhe Z = 10mm รผber dem Nullpunkt
G00 Z10
; Mit Eilgeschwindigkeit auf die Position X = 10 und Y = 10 fahren
G00 X10 Y10
; Arbeitsspindel mit M3 mit einer Drehzahl von 2000 U/min einschalten
M3 S20000
; 5 Sekunden warten bis die Spindeldrehzahl erreicht ist
G04 H5
; Relative Bemaรung (Kettenmaร), Befehl G91 ist aktiv
G91
P1 ; Unterprogramm 1 wird aufgerufen
; Programmende
M5 M30
; Anfang des Unterprogramms 1
M99 P1
; Mitte des Rechtecks anfahren
G00 X50 Y30
; 2 mm mit Vorschub 600 mm pro Minute in das Werkstรผck eintauchen
G01 Z-12 F600
; Kreis (d=20mm, Mittelpunkt 60×60) im Uhrzeigersinn
; mit Vorschub 600 mm pro Minute fahren
G02 I0 J20
; Werkzeug heben mit Eilgeschwindigkeit : Z = 10mm รผber dem Nullpunkt
G00 Z12
; Mit Eilgeschwindigkeit auf die Position X = 10 und Y = 10 fahren
G00 X-50 Y-30
; 2 mm mit Vorschub 600 mm pro Minute in das Werkstรผck eintauchen
G01 Z-12
; Rechteck 100×100 mm mit Vorschub 600 mm pro Minute abfahren
G01 X100
G01 Y100
G01 X-100
G01 Y-100
; Werkzeug heben mit Eilgeschwindigkeit : Z = 10mm รผber dem Nullpunkt
G00 Z12
M99 ; Ende des Unterprogramms 1

Im G-Code (siehe oben) wird die Bearbeitung eines Rechtecks und eines Kreises beschrieben, wobei die beiden Formen im Unterprogramm 1 definiert sind. Das Unterprogramm wird mit Befehl P1 im Hauptprogramm aufgerufen.
Die Definition des Unterprogramms beginnt mit dem Befehl M99 P1 und endet mit M99. Alle Unterprogramme befinden sich am Ende des Hauptprogramms, d.h., hinter dem Befehl M30, der das Ende des Hauptprogramms kennzeichnet. Die Nummer des Unterprogramms wird dabei durch die Zahl nach ‚P‚ gekennzeichnet โ in diesem Fall 1.
G-Code Unterprogramme haben folgende Struktur:
G91 ; Relative Bemaรung (Kettenmaร) wird aktiviert
; Hauptprogramm
P1 ; Unterprogramm 1 wird aufgerufen
; Hauptprogramm
M30 ; Ende des Hauptprogramms
M99 P1
; Inhalt des Unterprogramms 1
M99
Hinweis: Es ist zu beachten, dass zu Beginn des Hauptprogramms der Befehl G91 gesetzt werden muss, um die relative Bemaรung (Kettenmaร) zu aktivieren. Alle nachfolgenden Koordinatenangaben sind damit relative Werte. Dies ist notwendig, damit die Unterprogramme an beliebigen Positionen platziert werden kรถnnen.
Unterprogramm-Verwaltung
Die CNC-Steuerungssoftware cncGraF verfรผgt รผber eine integrierte Unterprogramm-Verwaltung. Dort kรถnnen alle Unterprogramme gespeichert werden. In solch einem Fall muss das Unterprogramm nicht in der G-Code-Datei enthalten sein; stattdessen wird das Unterprogramm im Hauptprogramm nur noch mit dem G-Code-Befehl ‚P‚ und der Unterprogrammnummer (hier P1) aufgerufen.

Hinweis: Wenn ein Unterprogramm mit derselben Unterprogrammnummer (die Zahl hinter ‚P‚) sowohl in der G-Code-Datei als auch in der Unterprogramm-Verwaltung vorhanden ist, dann wird das Unterprogramm aus der G-Code-Datei verwendet. Die Software sucht zuerst in der Datei nach dem Unterprogramm und erst danach in der G-Code-Verwaltung. Dadurch ist es mรถglich, das Unterprogramm in der Verwaltung zu ‚รผberschreiben‘.
G-Code: Schleifen
Um die im Unterprogramm definierten Formen zu vervielfรคltigen, muss das Unterprogramm mehrmals aufgerufen werden. Dies wird mit den G-Code-Befehlen G25 Q und G26 fรผr Schleifen realisiert.
Der G-Code-Ausschnitt im Hauptprogramm sieht dann folgendermaรen aus:
G25 Q4
P1 ; Unterprogramm 1 wird aufgerufen
G00 X110
G26
Mit G25 Q und G26 wird eine Schleife programmiert. G25 definiert den Schleifenanfang, und mit G26 wird die Schleife beendet. Der Parameter Q definiert die Anzahl der Durchlรคufe. In unserem Beispiel sind 4 Durchlรคufe festgelegt. Nach jedem Unterprogrammaufruf erfolgt eine relative Positionsverschiebung in X fรผr das nรคchste Unterprogramm mit der Zeile: G00 X110.
Was ist ein R-Parameter?
Ein R-Parameter ist ein Platzhalter (Variable) im Bereich von R1 bis R999, in dem ein Wert gespeichert wird. Beispiel: R10 = 99.567. Diese Zeile definiert den Parameter R10, der den Wert 99.567 enthรคlt.
Durch Aufruf des R-Parameters (hier R10) kann im G-Code auf dessen Wert zugegriffen werden. Bei der Verwendung der R-Parameter ist Folgendes zu beachten:
- Grundrechenarten Addition, Subtraktion, Multiplikation und Division kรถnnen innerhalb eines Parameters ausgefรผhrt werden. Bei der Berechnung der Werte wird die Regel „Punkt vor Strich“ angewandt. Die Klammern werden nicht unterstรผtzt.
Beispiel:
R56 = 10/2 – 2*2
Das Ergebnis ist 1 - R-Parameter kรถnnen innerhalb der Berechnung verwendet werden.
Beispiel:
R55 = 10
R56 = R55/2 – 2*2
Ergebnis ist 1 - R-Parameter kรถnnen an folgenden Stellen im G-Code zugewiesen werden:
Befehl G00, Beispiel G00 X=R10
Befehl G01, Beispiel G01 X=R10 Y=R11 + 6 / 2
Befehl G02/G03 X/Y (Bogenbefehle), Beispiel: G02 I20 J20 X=R10 Y=R10
Befehl G25 Q (Schleife), Beispiel: G25 Q=R4
Befehl G53-G60 X/Y/Z, Beispiel G54 X=R20
Befehl IF-Anweisung, Beispiel: $IF R100==1 - R-Parameter sind globale Parameter, d.h., wenn sie am Anfang der G-Code-Datei festgelegt werden, dann sind sie fรผr die gesamte Datei verfรผgbar.
- R-Parameter kรถnnen auch in Unterprogrammen verwendet werden.
- Die Werte der R-Parameter werden unten in der Statusleiste des Texteditors angezeigt (siehe Bildschirmfoto unten)

Im Folgenden erweitern wir unsere Schleife um Parameter. Der G-Code-Ausschnitt sieht im Hauptprogramm dann folgendermaรen aus:
R4=4 ; R4 Parameter (Platzhalter) mit dem Wert 4 als Anzahl der Durchlรคufe anlegen
R5=110 ; R5 Parameter (Platzhalter) mit dem Wert 110 fรผr neue X Position des Unterprogramms
; Zuweisung des Wertes รผber Parameter R4
G25 Q=R4
P1 ; Unterprogramm 1 wird aufgerufen
G00 X=R5 ; Relative Verschiebung, definiert im R5 Parameter
G26
Was ist eine IF-Anweisung?
Die IF-Anweisung wird benutzt, um eine Bedingung zu prรผfen. Falls diese Bedingung erfรผllt ist, werden die Befehle innerhalb der Bedingung ausgefรผhrt. Es gibt folgende Bedienungen:
gleich ==
ungleich !=
grรถรer gleich >=
kleiner gleich <=
Die IF-Anweisung besteht aus folgenden Befehle $IF $ENDIF $ELSE $ELSEIF. Die IF-Anweisung muss alleine in der Zeile stehen. IF Anweisung kann im Hauptprogramm und im Unterprogramm enthalten sein.
Beispiel 1: $IF $ENDIF
R57=10 ; Parameter R57 (Platzhalter) mit dem Wert 10 anlegen
$IF R57== 10
; Dieser G-Code Inhalt wird ausgefรผhrt da Parameter R57 den Wert 10 hat (gleich ist erfรผllt)
$ENDIF
Beispiel 2: $IF $ELSEIF $ENDIF
R57=9
$IF R57<=9
; Dieser Inhalt wird ausgefรผhrt da Parameter R57=9 (kleiner gleich ist erfรผllt)
$ELSEIF R57>=10
; Dieser Inhalt wird NICHT ausgefรผhrt da Parameter R57 den Wert 9 hat.
; Die รnderung des Wertes auf 10 oder hรถher im Parameter R57 fรผhrt dazu dass
; dieser Inhalt ausgefรผhrt wird.
$ENDIF
Hinweis! Eine IF-Anweisung innerhalb einer anderen IF-Anweisung wird nicht unterstรผtzt (siehe Tabelle unten).
| FALSCH | RICHTIG |
|---|---|
| $IF R200==0 ; G-Code: Inhalt $IF R1==1 ; G-Code: Inhalt $ENDIF ; G-Code: Inhalt $ENDIF | $IF R200==0 ; G-Code: Inhalt $ENDIF $IF R1==1 ; G-Code: Inhalt $ENDIF |
Komplettes G-Code-Beispiel
Nachdem wir nun die Programmierung von Unterprogrammen, Schleifen, R-Parametern und IF-Anweisungen kennengelernt haben, erweitern wir unser Beispiel um diese Befehle.
Unser G-Code sieht dann folgendermaรen aus:
; G-Code-Datei: Herstellung eines Rechtecks am 15.01.2024
; Update am 23.01.2024
R3=3 ; Anzahl der Durchlรคufe in Y festlegen
R4=4 ; Anzahl der Durchlรคufe in X festlegen
R5=110 ; X Verschiebung fรผr neues Unterprogramm festlegen
R6=110; Y Verschiebung fรผr neues Unterprogramm festlegen
R7=1 ; Festlegen ob Kreis erzeugt werden soll, 1 – ja, 0 – nein
; Werkzeugnummer 1 wird gewรคhlt
T1
; Werkzeug heben mit Eilgeschwindigkeit auf die Hรถhe Z = 10mm รผber dem Nullpunkt
G00 Z10
; Mit Eilgeschwindigkeit auf die Position X = 10 und Y = 10 fahren
G00 X10 Y10
; Arbeitsspindel mit M3 mit einer Drehzahl von 2000 U/min einschalten
M3 S2000
; 5 Sekunden warten bis die Spindeldrehzahl erreicht ist
G04 H5
; Relative Bemaรung (Kettenmaร) wird aktiviert
G91
; Zuweisung des Wertes รผber Parameter R3
G25 Q=R3
; Zuweisung des Wertes รผber Parameter R4
G25 Q=R4
P1 ; Unterprogramm 1 wird aufgerufen
G00 X=R5 ; Relative Verschiebung, definiert im R5 Parameter
G26
G00 Y=R6 ; Relative Verschiebung in X, definiert im R6 Parameter
G00 X=-R5*R4 ; Relative Verschiebung in X auf Ausgangposition
G26
; Programmende
M5 M30
; Anfang des Unterprogramms 1
M99 P1
$IF R7==1
; Mitte des Rechtecks anfahren
G00 X50 Y30
; 2 mm mit Vorschub 600 mm pro Minute in das Werkstรผck eintauchen
G01 Z-12 F600
; Kreis (d=20mm, Mittelpunkt 60×60) im Uhrzeigersinn
; mit Vorschub 600 mm pro Minute fahren
G02 I0 J20
; Werkzeug heben mit Eilgeschwindigkeit : Z = 10mm รผber dem Nullpunkt
G00 Z12
; Mit Eilgeschwindigkeit auf die Position X = 10 und Y = 10 fahren
G00 X-50 Y-30
$ENDIF
; 2 mm mit Vorschub 600 mm pro Minute in das Werkstรผck eintauchen
G01 Z-12
; Rechteck 100×100 mm mit Vorschub 600 mm pro Minute abfahren
G01 X100
G01 Y100
G01 X-100
G01 Y-100
; Werkzeug heben mit Eilgeschwindigkeit : Z = 10mm รผber dem Nullpunkt
G00 Z12
M99 ; Ende des Unterprogramms 1

Im G-Code (siehe oben) werden mehrere R-Parameter, Schleifen und IF-Anweisungen verwendet. รber die R-Parameter kann die G-Code-Datei sehr leicht verรคndert werden. Die R-Parameter R3 und R4 definieren die Anzahl der Teile in X und Y. Die R-Parameter R5 und R6 bestimmen den Abstand zwischen den Teilen in X und Y, und der letzte Parameter, R7, legt fest, ob ein Kreis ausgegeben werden soll oder nicht (siehe IF-Anweisung im Unterprogramm).
Zusammenfassung
In diesem Blogartikel haben wir uns mit den verschiedenen Facetten der CNC Programmierung auseinandergesetzt. Angefangen bei den Grundlagen, die im Artikel
‚CNC Programmierung: G-Code lernen – Einfach und Schnell‚ behandelt wurden, bis hin zu fortgeschrittenen Themen wie R-Parametern, Schleifen und IF-Anweisungen. Damit haben wir die Breite und Tiefe der CNC Programmierung beleuchtet.
Wir hoffen, dass Ihnen dieser Blogartikel hilft, den gewรผnschten Erfolg zu erzielen.
Mit freundlichen Grรผรen, Ihr BOENIGK-electronics Team