1. Übersicht

Die LinuxCNC G-Code Sprache basiert auf der RS274/NGC Sprache. Die G-Code-Sprache basiert auf Codezeilen. Jede Zeile (auch Block genannt) kann Befehle enthalten, um mehrere verschiedene Dinge zu tun. Codezeilen können in einer Datei gesammelt werden, um ein Programm zu erstellen.

Eine typische Codezeile besteht aus einer optionalen Zeilennummer am Anfang, gefolgt von einem oder mehreren Wörtern. Ein Wort besteht aus einem Buchstaben gefolgt von einer Zahl (oder etwas, das als Zahl ausgewertet werden kann). Ein Wort kann entweder einen Befehl geben oder ein Argument für einen Befehl darstellen. Zum Beispiel ist G1 X3 eine gültige Codezeile mit zwei Wörtern. G1 ist ein Befehl, der bedeutet fahre in einer geraden Linie mit der programmierten Vorschubgeschwindigkeit zum programmierten Endpunkt, und X3 liefert einen Argumentwert (der Wert von X sollte am Ende der Bewegung 3 sein). Die meisten LinuxCNC G-Code Befehle beginnen entweder mit G oder M (für General und Miscellaneous). Die Wörter für diese Befehle werden G-Codes und M-Codes genannt. Häufig sind auch Unterprogrammcodes, die mit o- beginnen, die als o-Codes bezeichnet werden.

Die LinuxCNC Sprache hat keinen Indikator für den Start eines Programms. Der Interpreter arbeitet jedoch mit Dateien. Ein einzelnes Programm kann in einer einzigen Datei stehen, oder ein Programm kann über mehrere Dateien verteilt sein. Eine Datei kann auf folgende Weise mit Prozent-Zeichen abgegrenzt werden. Die erste nicht leere Zeile einer Datei kann nichts anderes als ein Prozentzeichen, %, enthalten, möglicherweise umgeben von Leerzeichen, und später in der Datei (normalerweise am Ende der Datei) kann es eine ähnliche Zeile geben. Die Abgrenzung einer Datei mit Prozentzeichen ist optional, wenn die Datei ein M2 oder M30 enthält, ist aber erforderlich, wenn nicht. Ein Fehler wird gemeldet, wenn eine Datei am Anfang, aber nicht am Ende eine Prozentzeile enthält. Der nützliche Inhalt einer Datei, die durch Prozentzeichen abgegrenzt ist, hört nach der zweiten Prozentzeile auf. Alles, was danach kommt, wird ignoriert.

Die LinuxCNC G-Code Sprache hat zwei Befehle (M2 oder M30), von denen jeder ein Programm beendet. Ein Programm kann vor dem Ende einer Datei enden. Zeilen einer Datei, die nach dem Ende eines Programms stehen, werden nicht ausgeführt. Der Interpreter liest sie nicht einmal.

2. Format einer Zeile

Eine zulässige Eingabezeile besteht der Reihe nach aus den folgenden Zeichen, wobei die Anzahl der in einer Zeile zulässigen Zeichen begrenzt ist (derzeit 256).

  1. ein optionales Blocklöschzeichen, das ein Schrägstrich / ist.

  2. eine optionale Zeilennummer.

  3. Irgendeine Anzahl an:

    1. Wörtern,

    2. Parameter-Einstellungen,

    3. Unterprogramm Codes, und

    4. Kommentaren.

  4. eine Zeilenende-Markierung (Wagenrücklauf oder Zeilenvorschub oder beides).

Jede nicht ausdrücklich erlaubte Eingabe ist illegal und führt zu einer Fehlermeldung des Interpreters.

Leerzeichen und Tabulatoren sind an jeder Stelle einer Codezeile erlaubt und ändern die Bedeutung der Zeile nicht, außer innerhalb von Kommentaren. Dies macht einige seltsam aussehende Eingaben legal. Die Zeile G0X +0. 12 34Y 7 ist zum Beispiel äquivalent zu G0 x+0.1234 Y7.

Leerzeilen sind in der Eingabe erlaubt. Sie sind zu ignorieren.

Bei der Eingabe wird nicht zwischen Groß- und Kleinschreibung unterschieden, außer in Kommentaren, d. h. jeder Buchstabe außerhalb eines Kommentars kann groß- oder kleingeschrieben sein, ohne dass sich die Bedeutung einer Zeile ändert.

2.1. /: Block Delete

Das optionale Zeichen zum Löschen von Blöcken, der Schrägstrich /, kann, wenn er an erster Stelle in einer Zeile steht, von einigen Benutzeroberflächen verwendet werden, um Codezeilen bei Bedarf zu überspringen. In Axis schaltet die Tastenkombination Alt-m-/ die Blocklöschung ein und aus. Wenn die Blocklöschung aktiviert ist, werden alle Zeilen, die mit dem Schrägstrich / beginnen, übersprungen.

In AXIS ist es auch möglich, das Löschen von Blöcken mit dem folgenden Symbol zu aktivieren:

AXIS-Block Löschsymbol

../gui/images/tool_blockdelete.png

2.2. Optional Line Number

Eine Zeilennummer ist der Buchstabe N, gefolgt von einer ganzen Zahl ohne Vorzeichen, optional gefolgt von einem Punkt und einer weiteren ganzen Zahl ohne Vorzeichen. Zum Beispiel sind N1234 und N56.78 gültige Zeilennummern. Sie können wiederholt oder außer der Reihe verwendet werden, obwohl dies in der Regel vermieden werden sollte. Zeilennummern können auch übersprungen werden, was ebenfalls gängige Praxis ist. Eine Zeilennummer muss nicht zwingend verwendet werden, aber sie muss an der richtigen Stelle stehen, wenn sie verwendet wird.

Anmerkung
Zeilennummern werden nicht empfohlen. Siehe <gcode:best-practices,Best Practices>.

2.3. Wörter, Parameter, Unterroutinen, Kommentare

2.3.1. Words

Ein Wort ist ein Buchstabe außer N oder O ("o"), gefolgt von einer Gleitkommazahl.

Wörter können mit jedem der in der folgenden Tabelle aufgeführten Buchstaben beginnen. Die Tabelle enthält der Vollständigkeit halber auch N und O, obwohl Zeilennummern und Programmfluss Parameter, wie oben definiert, keine Wörter sind. Mehrere Buchstaben (I, J, K, L, P, R) können in verschiedenen Zusammenhängen unterschiedliche Bedeutungen haben. Buchstaben, die sich auf Achsennamen beziehen, gelten nicht für eine Maschine, die nicht über die entsprechende Achse verfügt.

Tabelle 1. Wörter und ihre Bedeutungen
Buchstabe Bedeutung

A

A-Achse der Maschine

B

B-Achse der Maschine

C

C-Achse der Maschine

D

Werkzeugradius-Korrekturnummer

F

Vorschubgeschwindigkeit

G

Allgemeine Funktion (siehe Tabelle <cap:modal-groups,G-Code Modale Gruppen>>)

H

Werkzeuglängen-Offset-Index

I

X-Versatz für Bögen und G87-Festzyklen

J

Y-Versatz für Bögen und G87-Festzyklen

K

Z-Versatz für Bögen und G87-Konservenzyklen.

Spindel-Bewegungs-Verhältnis für G33 synchronisierte Bewegungen.

L

generisches Parameterwort für G10, M66 und andere

M

Verschiedene Funktionen (siehe Tabelle <cap:modal-groups,M-Code Modale Gruppen>>)

N

Zeilennummer (nicht empfohlen, siehe Best Practices)

O

o-Codes für die Programmflusssteuerung (siehe o-Codes)

P

Verweilzeit in Festzyklen und mit G4.

Schlüssel wird mit G10 verwendet.

Q

Vorschubinkrement in G73, G83 Festzyklen

R

Bogenradius oder Festzyklusebene

S

Spindeldrehzahl

T

Werkzeugauswahl

U

U-Achse der Maschine

V

V-Achse der Maschine

W

W-Achse der Maschine

X

X-Achse der Maschine

Y

Y-Achse der Maschine

Z

Z-Achse der Maschine

2.3.2. Parameter

Parameter werden mit einem "#"-Symbol vor ihnen identifiziert. Siehe den Abschnitt zu Parametern.

2.3.3. Subroutine Codes

Auch als "o-Codes" bezeichnet, werden diese Programm-Kontrollfluss Kommandos (wie z.B. if-else logic und aufrufbare Unterprogramme (engl. callable subroutines)) angeboten und auf der Seite zu <o-Codes> und auch unten im Abschnitt Subroutine-Codes und Parameter beschrieben.

Anmerkung
o-Codes werden manchmal auch o-Worte genannt.

2.3.4. Kommentare

Kommentare können in eine Zeile mit Klammern () oder für den Rest einer Zeile mit einem Semikolon eingebettet werden. Es gibt auch "aktive" Kommentare wie MSG, DEBUG, usw. Siehe die Abschnitt zu den Bemerkungen.

2.4. End of Line Marker

Dies ist eine beliebige Kombination der Zeichen für Wagenrücklauf (engl. carriage return) oder Zeilenvorschub (engl. line feed).

3. Numbers

Die folgenden Regeln werden für (explizite) Zahlen verwendet. In diesen Regeln ist eine Ziffer ein einzelnes Zeichen zwischen 0 und 9.

  • Eine Nummer besteht aus:

    • ein optionales Plus- oder Minuszeichen, gefolgt von

    • Null bis viele Ziffern, eventuell gefolgt von

    • eine Dezimalstelle, gefolgt von

    • Null bis viele Ziffern - vorausgesetzt, die Zahl enthält mindestens eine Ziffer.

  • Es gibt zwei Arten von Zahlen:

    • Ganze Zahlen, die keinen Dezimalpunkt haben,

    • Dezimalzahlen, die einen Dezimalpunkt haben.

  • Zahlen können eine beliebige Anzahl von Ziffern haben, vorbehaltlich der Begrenzung der Zeilenlänge. Es werden jedoch nur etwa siebzehn signifikante Stellen beibehalten (ausreichend für alle bekannten Anwendungen).

  • Eine Zahl ungleich Null ohne Vorzeichen, aber das erste Zeichen wird als positiv angenommen.

Beachten Sie, dass Anfangs- (vor dem Dezimalpunkt und der ersten Nicht-Null-Stelle) und Nachnullen (nach dem Dezimalpunkt und der letzten Nicht-Null-Stelle) erlaubt, aber nicht erforderlich sind. Eine Zahl, die mit Anfangs- oder Nachnullen geschrieben wird, hat beim Lesen denselben Wert, als ob die zusätzlichen Nullen nicht vorhanden wären.

Zahlen, die für bestimmte Zwecke in RS274/NGC verwendet werden, sind oft auf eine endliche Menge von Werten oder auf einen Wertebereich beschränkt. Bei vielen Verwendungszwecken müssen Dezimalzahlen nahe an Ganzzahlen liegen; dazu gehören die Werte von Indizes (z. B. für Parameter und Karussellplatznummern), M-Codes und G-Codes multipliziert mit zehn. Eine Dezimalzahl, die eine ganze Zahl darstellen soll, gilt als nahe genug, wenn sie innerhalb von 0,0001 eines ganzzahligen Wertes liegt.

4. Parameter

Die Sprache RS274/NGC unterstützt Parameter - was in anderen Programmiersprachen als Variablen bezeichnet würde. Es gibt mehrere Arten von Parametern mit unterschiedlichem Zweck und Aussehen, die in den folgenden Abschnitten beschrieben werden. Der einzige Wertetyp, der von Parametern unterstützt wird, ist die Fließkommazahl; es gibt in G-Code keine String-, Boolean- oder Integer-Typen wie in anderen Programmiersprachen. Logische Ausdrücke können jedoch mit gcode formuliert werden: gcode:binary-operators,Boolesche Operatoren>> ( AND, OR, XOR, und die Vergleichsoperatoren EQ,NE,GT,GE,LT,LE), sowie die MOD, ROUND, FUP und FIX <gcode:functions,Operatoren>> unterstützen Ganzzahlarithmetik.

Die Parameter unterscheiden sich in Syntax, Umfang, Verhalten, wenn sie noch nicht initialisiert sind, Modus, Persistenz und Verwendungszweck.

Syntax

Es gibt drei Arten der syntaktischen Erscheinung:

  • nummeriert - #4711

  • benannt local - #<lokaler Wert>

  • benannt global - #<_globalvalue>

Geltungsbereich (engl. scope)

Der Geltungsbereich eines Parameters ist entweder global oder lokal innerhalb eines Unterprogramms. Unterprogramm-Parameter und lokale benannte Variablen haben einen lokalen Geltungsbereich. Globale benannte Parameter und nummerierte Parameter ab der Nummer 31 haben einen globalen Geltungsbereich. RS274/NGC verwendet lexical scoping - in einer Subroutine sind nur die darin definierten lokalen Variablen und alle globalen Variablen sichtbar. Die lokalen Variablen einer aufrufenden Prozedur sind in einer aufgerufenen Prozedur nicht sichtbar.

Verhalten nicht initialisierter Parameter
  • Nicht initialisierte globale Parameter und nicht verwendete Unterprogrammparameter geben den Wert Null zurück, wenn sie in einem Ausdruck verwendet werden.

  • Uninitialisierte benannte Parameter signalisieren einen Fehler, wenn sie in einem Ausdruck verwendet werden.

Modus

Die meisten Parameter sind schreib- und lesbar und können innerhalb einer Zuweisungsanweisung zugewiesen werden. Bei vielen vordefinierten Parametern ist dies jedoch nicht sinnvoll, daher sind sie schreibgeschützt - sie können in Ausdrücken erscheinen, aber nicht auf der linken Seite einer Zuweisungsanweisung.

Persistenz

Wenn LinuxCNC heruntergefahren wird, verlieren die flüchtigen Parameter ihre Werte. Alle Parameter mit Ausnahme der nummerierten Parameter im aktuellen persistenten Bereich
[persistent_range,Der Bereich der persistenten Parameter kann sich mit fortschreitender Entwicklung ändern. Dieser Bereich liegt derzeit zwischen 5161 und 5390. Die im Array required_parameters in der Datei src/emc/rs274ngc/interp_array.cc definiert.]
sind flüchtig. Persistente Parameter werden in der .var-Datei gespeichert und auf ihre vorherigen Werte zurückgesetzt, wenn LinuxCNC erneut gestartet wird. Flüchtige nummerierte Parameter werden auf Null zurückgesetzt.

Verwendungszweck
  • Benutzer-Parameter - nummerierte Parameter im Bereich 31..5000 und benannte globale und lokale Parameter mit Ausnahme der vordefinierten Parameter. Diese sind für die allgemeine Speicherung von Fließkommawerten, wie Zwischenergebnisse, Flags usw., während der Programmausführung verfügbar. Sie können gelesen und geschrieben werden (ihnen kann ein Wert zugewiesen werden).

  • Unterprogramm-Parameter - diese werden verwendet, um die aktuellen Parameter zu speichern, die an ein Unterprogramm übergeben werden.

  • Nummerierte Parameter - die meisten davon werden verwendet, um auf Offsets von Koordinatensystemen zuzugreifen.

  • System-Parameter - werden verwendet, um die aktuell laufende Version zu ermitteln. Sie sind schreibgeschützt.

4.1. Numbered Parameters

Ein nummerierter Parameter ist das Doppelkreuz-Zeichen # (auch hash oder pound), gefolgt von einer ganzen Zahl zwischen 1 und (derzeit) 5602
[Der RS274/NGC-Interpreter verwaltet ein Array mit nummerierten Parametern. Seine Größe wird durch das Symbol RS274NGC_MAX_PARAMETERS in der Datei src/emc/rs274ngc/interp_internal.hh) definiert. Diese Anzahl numerischer Parameter kann sich auch erhöhen, wenn die Entwicklung die Unterstützung für neue Parameter hinzufügt.]
. Der Parameter wird durch diese Ganzzahl referenziert, und sein Wert ist die Zahl, die im Parameter gespeichert ist.

Mit dem =-Operator wird ein Wert in einem Parameter gespeichert, zum Beispiel:

#3 = 15 (Parameter 3 auf 15 setzen)

Eine Parametereinstellung wird erst dann wirksam, wenn alle Parameterwerte in der gleichen Zeile gefunden worden sind. Wenn beispielsweise der Parameter 3 zuvor auf 15 eingestellt wurde und die Zeile #3=6 G1 X#3 interpretiert wird, erfolgt eine gerade Bewegung zu einem Punkt, an dem X gleich 15 ist, und der Wert von Parameter 3 wird 6 sein.

Das Zeichen # hat Vorrang vor anderen Operationen, so dass z. B. #1+2 die Zahl bedeutet, die sich durch Addition von 2 zum Wert von Parameter 1 ergibt, und nicht den Wert in Parameter 3. Natürlich bedeutet #[1+2] den in Parameter 3 gefundenen Wert. Das #-Zeichen kann wiederholt werden; zum Beispiel bedeutet ##2 den Wert des Parameters, dessen Index der (ganzzahlige) Wert von Parameter 2 ist.

  • 31-5000 - G-Code Benutzerparameter. Diese Parameter sind global in der G-Codedatei und für die allgemeine Verwendung verfügbar. Flüchtig.

  • 5061-5069 - Koordinaten eines G38 Sondenergebnisses (X, Y, Z, A, B, C, U, V & W). Koordinaten befinden sich in dem Koordinatensystem, in dem die G38 stattfand. Flüchtig.

  • 5070 - G38 Prüfpunktergebnis: 1 bei Erfolg, 0, wenn Prüfpunkt nicht geschlossen werden konnte. Verwendet mit G38.3 und G38.5. Flüchtig.

  • 5161-5169 - "G28" Home für X, Y, Z, A, B, C, U, V & W. Persistent.

  • 5181-5189 - "G30" Home für X, Y, Z, A, B, C, U, V & W. Persistent.

  • 5210 - 1, wenn "G52"- oder "G92"-Offset derzeit angewendet wird, sonst 0. Standardmäßig persistent, flüchtig wenn DISABLE_G92_PERSISTENCE = 1 im Abschnitt [RS274NGC] der INI-Datei gesetzt.

  • 5211-5219 - Gemeinsamer "G52" und "G92" Offset für X, Y, Z, A, B, C, U, V & W. Standardmäßig flüchtig; persistent, wenn DISABLE_G92_PERSISTENCE = 1 im Abschnitt [RS274NGC] der INI-Datei.

  • 5220 - Koordinatensystem Nummer 1 - 9 für G54 - G59.3. Persistent.

  • 5221-5230 - Koordinatensystem 1, G54 für X, Y, Z, A, B, C, U, V, W & R. R bezeichnet den XY-Drehwinkel um die Z-Achse. Persistent.

  • 5241-5250 - Koordinatensystem 2, G55 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5261-5270 - Koordinatensystem 3, G56 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5281-5290 - Koordinatensystem 4, G57 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5301-5310 - Koordinatensystem 5, G58 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5321-5330 - Koordinatensystem 6, G59 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5341-5350 - Koordinatensystem 7, G59.1 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5361-5370 - Koordinatensystem 8, G59.2 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5381-5390 - Koordinatensystem 9, G59.3 für X, Y, Z, A, B, C, U, V, W & R. Persistent.

  • 5399 - Ergebnis von M66 - Prüfen oder auf Eingabe warten. Flüchtig.

  • 5400 - Werkzeugnummer. Flüchtig.

  • 5401-5409 - Tool Offsets for X, Y, Z, A, B, C, U, V & W. Set by G43. Volatile.

  • 5410 - Werkzeugdurchmesser. Flüchtig.

  • 5411 - Werkzeug-Frontwinkel. Flüchtig.

  • 5412 - Werkzeug-Rückenwinkel (engl. back angle). Flüchtig.

  • 5413 - Werkzeugausrichtung. Flüchtig.

  • 5420-5428 - Aktuelle relative Position im aktiven Koordinatensystem inklusive aller Offsets und in den aktuellen Programmeinheiten für X, Y, Z, A, B, C, U, V & W, flüchtig.

  • 5599 - Flag zur Steuerung der Ausgabe von (DEBUG,)-Anweisungen. 1=Ausgabe, 0=keine Ausgabe; default=1. Flüchtig.

  • 5600 - Werkzeugwechsler-Fehleranzeige. Wird mit der Komponente iocontrol-v2 verwendet. 1: Werkzeugwechsler gestört, 0: normal. Flüchtig.

  • 5601 - Fehlercode des Werkzeugwechslers. Wird mit der Komponente iocontrol-v2 verwendet. Gibt den Wert des HAL-Pins toolchanger-reason wieder, wenn ein Fehler aufgetreten ist. Flüchtig.

Persistenz nummerierter Parameter

Die Werte der Parameter im persistenten Bereich werden über die Zeit beibehalten, auch wenn das Bearbeitungszentrum ausgeschaltet ist. LinuxCNC verwendet eine Parameterdatei, um die Persistenz zu gewährleisten. Sie wird vom Interpreter verwaltet. Der Interpreter liest die Datei, wenn er startet, und schreibt die Datei, wenn er beendet wird.

Das Format einer Parameter-Datei ist in Tabelle Parameter-Datei-Format dargestellt.

Der Interpreter erwartet, dass die Datei zwei Spalten enthält. Er überspringt alle Zeilen, die nicht genau zwei numerische Werte enthalten. In der ersten Spalte wird ein Integer-Wert erwartet (die Nummer des Parameters). Die zweite Spalte enthält eine Fließkommazahl (der letzte Wert dieses Parameters). Der Wert wird im Interpreter als doppelt genaue Fließkommazahl dargestellt, aber ein Dezimalpunkt ist in der Datei nicht erforderlich.

Parameter im benutzerdefinierten Bereich (31-5000) können in diese Datei eingefügt werden. Solche Parameter werden vom Interpreter gelesen und in die Datei geschrieben, wenn er beendet wird.

Fehlende Parameter im persistenten Bereich werden auf Null initialisiert und beim nächsten Speichervorgang mit ihren aktuellen Werten geschrieben.

Die Parameternummern müssen in aufsteigender Reihenfolge angeordnet sein. Wenn sie nicht in aufsteigender Reihenfolge angeordnet sind, wird ein Fehler "Parameterdatei nicht in Ordnung" gemeldet.

Die Originaldatei wird als Sicherungsdatei gespeichert, wenn die neue Datei geschrieben wird.

Tabelle 2. Parameter-Dateiformat
Parameter-Nummer Parameter-Wert

5161

0.0

5162

0.0

4.2. Subroutine Codes and Parameters

Subroutine-Codes oder o-Codes (manchmal auch o-words genannt), sorgen für Logik und Flusssteuerung in NGC-Programmen (wie in if-else-Logik). Sie werden Subroutine-Codes genannt, weil sie auch Subroutinen (wie in sub-endsub) bilden können.

Siehe Kapitel über o-Codes.

Anmerkung
Werden o-Codes zur Bildung von Subroutinen verwendet, so können o-Codes auch solche Subroutinen aufrufen und bis zu 30 Parameter angeben, die der Subroutine lokal zur Verfügung stehen und flüchtig sind. (Siehe den Abschnitt zu o-Codes für eine vollständigere Beschreibung und Beispiele.)
Anmerkung
Während sowohl der untere als auch der obere Fall o- gültig sind, verwendet die beste Praxis den unteren Fall "o-", weil sie 0 (Null) und O (großes o) hilft zu unterscheiden.

4.3. Named Parameters

Benannte Parameter funktionieren wie nummerierte Parameter, sind aber einfacher zu lesen. Alle Parameternamen werden in Kleinbuchstaben umgewandelt und Leerzeichen und Tabulatoren werden entfernt, so dass sich <param> und <P a R am > auf denselben Parameter beziehen. Benannte Parameter müssen mit < >-Zeichen umschlossen werden.

#<benannter Parameter> ist ein lokaler benannter Parameter. Standardmäßig ist ein benannter Parameter lokal in dem Bereich, in dem er zugewiesen ist. Sie können nicht auf einen lokalen Parameter außerhalb des Unterprogramms zugreifen. Das bedeutet, dass zwei Unterprogramme die gleichen Parameternamen verwenden können, ohne dass die Gefahr besteht, dass ein Unterprogramm die Werte in einem anderen überschreibt.

#<_globaler benannter Parameter> ist ein globaler benannter Parameter. Sie sind von aufgerufenen Unterprogrammen aus zugänglich und können Werte innerhalb von Unterprogrammen setzen, die für den Aufrufer zugänglich sind. Was den Anwendungsbereich betrifft, verhalten sie sich wie normale numerische Parameter. Sie werden nicht in Dateien gespeichert.

Beispiele:

Deklaration einer benannten globalen Variablen
#<_endmill_dia> = 0.049
Verweis auf eine zuvor deklarierte globale Variable
#<_endmill_rad> = [#<_endmill_dia>/2.0]
Gemischte literale und benannte Parameter
o100 call [0.0] [0.0] [#<_inside_cutout>-#<_endmill_dia>] [#<_Zcut>] [#<_feedrate>]

Benannte Parameter entstehen, wenn ihnen zum ersten Mal ein Wert zugewiesen wird. Lokale benannte Parameter verschwinden, wenn ihr Geltungsbereich verlassen wird: Wenn ein Unterprogramm zurückkehrt, werden alle seine lokalen Parameter gelöscht und können nicht mehr referenziert werden.

Es ist ein Fehler, einen nicht existierenden benannten Parameter innerhalb eines Ausdrucks oder auf der rechten Seite einer Zuweisung zu verwenden. Die Ausgabe des Wertes eines nicht existierenden benannten Parameters mit einer DEBUG-Anweisung - wie (DEBUG, <kein_solcher_parameter>) - zeigt die Zeichenkette # an.

Globale Parameter sowie lokale Parameter, die auf globaler Ebene zugewiesen werden, behalten ihren einmal zugewiesenen Wert auch nach Beendigung des Programms und haben diese Werte auch bei der erneuten Ausführung des Programms.

Die Funktion EXISTS prüft, ob ein bestimmter benannter Parameter existiert.

4.4. Predefined Named Parameters

Die folgenden globalen, nur lesbaren benannten Parameter sind verfügbar, um auf den internen Zustand des Interpreters und den Maschinenzustand zuzugreifen. Sie können in beliebigen Ausdrücken verwendet werden, zum Beispiel um den Programmablauf mit if-then-else-Anweisungen zu steuern. Beachten Sie, dass neue predefined named parameters einfach und ohne Änderungen am Quellcode hinzugefügt werden können.

  • #<_vmajor> - Hauptversion des Pakets. Wenn die aktuelle Version 2.5.2 wäre, würde 2.5 zurückgegeben.

  • #<_vminor> - Kleinere Paketversion. Wenn die aktuelle Version 2.6.2 wäre, würde es 0.2 zurückgeben.

  • #<_line> - Sequenznummer. Wenn eine G-Code-Datei ausgeführt wird, gibt dies die aktuelle Zeilennummer zurück.

  • #<_motion_mode> - Gibt den aktuellen Bewegungsmodus des Interpreters zurück:

Bewegungsmodus Rückgabewert

G1

10

G2

20

G3

30

G33

330

G38.2

382

G38.3

383

G38.4

384

G38.5

385

G5.2

52

G73

730

G76

760

G80

800

G81

810

G82

820

G83

830

G84

840

G85

850

G86

860

G87

870

G88

880

G89

890

  • #<_plane> - gibt den Wert zurück, der die aktuelle Ebene bezeichnet:

Ebene Rückgabewert

G17

170

G18

180

G19

190

G17.1

171

G18.1

181

G19.1

191

  • #<_ccomp> - Status der Fräserkompensation. Rückgabewerte:

Modus Rückgabewert

G40

400

G41

410

G41.1

411

G41

410

G42

420

G42.1

421

  • #<_metric> - Gibt 1 zurück, wenn G21 eingeschaltet ist, sonst 0.

  • #<_imperial> - Gibt 1 zurück, wenn G20 eingeschaltet ist, sonst 0.

  • #<_absolute> - Gibt 1 zurück, wenn G90 eingeschaltet ist, sonst 0.

  • #<_incremental> - Gibt 1 zurück, wenn G91 eingeschaltet ist, sonst 0.

  • #<_inverse_time> - Gibt 1 zurück, wenn der inverse Vorschubmodus (G93) eingeschaltet ist, sonst 0.

  • #<_Units_per_minute> - Rückgabe 1, wenn der Modus Einheiten/Minute (G94) eingeschaltet ist, sonst 0.

  • #<_units_per_rev> - Rückgabe 1, wenn der Modus Einheiten/Umdrehung (G95) eingeschaltet ist, sonst 0.

  • #<_coord_system>' - Gibt eine Fließkommazahl mit dem Namen des aktuellen Koordinatensystems zurück (G54..G59.3). Wenn Sie sich beispielsweise im G55-Koordinatensystem befinden, ist der Rückgabewert 550.000000 und wenn Sie sich im G59.1-Koordinatensystem befinden, ist der Rückgabewert 591.000000.

Modus Rückgabewert

G54

540

G55

550

G56

560

G57

570

G58

580

G59

590

G59.1

591

G59.2

592

G59.3

593

  • #<_tool_offset> - Gibt 1 zurück, wenn Werkzeugkorrektur (G43) eingeschaltet ist, sonst 0.

  • #<_retract_r_plane> - Rückgabe 1, wenn G98 gesetzt ist, sonst 0.

  • #<_retract_old_z> - Rückgabe 1, wenn G99 eingeschaltet ist, sonst 0.

4.5. System Parameters

  • #<_spindle_rpm_mode> - Gibt 1 zurück, wenn der Spindeldrehzahlmodus (G97) eingeschaltet ist, sonst 0.

  • #<_spindle_css_mode> - Gibt 1 zurück, wenn der Modus für konstante Schnittgeschwindigkeit (G96) eingeschaltet ist, sonst 0.

  • #<_ijk_absolute_mode> - Gibt 1 zurück, wenn der Modus für den absoluten Bogenabstand (G90.1) eingeschaltet ist, sonst 0.

  • #<_lathe_diameter_mode> - Gibt 1 zurück, wenn es sich um eine Drehbankkonfiguration handelt und der Durchmessermodus (G7) aktiviert ist, sonst 0.

  • #<_lathe_radius_mode> - Gibt 1 zurück, wenn es sich um eine Drehbankkonfiguration handelt und der Radiusmodus (G8) aktiviert ist, sonst 0.

  • #<_spindle_on> - Gibt 1 zurück, wenn die Spindel gerade läuft (M3 oder M4), sonst 0.

  • #<_spindle_cw> - Gibt 1 zurück, wenn die Spindeldrehrichtung im Uhrzeigersinn ist (M3), sonst 0.

  • #<_mist> - Gibt 1 zurück, wenn Nebel (M7) eingeschaltet ist.

  • #<_flut> - Rückgabe 1, wenn Flut (M8) eingeschaltet ist.

  • #<_speed_override> - Rückgabe 1, wenn Vorschubneufestsetzung (M48 oder M50 P1) eingeschaltet ist, sonst 0.

  • #<_feed_override> - Gibt 1 zurück, wenn die Vorschubüberbrückung (M48 oder M51 P1) eingeschaltet ist, sonst 0.

  • #<_adaptive_feed> - Gibt 1 zurück, wenn der adaptive Feed (M52 oder M52 P1) eingeschaltet ist, sonst 0.

  • #<_feed_hold> - Rückgabe 1, wenn der Schalter für die Vorschubfreigabe aktiviert ist (M53 P1), sonst 0.

  • #<_feed> - Gibt den aktuellen Wert von F zurück, nicht den tatsächlichen Vorschub.

  • #<_rpm> - Gibt den aktuellen Wert von S zurück, nicht die tatsächliche Spindeldrehzahl.

  • #<_x> - Gibt die aktuelle relative X-Koordinate einschließlich aller Offsets zurück. Dasselbe wie #5420. In einer Drehbank-Konfiguration wird immer der Radius zurückgegeben.

  • #<_y> - Liefert die aktuelle relative Y-Koordinate einschließlich aller Offsets. Dasselbe wie #5421.

  • #<_z> - Liefert die aktuelle relative Z-Koordinate einschließlich aller Offsets. Dasselbe wie #5422.

  • #<_a> - Liefert die aktuelle relative A-Koordinate einschließlich aller Offsets. Dasselbe wie #5423.

  • #<_b> - Gibt die aktuelle relative B-Koordinate einschließlich aller Offsets zurück. Dasselbe wie #5424.

  • #<_c> - Gibt die aktuelle relative C-Koordinate einschließlich aller Offsets zurück. Dasselbe wie #5425.

  • #<_u> - Liefert die aktuelle relative U-Koordinate einschließlich aller Offsets. Dasselbe wie #5426.

  • #<_v> - Liefert die aktuelle relative V-Koordinate einschließlich aller Offsets. Dasselbe wie #5427.

  • #<_w> - Gibt die aktuelle relative W-Koordinate einschließlich aller Offsets zurück. Dasselbe wie #5428.

  • #<_abs_x> - Rückgabe der aktuellen absoluten X-Koordinate (G53) ohne Offsets.

  • #<_abs_y> - Rückgabe der aktuellen absoluten Y-Koordinate (G53) ohne Offsets.

  • #<_abs_z> - Rückgabe der aktuellen absoluten Z-Koordinate (G53) ohne Offsets.

  • #<_abs_a> - Rückgabe der aktuellen absoluten A-Koordinate (G53) ohne Offsets.

  • #<_abs_b> - Rückgabe der absoluten B-Koordinate (G53) ohne Offsets.

  • #<_abs_c> - Rückgabe der aktuellen absoluten C-Koordinate (G53) ohne Offsets.

  • #<_aktuelles_Werkzeug> - Rückgabe der Nummer des aktuellen Werkzeugs in der Spindel. Dasselbe wie #5400.

  • #<_current_pocket> - Liefert den Tooldatenindex für das aktuelle Werkzeug.

  • #<_selected_tool> - Rückgabe der Nummer des ausgewählten Werkzeugs nach einem T-Code. Voreinstellung -1.

  • #<_selected_pocket>' - Gibt den tooldata-Index der ausgewählten Tasche nach einem T-Code zurück. Voreinstellung -1 (keine Tasche ausgewählt).

  • #<_value> - Rückgabewert des letzten O-Codes return oder endsub. Standardwert 0, wenn kein Ausdruck nach return oder endsub. Wird beim Programmstart auf 0 initialisiert.

  • #<_value_returned> - 1.0 wenn der letzte O-Code return oder endsub einen Wert zurückgegeben hat, sonst 0. Wird durch den nächsten O-Code-Aufruf gelöscht.

  • #<_task> - 1.0 wenn die ausführende Interpreterinstanz Teil von milltask ist, sonst 0.0. Manchmal ist es notwendig, diesen Fall speziell zu behandeln, um eine korrekte Vorschau zu erhalten, z.B. beim Testen des Erfolgs einer Probe (G38.n) durch Inspektion von #5070, die im Vorschau-Interpreter (z.B. Axis) immer fehlschlagen wird.

  • #<_call_level> - aktuelle Verschachtelungsebene der O-Code-Prozeduren. Für die Fehlersuche.

  • #<_remap_level> - aktuelle Ebene des Remap-Stapels. Jeder Remap in einem Block erhöht die Remap-Ebene um eins. Zur Fehlersuche.

5. HAL pins and INI values

Wenn dies in der <sub:ini:sec:rs274ngc, INI-Datei>> aktiviert ist, hat der G-Code Zugriff auf die Werte der INI-Datei-Einträge und HAL-Pins.

  • #<_ini[section]name> Gibt den Wert des entsprechenden Elements in der INI-Datei zurück.

Wenn die INI-Datei zum Beispiel so aussieht:

[SETUP]
XPOS = 3.145
YPOS = 2.718

können Sie sich im G-Code auf die genannten Parameter #<_ini[setup]xpos> und #<_ini[setup]ypos> beziehen.

EXISTS kann verwendet werden, um das Vorhandensein einer bestimmten INI-Datei-Variable zu prüfen:

o100 if [EXISTS[#<_ini[setup]xpos>]]
  (debug, [setup]xpos existiert: #<_ini[setup]xpos>)
o100 else
  (debug, [setup]xpos existiert nicht)
o100 endif

Der Wert wird einmal aus der INI-Datei gelesen und im Interpreter zwischengespeichert. Diese Parameter sind schreibgeschützt - die Zuweisung eines Wertes führt zu einem Laufzeitfehler. Bei den Namen wird nicht zwischen Groß- und Kleinschreibung unterschieden - sie werden vor der Konsultation der INI-Datei in Großbuchstaben umgewandelt.

  • #<_hal[HAL item]> Ermöglicht es G-Code-Programmen, die Werte von HAL-Pins zu lesen. Der variable Zugriff ist schreibgeschützt, die einzige Möglichkeit, HAL-Pins von G-Code aus zu setzen, bleiben M62-M65, M67, M68 und benutzerdefinierte M100-M199-Codes. Beachten Sie, dass der gelesene Wert nicht in Echtzeit aktualisiert wird. Normalerweise wird der Wert zurückgegeben, der zum Zeitpunkt des Starts des G-Code-Programms an dem Pin anlag. Es ist möglich, dies zu umgehen, indem man eine Zustandssynchronisation erzwingt. Eine Möglichkeit, dies zu tun, ist ein Dummy-M66-Befehl: M66E0L0

Beispiel:

(debug, #<_hal[motion-controller.time]>)

Der Zugriff auf HAL-Elemente ist schreibgeschützt. Derzeit kann auf diese Weise nur auf HAL-Namen in Kleinbuchstaben zugegriffen werden.

EXISTS kann verwendet werden, um das Vorhandensein eines bestimmten HAL-Elements zu testen:

o100 if [EXISTS[#<_hal[motion-controller.time]>]]
  (debug, [motion-controller.time] exists: #<_hal[motion-controller.time]>)
o100 else
  (debug, [motion-controller.time] does not exist)
o100 endif

Diese Funktion wurde durch den Wunsch nach einer stärkeren Kopplung zwischen Benutzerschnittstellenkomponenten wie GladeVCP und PyVCP motiviert, um als Parameterquelle für das Verhalten von NGC-Dateien zu fungieren. Die Alternative - durch die M6x-Pins zu gehen und sie zu verdrahten - hat einen begrenzten, nicht-mnemonischen Namensraum und ist unnötig schwerfällig, nur als UI/Interpreter-Kommunikationsmechanismus.

6. Expressions

Ein Ausdruck ist eine Reihe von Zeichen, die mit einer linken Klammer [ beginnen und mit einer ausgleichenden rechten Klammer ] enden. Zwischen den Klammern stehen Zahlen, Parameterwerte, mathematische Operationen und andere Ausdrücke. Ein Ausdruck wird ausgewertet, um eine Zahl zu erzeugen. Die Ausdrücke in einer Zeile werden ausgewertet, wenn die Zeile gelesen wird, bevor etwas in der Zeile ausgeführt wird. Ein Beispiel für einen Ausdruck ist [1 + acos[0] - [#3 ** [4.0/2]]].

7. Binary Operators

Binäre Operatoren erscheinen nur innerhalb von Ausdrücken. Es gibt vier grundlegende mathematische Operationen: Addition (+), Subtraktion (-), Multiplikation (*) und Division (/). Es gibt drei logische Operationen: nicht-exklusive oder (OR), exklusive oder (XOR) und logische und (AND). Die achte Operation ist die Modulusoperation (MOD). Die neunte Operation ist die Potenz -Operation (**), bei der die Zahl links von der Operation mit der Potenz rechts davon erhöht wird. Die relationalen Operatoren sind Gleichheit (EQ), Ungleichheit (NE), streng größer als (GT), größer oder gleich (GE), streng kleiner als (LT) und kleiner als oder gleich (LE).

Die binären Operationen werden entsprechend ihrer Rangfolge in mehrere Gruppen unterteilt. Wenn Operationen in verschiedenen Ranggruppen aneinandergereiht werden (z. B. im Ausdruck "[2.0 / 3 * 1.5 - 5.5 / 11.0]"), sind Operationen in einer höheren Gruppe vor Operationen in einer niedrigeren Gruppe auszuführen. Wenn ein Ausdruck mehr als eine Operation aus derselben Gruppe enthält (z. B. das erste / und * im Beispiel), wird der Vorgang auf der linken Seite zuerst ausgeführt. Somit ist das Beispiel äquivalent zu: [ [ [2.0 / 3] * 1.5] - [5.5 / 11.0] ] , was äquivalent zu [1.0 - 0.5] ist, was 0.5 ist.

Die logischen Operationen und der Modulus können mit allen reellen Zahlen durchgeführt werden, nicht nur mit ganzen Zahlen. Die Zahl Null ist gleichbedeutend mit logisch falsch, und jede Zahl ungleich Null ist gleichbedeutend mit logisch wahr.

Tabelle 3. Vorrang der Operatoren
Operatoren Vorrang

**

höchste

* / MOD

+ -

EQ NE GT GE LT LE

AND OR XOR

niedrigste

8. Gleichheit und Gleitkommawerte

Die Sprache RS274/NGC unterstützt nur Fließkommazahlen mit doppelter Genauigkeit. Daher ist die Prüfung auf Gleichheit oder Ungleichheit zweier Fließkommazahlen von Natur aus problematisch. Der Interpreter löst dieses Problem, indem er Werte als gleich betrachtet, wenn ihre absolute Differenz kleiner als 1e-6 ist (dieser Wert ist als TOLERANCE_EQUAL in src/emc/rs274ngc/interp_internal.hh definiert).

9. Funktionen

Die verfügbaren Funktionen sind in der folgenden Tabelle aufgeführt. Argumente für unäre Operationen, die Winkelmaße annehmen (COS, SIN, und TAN ), sind in Grad. Werte, die von unären Operationen zurückgegeben werden, die Winkelmaße zurückgeben (ACOS, ASIN, und ATAN) sind ebenfalls in Grad.

Tabelle 4. G-Code-Funktionen
Funktionsname Funktionsergebnis

ATAN[arg]/[arg]

Four quadrant inverse tangent

ABS[arg]

Absoluter Wert

ACOS[arg]

Inverser Kosinus

ASIN[arg]

Inverser Sinus

COS[arg]

Kosinus

EXP[arg]

e in der angegebenen Potenz

FIX[arg]

Abrunden auf ganze Zahl

FUP[arg]

Auf Ganzzahl aufrunden

ROUND[arg]

Runden auf die nächste Ganzzahl

LN[arg]

Natürlicher Logarithmus

SIN[arg]

Sinus

SQRT[arg]

Quadratwurzel

TAN[arg]

Tangente

EXISTS[arg]

Benannte Parameter prüfen

Die Funktion FIX rundet auf einer Zahlengeraden nach links (weniger positiv oder mehr negativ), so dass FIX[2.8] =2 und FIX[-2.8] = -3.

Die Operation FUP rundet auf einer Zahlengeraden nach rechts (mehr positiv oder weniger negativ); FUP[2.8] = 3 und FUP[-2.8] = -2.

Die Funktion EXISTS prüft, ob ein einzelner benannter Parameter vorhanden ist. Sie nimmt nur einen benannten Parameter und gibt 1 zurück, wenn er existiert, und 0, wenn er nicht existiert. Es ist ein Fehler, wenn Sie einen nummerierten Parameter oder einen Ausdruck verwenden. Hier ist ein Beispiel für die Verwendung der EXISTS-Funktion:

o<test> sub
o10 if [EXISTS[#<_global>]]
    (debug, _global existiert und hat den Wert #<_global>)
o10 sonst
    (debug, _global existiert nicht)
o10 endif
o<test> endsub

o<test> call
#<_global> = 4711
o<test> call
m2

10. Wiederholte Elemente

Eine Zeile kann eine beliebige Anzahl von G-Wörtern haben, aber zwei G-Wörter aus derselben modalen Gruppe dürfen nicht in derselben Zeile erscheinen. Weitere Informationen finden Sie im Abschnitt <gcode:modal-groups,Modal Groups>>.

Eine Zeile kann null bis vier M-Wörter enthalten. Zwei M-Wörter aus der gleichen Modalgruppe dürfen nicht in der gleichen Zeile erscheinen.

Bei allen anderen Buchstaben darf eine Zeile nur ein Wort enthalten, das mit diesem Buchstaben beginnt.

Wird derselbe Parameter wiederholt in einer Zeile eingestellt, z. B. #3=15 #3=6, wird nur die letzte Einstellung wirksam. Es ist zwar etwas merkwürdig unnötig, aber nicht illegal, denselben Parameter zweimal in derselben Zeile zu setzen.

Wenn mehr als ein Kommentar in einer Zeile erscheint, wird nur der letzte verwendet; jeder der anderen Kommentare wird gelesen und auf sein Format geprüft, danach aber ignoriert. Es wird erwartet, dass mehr als ein Kommentar in einer Zeile sehr selten vorkommt.

11. Artikelreihenfolge

Die drei Arten von Elementen, deren Reihenfolge in einer Zeile variieren kann (wie am Anfang dieses Abschnitts angegeben), sind Wort, Parametereinstellung und Kommentar. Stellen Sie sich vor, dass diese drei Arten von Einträgen nach Typ in drei Gruppen unterteilt sind.

Die erste Gruppe (die Wörter) kann in beliebiger Reihenfolge angeordnet werden, ohne dass sich der Sinn der Zeile ändert.

Wenn die zweite Gruppe (die Parametereinstellungen) neu geordnet wird, ändert sich die Bedeutung der Zeile nicht, es sei denn, derselbe Parameter wird mehr als einmal eingestellt. In diesem Fall wird nur die letzte Einstellung des Parameters wirksam. Nachdem zum Beispiel die Zeile #3=15 #3=6 interpretiert wurde, ist der Wert des Parameters 3 gleich 6. Wenn die Reihenfolge umgekehrt wird zu #3=6 #3=15 und die Zeile interpretiert wird, ist der Wert von Parameter 3 15.

Wenn die dritte Gruppe (die Kommentare) mehr als einen Kommentar enthält und neu geordnet wird, dann wird nur der letzte Kommentar verwendet.

Wenn jede Gruppe in ihrer Reihenfolge beibehalten oder umgeordnet wird, ohne dass sich die Bedeutung der Zeile ändert, können die drei Gruppen in beliebiger Weise verschachtelt werden, ohne dass sich die Bedeutung der Zeile ändert. Zum Beispiel hat die Zeile g40 g1 #3=15 (foo) #4=-7.0 fünf Elemente und bedeutet in jeder der 120 möglichen Reihenfolgen (wie #4=-7.0 g1 #3=15 g40 (foo)) für die fünf Elemente genau dasselbe.

12. Befehle und Maschinenmodi

Viele Befehle bewirken, dass die Steuerung von einem Modus in einen anderen wechselt, und der Modus bleibt so lange aktiv, bis er durch einen anderen Befehl implizit oder explizit geändert wird. Solche Befehle werden modal genannt. Zum Beispiel bleibt aach dem Einschalten des Kühlmittels dies so lange eingeschaltet, bis es explizit ausgeschaltet wird. Die G-Codes für Bewegungen sind ebenfalls modal. Wird beispielsweise ein G1-Befehl (gerade Bewegung) in einer Zeile gegeben, so wird er in der nächsten Zeile erneut ausgeführt, wenn ein oder mehrere Achsenwörter in der Zeile vorhanden sind, es sei denn, ein expliziter Befehl wird in dieser nächsten Zeile gegeben, der die Achsenwörter verwendet oder die Bewegung abbricht.

"Nicht modale" Codes wirken sich nur auf die Zeilen aus, auf denen sie vorkommen. Beispielsweise ist G4 (Verweilen) nicht modal.

13. Polar Coordinates

Polarkoordinaten können verwendet werden, um die XY-Koordinaten einer Bewegung anzugeben. Dabei ist @n der Abstand und ^n der Winkel. Dies hat den Vorteil, dass z. B. Lochkreise sehr einfach durch Anfahren eines Punktes in der Mitte des Kreises, Einstellen des Versatzes und anschließendes Anfahren des ersten Lochs und Ausführen des Bohrzyklus erstellt werden können. Polarkoordinaten beziehen sich immer auf die aktuelle XY-Nullposition. Um die Polarkoordinaten vom Maschinennullpunkt aus zu verschieben, verwenden Sie einen Offset oder wählen Sie ein Koordinatensystem.

Im absoluten Modus beziehen sich Abstand und Winkel auf die XY-Nullposition, und der Winkel beginnt bei 0 auf der positiven X-Achse und nimmt im Gegenuhrzeigersinn um die Z-Achse zu. Der Code G1 @1^90 ist der gleiche wie G1 Y1.

Im relativen Modus werden Abstand und Winkel ebenfalls von der XY-Nullposition aus gemessen, jedoch kumulativ. Dies kann anfangs verwirrend sein, wie dies im inkrementellen Modus funktioniert.

Wenn Sie zum Beispiel das folgende Programm haben, könnten Sie erwarten, dass es ein quadratisches Muster ist:

F100 G1 @.5 ^90
G91 @.5 ^90
@.5 ^90
@.5 ^90
@.5 ^90
G90 G0 X0 Y0 M2

Aus der folgenden Abbildung können Sie ersehen, dass die Ausgabe nicht den Erwartungen entspricht. Da wir jedes Mal 0,5 zum Abstand addiert haben, vergrößerte sich der Abstand von der XY-Nullposition mit jeder Zeile.

Polare Spirale
Abbildung 1. Polare Spirale

Der folgende Code erzeugt unser quadratisches Muster:

F100 G1 @.5 ^90
G91 ^90
^90
^90
^90
G90 G0 X0 Y0 M2

Wie Sie sehen können, ist der Endpunktabstand für jede Linie gleich, wenn Sie nur den Winkel um 90 Grad erhöhen.

Polares Quadrat
Abbildung 2. Polares Quadrat

Es ist ein Fehler, wenn:

  • Eine inkrementelle Bewegung wird am Ursprung gestartet

  • Eine Mischung aus Polar und X- oder Y-Wörtern wird verwendet

14. Modal Groups

Modale Befehle sind in Gruppen angeordnet, die "modale Gruppen" genannt werden, und nur ein Mitglied einer modalen Gruppe kann zu einem bestimmten Zeitpunkt in Kraft sein. Im Allgemeinen enthält eine Modalgruppe Befehle, bei denen es logisch unmöglich ist, dass zwei Mitglieder gleichzeitig in Kraft sind - wie z. B. Messen in Zoll gegenüber Messen in Millimetern. Ein Bearbeitungszentrum kann sich in vielen Modi gleichzeitig befinden, wobei ein Modus aus jeder Modalgruppe in Kraft ist. Die Modalgruppen sind in der folgenden Tabelle aufgeführt.

Tabelle 5. G-Code Modalgruppen
Bedeutung der Modalgruppe Member-Wörter

Nicht-modale Codes (Gruppe 0)

G4, G10 G28, G30, G52, G53, G92, G92.1, G92.2, G92.3,

Bewegung (engl. motion) (Gruppe 1)

G0, G1, G2, G3, G33, G38.n, G73, G76, G80, G81 G82, G83, G84, G85, G86, G87, G88, G89

Auswahl der Ebene (Gruppe 2)

G17, G18, G19, G17.1, G18.1, G19.1

Distanzmodus (Gruppe 3)

G90, G91

Arc IJK-Distanzmodus (Gruppe 4)

G90.1, G91.1

Vorschubmodus (Gruppe 5)

G93, G94, G95

Einheiten (Gruppe 6)

G20, G21

Fräserdurchmesser-Kompensation (Gruppe 7)

G40, G41, G42, G41.1, G42.1

Werkzeuglängenausgleich (engl. tool length offset) (Gruppe 8)

G43, G43.1, G49

Festzyklen Rückgabe-Modus (Gruppe 10)

G98, G99

Koordinatensystem (Gruppe 12)

G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3

Kontrollmodus (Gruppe 13)

G61, G61.1, G64

Spindeldrehzahl-Modus (Gruppe 14)

G96, G97

Drehmaschinen-Durchmessermodus (Gruppe 15)

G7, G8

Tabelle 6. M-Code Modalgruppen
Bedeutung der Modalgruppe Member-Wörter

Anhalten (Gruppe 4)

M0, M1, M2, M30, M60

E/A (engl. I/O) Pins (Gruppe 5)

(M62-M65 digital output), (M66 digital or analog input), (M67, M68 analog output)

Werkzeugwechsel (Gruppe 6)

M6 Tn

Spindel (Gruppe 7)

M3, M4, M5

Kühlmittel (Gruppe 8)

(M7 und M8 können beide eingeschaltet sein), M9

Neufestsetzungsschalter (engl. override switches) (Gruppe 9)

M48, M49

Benutzerdefiniert (Gruppe 10)

M100-M199

Bei mehreren modalen Gruppen muss ein Mitglied der Gruppe in Kraft sein, wenn ein Bearbeitungszentrum bereit ist, Befehle anzunehmen. Für diese modalen Gruppen gibt es Standardeinstellungen. Wenn das Bearbeitungszentrum eingeschaltet oder anderweitig neu initialisiert wird, werden die Standardwerte automatisch übernommen.

Gruppe 1, die erste Gruppe auf der Tabelle, ist eine Gruppe von G-Codes für Bewegung. Einer von ihnen ist immer in Kraft. Dieser wird als der aktuelle Bewegungsmodus bezeichnet.

Es ist ein Fehler, einen G-Code der Gruppe 1 und einen G-Code der Gruppe 0 auf dieselbe Zeile zu setzen, wenn beide Achsenwörter verwenden. Wenn ein G-Code der Gruppe 1, der Achsenwörter verwendet, implizit auf einer Zeile in Kraft ist (weil er auf einer früheren Zeile aktiviert wurde) und ein G-Code der Gruppe 0, der Achsenwörter verwendet, auf der Zeile erscheint, wird die Aktivität des G-Codes der Gruppe 1 für diese Zeile ausgesetzt. Die Achsenwort-verwendenden G-Codes der Gruppe 0 sind G10, G28, G30, G52 und G92.

Es ist ein Fehler, irgendwelche nicht zusammenhängende Wörter in eine Zeile mit O--Flusssteuerung aufzunehmen.

15. Kommentare

Kommentare sind rein informativ und haben keinen Einfluss auf das Verhalten der Maschine.

Kommentare können zu Zeilen von G-Code hinzugefügt werden, um die Absicht des Programmierers zu verdeutlichen. Kommentare können in einer Zeile mit Klammern () oder für den Rest der Zeile mit einem Semikolon eingebettet werden. Das Semikolon wird nicht als Beginn eines Kommentars behandelt, wenn es in Klammern eingeschlossen ist.

Kommentare können zwischen Wörtern stehen, aber nicht zwischen Wörtern und dem entsprechenden Parameter. So ist S100(set speed)F200(feed) in Ordnung, S(speed)100F(feed) hingegen nicht.

Hier ist ein Beispiel für ein kommentiertes Programm:

G0 (Schnellstart) X1 Y1
G0 X1 Y1 (Schnellstart; aber das Kühlmittel nicht vergessen)
M2 ; Ende des Programms.

Es gibt mehrere aktive Kommentare, die wie Kommentare aussehen, aber eine Aktion auslösen, wie z.B. (debug,..) oder (print,..). Wenn es mehrere Kommentare in einer Zeile gibt, wird nur der letzte Kommentar nach diesen Regeln interpretiert. Daher wird ein normaler Kommentar, der auf einen aktiven Kommentar folgt, den aktiven Kommentar deaktivieren. Zum Beispiel wird (foo) (debug,#1) den Wert des Parameters #1 ausgeben, (debug,#1)(foo) jedoch nicht.

Ein Kommentar, der durch ein Semikolon eingeleitet wird, ist per Definition der letzte Kommentar in dieser Zeile und wird immer als aktive Kommentarsyntax interpretiert.

Anmerkung
Inline-Kommentare zu O-Codes sollten nicht verwendet werden, siehe den Abschnitt O-Code Kommentare für weitere Informationen.

16. Nachrichten

  • (MSG,) - zeigt eine Meldung an, wenn MSG nach der linken Klammer und vor einem anderen Druckzeichen erscheint. Varianten von MSG, die Leerzeichen und Kleinbuchstaben enthalten, sind zulässig. Der Rest der Zeichen vor der rechten Klammer wird als Nachricht betrachtet. Meldungen sollten auf dem Meldungsanzeigegerät der Benutzeroberfläche angezeigt werden, falls vorhanden.

Beispiel für eine Nachricht
(MSG, Dies ist eine Nachricht)

17. Probe Logging

  • (PROBEOPEN dateiname.txt) - öffnet dateiname.txt und speichert darin die 9-stellige Koordinate, bestehend aus XYZABCUVW, jeder erfolgreichen geraden Probe.

  • (PROBECLOSE) - schließt die geöffnete Probelog-Datei.

Weitere Informationen zur Sondierung finden Sie im Abschnitt G38.

18. Protokollierung (engl. logging)

  • (LOGOPEN,Dateiname.txt) - öffnet die genannte Protokolldatei. Wenn die Datei bereits existiert, wird sie abgeschnitten.

  • (LOGAPPEND,Dateiname) - öffnet die genannte Protokolldatei. Wenn die Datei bereits existiert, werden die Daten angehängt.

  • (LOGCLOSE) - schließt eine geöffnete Protokolldatei.

  • (LOG,) - alles, was über das , hinausgeht, wird in die Protokolldatei geschrieben, wenn sie geöffnet ist. Unterstützt die Erweiterung von Parametern wie unten beschrieben.

Beispiele für die Protokollierung finden Sie in den Beispiel-G-Code-Dateien nc_files/examples/smartprobe.ngc und nc_files/ngcgui_lib/rectange_probe.ngc.

19. Debug-Meldungen

  • (DEBUG,) - zeigt eine Meldung wie (MSG,) an, mit dem Zusatz einer besonderen Behandlung von Kommentarparametern, wie unten beschrieben.

20. Nachrichten ausgeben

  • (PRINT,) - Meldungen werden auf stderr ausgegeben, wobei Kommentarparameter wie unten beschrieben besonders behandelt werden.

21. Comment Parameters

In den Kommentaren DEBUG, PRINT und LOG werden die Werte der Parameter in der Meldung erweitert.

Zum Beispiel: um eine benannte globale Variable auf stderr (das Standard-Konsolenfenster) auszugeben.

Parameter Beispiel
(print,Endfräserdurchmesser = #<_endmill_dia>)
(print,Wert der Variablen 123 ist: #123)

Innerhalb der oben genannten Arten von Kommentaren werden Sequenzen wie "#123" durch den Wert des Parameters 123 ersetzt. Sequenzen wie "#<benannter Parameter>" werden durch den Wert des benannten Parameters ersetzt. Bei benannten Parametern wird das Leerzeichen entfernt. So wird #<Benannter Parameter> in #<Benannter Parameter> umgewandelt.

Parameternummern können formatiert werden, z.B.:

(DEBUG, Wert = %d#<some_value>)

gibt den Wert gerundet auf eine ganze Zahl aus.

  • %lf ist Standard, wenn keine Formatierungszeichenfolge vorhanden ist.

  • %d = keine Dezimalstellen

  • %f = vier Dezimalstellen

  • %.xf = x (0-9) explizite Angabe der Anzahl an Dezimalstellen

Die Formatierung wird für alle Parameter in derselben Zeile durchgeführt, sofern sie nicht geändert werden, d.h. mehrere Formatierungen in einer Zeile sind zulässig.

Die Formatierungszeichenfolge muss nicht direkt neben dem Parameter stehen.

Wird die Formatierungszeichenfolge mit dem falschen Muster erstellt, so wird sie als Zeichen gedruckt.

22. File Requirements

Eine G-Code-Datei muss eine oder mehrere Zeilen G-Code enthalten und mit einem Programmende abgeschlossen werden. Jeder G-Code nach dem Programmende wird nicht ausgewertet.

Wenn kein Programmendcode verwendet wird, sollte der auszuführende Code von ein Paar von Prozentzeichen % begrenzt werden. Die ersten Prozentzeichen stehen in der ersten Zeile der Datei, gefolgt von einer oder mehreren Zeilen G-Code und einem zweiten Prozentzeichen. Jeder Code nach dem zweiten Prozentzeichen wird nicht ausgewertet.

Warnung
Die Verwendung von % zum Umschließen einer G-Code-Datei bewirkt nicht dasselbe wie die Verwendung eines Programmendes. Die Maschine befindet sich in dem Zustand, in dem das Programm sie mit % verlassen hat, die Spindel und das Kühlmittel können noch eingeschaltet sein und Dinge wie G90/91 sind noch so, wie sie im letzten Programm eingestellt waren. Wenn Sie keine korrekte Präambel verwenden, könnte das nächste Programm in einem gefährlichen Zustand starten.
Anmerkung
Die Datei muss mit einem Texteditor wie Gedit erstellt werden und nicht mit einem Textverarbeitungsprogramm wie Open Office Word Processor.

23. File Size

Der Interpreter und die Task sind sorgfältig geschrieben, so dass die einzige Grenze für die Größe des Teilprogramms die Festplattenkapazität ist. Die TkLinuxCNC- und Axis-Schnittstelle laden beide den Programmtext, um ihn dem Benutzer anzuzeigen, so dass der RAM-Speicher ein begrenzender Faktor wird. Da in Axis die Vorschau standardmäßig gezeichnet wird, ist die Zeit, die für das Neuzeichnen benötigt wird, auch eine praktische Grenze für die Programmgröße. Die Vorschau kann in Axis ausgeschaltet werden, um das Laden großer Teileprogramme zu beschleunigen. In Axis können Teile der Vorschau mit dem Kommentar preview control ausgeschaltet werden.

24. G-code Order of Execution

Die Reihenfolge der Ausführung der Posten in einer Zeile wird nicht durch die Position der einzelnen Posten in der Zeile bestimmt, sondern durch die folgende Liste:

  • O-Code-Befehle (optional gefolgt von einem Kommentar, aber keine anderen Wörter in der gleichen Zeile erlaubt)

  • Kommentar (einschließlich Nachricht)

  • Vorschubmodus einstellen (G93, G94).

  • Vorschubgeschwindigkeit (F) einstellen.

  • Spindeldrehzahl (S) einstellen.

  • Werkzeug auswählen (T).

  • HAL-Pin-E/A (M62-M68).

  • Werkzeug wechseln (M6) und Werkzeugnummer einstellen (M61).

  • Spindel ein- oder ausschalten (M3, M4, M5).

  • Status speichern (M70, M73), Wiederherstellung des Status (M72), Status ungültig machen (M71).

  • Kühlmittel ein- oder ausschalten (M7, M8, M9).

  • Aktivieren oder Deaktivieren von Neufestsetzungen (engl. overrides) (M48, M49,M50,M51,M52,M53).

  • Benutzerdefinierte Befehle (M100-M199).

  • Verweilen (engl. dwell) (G4).

  • Aktive Ebene einstellen (G17, G18, G19).

  • Längeneinheiten einstellen (G20, G21).

  • Fräserradiuskorrektur ein oder aus (G40, G41, G42)

  • Fräserlängenkorrektur ein oder aus (G43, G49)

  • Auswahl des Koordinatensystems (G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).

  • Bahnsteuerungsmodus einstellen (G61, G61.1, G64)

  • Abstandsmodus einstellen (G90, G91).

  • Rückzugsmodus einstellen (G98, G99).

  • Referenzpunkt anfahren (G28, G30) oder Koordinatensystemdaten ändern (G10) oder Achsenoffsets einstellen (G52, G92, G92.1, G92.2, G94).

  • Bewegung ausführen (G0 bis G3, G33, G38.n, G73, G76, G80 bis G89), eventuell modifiziert durch G53.

  • Stopp (M0, M1, M2, M30, M60).

25. G-code Best Practices

Verwenden einer angemessenen Dezimalgenauigkeit

Verwenden Sie mindestens 3 Nachkommastellen, wenn Sie in Millimetern fräsen, und mindestens 4 Nachkommastellen, wenn Sie in Zoll fräsen.

Insbesondere werden Toleranzprüfungen der Bögen für .001 und .0001 entsprechend den aktiven Einheiten durchgeführt.

Lehrzeichen konsistent nutzen

G-Code ist am besten lesbar, wenn vor den Wörtern mindestens ein Leerzeichen steht. Es ist zwar erlaubt, Leerzeichen in der Mitte von Zahlen einzufügen, aber es gibt keinen Grund, dies zu tun.

Bögen im Zentrum-Format verwenden

Bögen im Zentrum-Format (engl. center format) (die „I-J-K-“ anstelle von „R-“ verwenden) verhalten sich konsistenter als Bögen im R-Format, insbesondere bei eingeschlossenen Winkeln nahe 180 oder 360 Grad.

Verwenden Sie eine Präambel für modale Gruppen

Wenn die korrekte Ausführung Ihres Programms von Modaleinstellungen abhängt, sollten Sie diese zu Beginn des Werkstück-Programms festlegen. Modi können von früheren Programmen und von den MDI-Befehlen übernommen werden.

Beispiel einer Präambel für eine Fräse
G17 G20 G40 G49 G54 G80 G90 G94

G17 XY-Ebene verwenden, G20 Zoll-Modus, G40 Durchmesserkompensation aufheben, G49 Längenversatz aufheben, G54 Koordinatensystem 1 verwenden, G80 Festzyklen aufheben, G90 Absolutweg-Modus, G94 Vorschub/Minuten-Modus.

Die vielleicht wichtigste modale Einstellung ist die Abstandseinheit - wenn Sie G20 oder G21 nicht einbeziehen, fräsen verschiedene Maschinen das Programm in unterschiedlichen Maßstäben. Andere Einstellungen, wie der Rücklaufmodus bei Festzyklen, können ebenfalls wichtig sein.

Nicht zu viele Dinge in eine Zeile packen

Ignorieren Sie alles, was in Abschnitt Reihenfolge der Ausführung steht, und schreiben Sie stattdessen keine Codezeile, die auch nur ein bisschen zweideutig ist.

Einen Parameter nicht in der gleichen Zeile setzen und verwenden

Verwenden und setzen Sie einen Parameter nicht in der gleichen Zeile, auch wenn die Semantik klar definiert ist. Die Aktualisierung einer Variablen auf einen neuen Wert, z. B. #1=[#1+#2], ist in Ordnung.

Verwenden Sie keine Zeilennummern

Zeilennummern bieten keine Vorteile. Wenn Zeilennummern in Fehlermeldungen angegeben werden, beziehen sich die Nummern auf die Zeilennummer in der Datei, nicht auf den N-Wort-Wert.

Wenn mehrere Koordinatensysteme verschoben werden

Erwägen Sie die Verwendung des umgekehrten Zeit-Geschwindigkeits-Modus (inverse time speed mode).

Da die Bedeutung eines "F"-Wortes in Metern pro Minute je nach Art der zu bewegenden Achse variiert und die Menge des abgetragenen Materials nicht nur von der Vorschubgeschwindigkeit abhängt, kann es einfacher sein, G93, die inverse Geschwindigkeit der Zeit, zu verwenden, um den Abtrag des gewünschten Materials zu erreichen.

26. Lineare und rotierende Achsen

Da die Bedeutung eines F-Wortes im Vorschub-pro-Minute-Modus davon abhängt, welche Achsen zu bewegen sind, und da die Menge des abgetragenen Materials nicht nur von der Vorschubgeschwindigkeit abhängt, kann es einfacher sein, den G93-Modus für den inversen Zeitvorschub zu verwenden, um die gewünschte Materialabtragsrate zu erreichen.

27. Häufige Fehlermeldungen

  • G-Code außerhalb des Bereichs' - Ein G-Code größer als G99 wurde verwendet, der Umfang der G-Codes in LinuxCNC ist 0 - 99. Nicht jede Zahl zwischen 0 und 99 ist ein gültiger G-Code.

  • Unbekannter G-Code verwendet' - Es wurde ein G-Code verwendet, der nicht Teil der LinuxCNC G-Code Sprache ist.

  • i,j,k Wort ohne Gx, um es zu verwenden - i, j und k Wörter müssen in der gleichen Zeile wie der G-Code verwendet werden.

  • "Achsenwerte können nicht ohne einen G-Code verwendet werden, der sie verwendet" - Achsenwerte können nicht in einer Zeile verwendet werden, ohne dass entweder ein modaler G-Code oder ein G-Code in derselben Zeile wirksam ist.

  • Datei endete ohne Prozentzeichen oder Programmende - Jede G-Code-Datei muss in einem M2 oder M30 enden oder mit dem Prozentzeichen umschlossen sein.