L_MC4P_PathRefFromFile
Dieser Funktionsbaustein (FB) liest eine vorhandene Path-Datei (*.txt) und stellt die Daten "MC_PATH_REF" der Applikation bereit. Der FB ist eine Schnittstelle vom Typ MC_PATH_REF und kann direkt mit einem Eingang vom Typ MC_PATH_REF eines anderen FBs verbunden werden, z. B. über den Eingang PathData des FB MC_MovePath.
|
|
|
|
L_MC4P_PathRefFromFile |
|
|
|
|
|---|---|---|---|---|---|---|---|
|
BOOL |
- |
xExecute |
xDone |
- |
BOOL |
||
|
STRING |
- |
sFileName |
xBusy |
- |
BOOL |
||
|
BOOL |
- |
xAbort |
xDecoding |
- |
BOOL |
||
|
DWORD |
- |
dwSkipMask |
xCommandAborted |
- |
BOOL |
||
|
LINT |
- |
iBlockSearchLineNo |
|
xError |
- |
BOOL |
|
|
|
|
|
eErrorID |
- |
L_IE1P_Error |
||
|
|
|
|
liLineNoDecoded |
- |
INT |
||
|
|
|
|
|
sLineDecoded |
- |
STRING |
|
|
|
|
|
|
|
|
|
|
Eingänge
|
Name Datentyp |
Info/Einstellmöglichkeiten |
|
|---|---|---|
|
xExecute BOOL |
FALSEäTRUE |
Mit der steigenden Flanke des Eingangs xExecute wird das Auslesen und Dekodieren der Datei aus dem Eingang sFileName gestartet. |
|
sFileName STRING |
Name der Bahndatei Die Bahndatei ist eine Abfolge von Fahraufträgen mit Randbedingungen, die in einer ASCII-Datei auf der Steuerung abgelegt ist. Bitte verwenden Sie für den Dateinamen die Standard-Extension *.lpp, diese Buchstaben stehen für ’LenzePathProfile’.
Wie Sie eine Bahndatei speichern und darauf zugreifen, ist beschrieben in den Abschnitten
Tipp: Nach Abschluss der Dekodierung (xDone = TRUE) kann durch eine erneute steigende Flanke an xExecute eine weitere über sFileName definierte Bahndatei angehängt werden. So können mehrere Dateien nacheinander abgefahren werden. |
|
|
xAbort BOOL |
FALSEäTRUE |
Abarbeitung des FBs abbrechen |
|
dwSkipMask DWORD |
Bitcodierter Steuereingang für Ausblendebenen. |
|
|
iBlockSearchLineNo LINT |
Eingang = 0 : Startsatzsuche ist deaktiviert (default) Eingang <> 0 : Zeilennummer des Startsatzes
|
|
Ausgänge
|
Name Datentyp |
Wert/Bedeutung |
|
|---|---|---|
|
xDone BOOL |
TRUE |
Bearbeitung ist abgeschlossen |
|
xBusy BOOL |
TRUE |
Abarbeitung läuft. |
|
xDecoding BOOL |
TRUE |
Die Dekodierung der ASCII-Datei ist aktiv. |
|
FALSE |
Die Dekodierung der Bahndatei wurde angehalten, weil:
Tipp: Es können maximal 30 Fahraufträge im Voraus vorbereitet werden. |
|
|
xCommandAborted BOOL |
TRUE |
Die Dekodierung der ASCII-Datei wurde abgebrochen, weil:
|
|
xError BOOL |
TRUE |
Es ist ein Fehler aufgetreten. Details siehe ErrorID. |
|
eErrorID |
Wenn Error = TRUE: Fehlernummer zum aufgetretenen Fehler. Referenzhandbuch "FAST Technologiemodule": Hier finden Sie Informationen zu Fehler- oder Warnungsmeldungen. |
|
|
liLineNoDecoded INT |
Anzeige der gerade dekodierten Zeilennummer aus der ASCII-Datei
|
|
|
sLineDecoded STRING |
Anzeige derjenigen Programmzeile, die bereits dekodiert ist. Abweichende Anzeige bei einem Syntaxfehler: Falls ein Syntaxfehler in einer Programmzeile enthalten sein sollte, wird ausschließlich dieser angezeigt. Prüfung auf folgende Syntaxfehler im Programm:
|
|
Speichern einer Bahndatei auf der Steuerung
Über den »PLC Designer« ist es möglich, direkt auf die SD-Karte zuzugreifen. Speichern Sie die von ihnen erstellte Bahndatei abhängig vom Typ des Lenze-Controllers in diesem Verzeichnis:
|
Lenze-Controller mit Betriebssystem Windows CE, z. B. c3200: /USBStorage/IPC/PLC/MovePathData/
Lenze-Controller mit Betriebssystem Linux, z. B. c5xx: /sdcard/plc/MovePathData/
|
|---|
Zugriff auf die Bahndatei
Der Zugriff auf die Bahndatei erfolgt über L_MC4P_PathRefFromFile.sFileName:
- Bei Verwendung der Standard-Extension *.lpp genügt es, hier den Dateinamen ohne Pfadangabe anzugeben. Beispiel:
- Bei einer abweichenden Datei-Extension (z. B. Path2.txt) müssen Sie den kompletten Zugriffspfad mit angeben. Beispiel auf einem c5xx:
Zyklischer Aufruf durch das PLC-Programm
- Der FB muss zyklisch aufgerufen werden, wenn bei laufender Applikation die ASCII-Datei eingelesen oder dekodiert wird.
- Der FB muss nicht zyklisch aufgerufen werden, wenn die Dekodierung der ASCII-Datei abgeschlossen ist.
Verknüpfung des FBs
Der FB kann direkt mit einem Eingang (Typ MC_PATH_REF) eines anderen FBs verbunden werden.
Beispiel:
-
MC_MovePath.PathData:= L_MC4P_PathRefFromFile1
Verknüpfung mit dem Eingang PathData des FBs MC_MovePath
Programm für die Dekodierung übergeben
Das Programm wird über den Eingang sFileName übergeben. Am Eingang sFileName wird der Name des Programms im Datentyp STRING erwartet.
Das Programm sollte auf dem Controller unter dem Pfad "USBStorage\IPC\PLC\MovePathData" abgelegt werden, alternativ auf der SD-Karte unter "\IPC\PLC\MovePathData\".
Starten der Dekodierung
Der Bediener kann den aktuellen Status der ASCII-Datei-Abarbeitung über den Ausgang liLineNoDecoded verfolgen. Der Ausgang liLineNoDecoded zeigt, welche Zeilennummer im ASCII-Programm unter der Adresse "N" (z. B. N010) gerade dekodiert wird.
Das Dekodieren einer ASCII-Datei wird über die steigende Flanke des Eingangs xExecute gestartet. Der Ausgang xDecoding wird gesetzt, solange im Hintergrund die Dekodierung der ASCII-Datei ausgeführt wird. Maximal können 30 Fahraufträge im Voraus vorbereitet werden. In diesem Fall wird die Dekodierung angehalten und der Ausgang xDecoding = FALSE gesetzt. Die nachfolgenden Fahraufträge werden nach und nach abgefahren, sobald die bestehenden Fahraufträge von MC_MovePath abgefahren sind.
Mehrere Programme vorbereiten
Durch die Verwendung mehrerer Instanzen des FBs L_MC4P_PathRefFromFile ist es möglich, mehrere Bahndateien ohne Unterbrechung zu dekodieren und diese über MC_MovePath abzufahren.
Die Dekodierung des Programms hat einen Vorlauf von bis zu 30 Fahraufträgen gegenüber der Interpolation im MC_MovePath.
Wenn die Bahndatei zu Ende dekodiert ist, wird der Ausgang xDone = TRUE gesetzt. Zu dieser Zeit werden die bereits dekodierten Fahraufträge von MC_MovePath interpoliert.
Mit dem Status xDone = TRUE kann eine neue oder dieselbe Bahndatei an den Eingang sFileName und mit der steigenden Flanke xExecute zur Dekodierung beauftragt werden.
Der FB L_MC4P_PathRefFromFile dekodiert die Fahraufträge und hängt diese zu den Fahraufträgen aus der letzten Bahndatei ein.
Im MC_MovePath werden die Fahraufträge aus der alten Bahndatei und die Fahraufträge aus der neuen Bahndatei ohne Unterbrechung als ein Ganzes interpoliert.
Syntax nach DIN 66025
Eine Bahndatei ist eine ASCII-Datei, die im Speicher der Steuerung abgespeichert ist. In der Bahndatei stehen Befehle und Anweisungen, die eine Bahn für eine Kinematik beschreiben. In diesem Kapitel wird die Programmierungssyntax der Bahndatei "PathFile" erläutert. Hierbei werden der Programmaufbau sowie die Befehle und Anweisungen, die zur Festlegung einer Bahn notwendig sind, beschrieben.
Aufbau eines Programms
Der ASCII-Interpreter dekodiert die vorgesehenen Wörter in der Syntax nach DIN-66025. Damit ist die Struktur des Programms in der ASCII-Datei fest vorgeschrieben.
Ein Programm startet dann, wenn ein Startzeichen gelesen wird. Fehlt so ein Startzeichen im gesamten Programm, wird mit der ersten Zeile der Dekodierung gestartet.
Die Dekodierung wird beendet, wenn ein Endezeichen gelesen wird. Fehlt ein Endzeichen im Programm, ist das Programm mit der letzten Zeile zu Ende.
Ein Satz besteht aus mehreren Wörtern und einem Satzende-Zeichen. Das Satzende-Zeichen ist das sogenannte Zeilenumbruch-Zeichen, welches im Texteditor unsichtbar ist.
Die Wörter werden durch das Leerzeichen oder den Tabulator voneinander getrennt. Ein Wort besteht immer aus einer Adresse und einem Zahlenwert. Beispielsweise ist das Wort für die Zeilennummer "N10" aufgebaut aus der Adresse "N" und dem Zahlenwert "10". Führende Nullen werden grundsätzlich ignoriert, d.h. N0010 und N10 sind gleichwertig.
Die Dekodierung der Adressen und sonstigen Syntax ist nicht Case-Sensitiv, d. h. n10 und N10 werden gleichbehandelt.
Jedes Wort hat eine selbsthaltende Funktion. Das heißt wird einem Adressbuchstaben ein Zahlenwert vorgegeben, gilt dieser Wert so lange, bis der Wert geändert wird. Die Wörteranzahl in einem Satz ist nach der Norm nicht beschränkt. Weiterhin dürfen beliebige Wörter in der beliebigen Kombination in einem Satz programmiert werden. Die Satzlänge darf maximal 255 ASCII-Zeichen einschließlich Kommentare enthalten.
Falls es zweideutige Anweisungen wie beispielsweise eine Kreis-Interpolation und eine Geraden-Interpolation in einem Satz auftauchen, so wird dieser Fall als Syntaxfehler interpretiert.
|
|
Aufbau eines Programms
Syntaxprüfung
Die Syntax wird zur Laufzeit der Dekodierung geprüft. Damit wird ein Syntaxfehler erst dann erkannt, wenn die entsprechende Zeile gelesen und in einem Fahrauftrag dekodiert wird.
Ein Syntaxfehler wird in folgenden Fällen interpretiert:
-
ein unzulässiges Wort/Befehl taucht im Programm auf
-
keine Trennzeichen zwischen Wörtern eingeführt
-
zweideutige Anweisungen sind in einem Satz programmiert (z. B. Kreis und Geradeninterpolation)
-
ein ungültiger Variablenname wird gelesen.
Im Falle eines Syntaxfehlers wird der Ausgang xError = TRUE geschaltet und die entsprechende Fehlerkennung über den Ausgang eErrorID ausgegeben. Im Ausgang sLineDecoded wird die Zeile, in der der Syntaxfehler interpretiert worden ist, ohne Kommentare angezeigt. Am Ausgang liLineNoDecoded wird die zugehörige Zeilennummer ausgegeben.
Programmstart und Startzeichen
Das Startzeichen ist als Prozentzeichen (%) in der Norm DIN 66025 festgelegt. Vor dem Startzeichen können beliebige Informationen und Texte stehen. Ein Programm startet, wenn ein Startzeichen gelesen wird. Fehlt so ein Startzeichen im gesamten Programm, wird mit der ersten Zeile der Dekodierung gestartet.
Programmende
Das Programmende wird mit einem Funktionsbefehl gekennzeichnet. Es gibt drei Möglichkeiten, ein Programm zu beenden. Mit dem Befehlswort "M2" oder "M30" wird das Programm beendet. Alle Zeilen nach dem Programmende werden nicht mehr gelesen und dekodiert. Fehlt ein Befehl zum Programmende, ist das Programm mit der letzten Zeile in der ASCII-Datei zu Ende.
Kommentare
Ein Kommentar wird zwischen zwei runden oder geschweiften Klammern geschrieben. Ein kompletter Satz kann mit dem Slash-Zeichen (/) auskommentiert werden. Jeder Kommentar wird überlesen und nicht dekodiert.
Im folgenden Beispiel ist die Anwendung von Kommentaren in einem Programm dargestellt:
-
(Programm) (Kommentar)
-
%(Programm Max) (Programmanfang)
-
/N000 G01 X100 F100 auskommentierter NC-Satz
-
N001 G01 X200 (Y100) Z100 (Y100 ist auskommentiert)
-
N002 G02 X300 R50(Radius=50mm) (So kann ein Kommentar für die Beschreibung der Wörter verwendet werden)
Ausnahme sind mathematische Ausdrücke innerhalb der Zeile. In diesem Fall sind Slash und Klammerungen mathematische Zeichen. Kommentare innerhalb von mathematischen Ausdrücken sind daher nicht zulässig.
Ausblendebenen steuern über dwSkipMask
Eine Ausblendebene ist ein Kommentar, der aus der Applikation heraus aktiviert/deaktivert werden kann. Eine Ausblendebene besteht aus einem "/" mit direkt (kein Leer- oder anderes ASCII-Zeichen) folgender ganzzahliger Nummer von 0 … 31 oder einer Variablen, Mit dwSkipMask.<x> := TRUE werden alle Zeilen, die mit /<x> gekennzeichnet sind, als Kommentar ausgewertet und ausgeblendet, wie das folgende Beispiel zeigt:
-
%(Programm Max) (Programmanfang)
-
N000 G01 X100 F100
-
(Die folgende Zeile N001 wird ausgeführt, wenn dwSkipMask.3 := FALSE ist)
-
(Die folgende Zeile N001 wird ausgeblendet, wenn dwSkipMask.3 := TRUE ist)
-
/3 N001 G01 X200 Y100 Z100
-
N002 G02 X300 R50
dwSkipMask wird zum Zeitpunkt der Dekodierung der jeweiligen Zeile vom FB gelesen und kann daher auch zur Laufzeit verändert werden.Bei der Anpassung der Ausblendebenen zur Laufzeit wird dringend empfohlen, über einen quittierpflichtigen Interpreterhalt (G75) die Synchronität von Dekodierung und Applikation zu gewährleisten.
Ausblendebenen können beliebig innerhalb einer Zeile stehen.
Es können mehrere unterschiedliche Ausblendebenen innerhalb derselben Zeile verwendet werden.
Ungültige Ausblendebenensyntax (z. B außerhalb des Wertebereiches. /38 N001 G1 X0 Y0) werden als normaler Kommentar gewertet und immer komplett ignoriert.
Als Ausblendebene können Variablen (z. B. /$Var1$ N001 G1 X0 Y0) verwendet werden, jedoch keine Gleichungen.
Startsatzsuche
Die Startsatzsuche ermöglicht es, ein mit N-Wörtern versehenenes NC-Programm ab einer definierten Zeilennummer auszuführen.
Typische Anwendungsfälle sind der Test von Teilabschnitten von NC-Programmen oder das Fortsetzen der Programmabarbeitung nach einer Unterbrechung.
Es ist ebenfalls möglich, mittels der Funktion Startsatzsuche eine Syntaxprüfung des NC-Programms vor der Interpolation durchzuführen
Bei der Startsatzsuche ist es notwendig, den gesamten Programmkontext des PLC-Programms wiederherzustellen, d. h. die Konfigurationsbefehle (M-Befehle, Verschleifen aus/an, weitere Bewegungsparameter usw.) werden auch vor dem Startsatz wie im Normalbetrieb berücksichtigt. Lediglich die Fahrbefehle (G00 … G04) werden bei der Startsatzsuche vernachlässigt bzw. nicht interpoliert.
Quittierpflichtige M-Funktionen müssen auch vor dem Startsatz am MC_MovePath quittiert werden.
Verwendung der Startsatzsuche
Die Startsatzsuche wird über die FBs L_MC4P_PathRefFromFile und MC_MovePath bedient.
Über den Eingang L_MC4P_PathRefFromFile.liBlockSearchLineNo wird die Zeilennummer vorgegeben, ab der eine Interpolation des NC-Programms erfolgen soll. Bis zum Finden der vorgegebenen Zeilennummer werden alle NC-Befehle durch den L_MC4P_PatzhRefFromFile durch eine interne Kennung markiert. Im FB MC_MovePath werden alle derart markierten Befehle ohne Interpolation abgearbeitet.
Ist der Startsatz gefunden, wird dieser am MC_MovePath.SourceLine ausgegeben, zusammen mit dem Status MC_MovePath.WaitingForAckBlockSearch. Wird der Start des Programms am MC_MovePath.AckBlockSearch quittiert, beginnt die Abarbeitung des NC-Programms ab dem gefundenen Startsatz.
-
Prüfung der Syntax eines NC-Programms ohne Bewegung.
-
Durch die Vorgabe einer Zeilennummer, die nicht im NC-Programm vorkommt (z.B. L_MC4P_PathRefFromFile.liBlockSearchLinNo := -1) kann ein komplettes NC-Programm ohne Bewegung der Achsgruppe dekodiert und damit auf Syntaxfehler geprüft werden.
Eigenschaften der Startsatzsuche
-
Zum Verwenden der Startsatzsuche ist das NC-Programm mit eindeutigen Zeilennummern Nxxx zu versehen.
-
Modal wirksame Befehle (z.B. G90/G91: absolute / relative Positionierung, Koordinatenwörter X, Y, Z, …, die Auswahl eines Koordinatensystems usw.), die vor dem Startsatz angegeben sind, werden beim Abfahren der Datei ab dem Startsatz entsprechend berücksichtigt.
-
Quittierpflichtige M-Funktionen werden auch vor dem Startsatz mit ausgegeben und sind am MC_MovePath zu quittieren.
-
Es wird das erste Vorkommen der angegebenen Zeilennummer Nxxx in der *.lpp-Datei gefunden und ausgewählt. Es wird dringend empfohlen, die N-Worte hierfür monoton aufsteigend und eindeutig zu vergeben.
-
Bei der Startsatzsuche werden Unterprogrammaufrufe und GOTO-Befehle so aus, als würden die Fahrbefehle normal ausgeführt werden. Ausnahme: Sprungbedingungen, die abhängig von Achsvariablen (z.B. Istpositionen) sind.
-
Der Startsatz kann auch innerhalb eines Unterprogramms angegeben werden.
-
Wenn kein Startsatz gefunden wird (z.B. keine N-Wörter in der NC-Datei oder der Startsatz liBlockSearchLineNo ist negativ oder größer als das größte N-Wort in der NC-Datei) meldet der MC_MovePath Done := TRUE, da die gesamte Datei abgearbeitet wurde.
-
Die Startsatzsuche kann auch mit dem Einzelschrittbetrieb des MC_MovePath kombiniert werden. Dabei gilt, dass Sätze vor dem Startsatz automatisch quittiert werden.
Geometrische Anweisungen
Alle Orts- und Orientierungsangaben im Koordinatenraum werden als geometrische Anweisungen bezeichnet. Alle Geometriedaten sind in der Norm DIN-66217 festgelegt.
Koordinatensystem nach DIN-66217:
-
Es wird ein kartesisches Rechtskoordinatensystem verwendet. Die linearen Achsen werden mit den Variablen X, Y, Z und die rotatorischen mit den Variablen A, B und C definiert. Wobei die A-Achse der Rotation um X, die B-Achse um Y und die C-Achse um die Z beschreibt.Die Reihenfolge der Rotationen sind in der Parametrierung der Achsgruppe vorgegeben.
-
AUX1 bis AUX6 beschreiben Koordinaten für die Hilfsachsen der Kinematik.Die Adressbuchstaben U, V und W können alternativ zum beschreiben Koordinaten für die Hilfsachsen Aux1 bis Aux3 der Kinematik verwendet werden.
-
Die Interpolation in die X-, Y- und Z-Richtungen werden mit der Variablen I, J und K festgelegt. In der Norm DIN-66025 werden die Adressen entsprechend verwendet. Die Zahl hinter der Achse wird direkt als der Wert der Achse auf die Adresse zugewiesen.
Orts- und Orientierungsangabe:
-
Die geometrischen Anweisungen sind für die Orientierung im Raum notwendig.
-
Die Koordinatenangaben erfolgen nach der Norm mit den Adressbuchstaben (X, Y, Z, A, B, C, U, V, W), welche in der DIN-66217 definiert sind und dem Koordinatenwert.
-
Das negative Vorzeichen eines Wertes muss nach dem Adressbuchstaben und vor dem Wert angegeben werden.
-
Das positive Zeichen für die positiven Werte kann weggelassen werden. Der Koordinatenwert ist eine Fließkommazahl. Als Dezimaltrennzeichen wird ein Punkt (.) verwendet.
Das folgende Beispiel definiert einen Ort im Raum:
|
X100 Y-25 Z10.54 (entspricht den Koordinatenpunkt X= 100Unit, Y= -25Unit und Z=10,54Units) |
Ebenenauswahl
Für eine bestimmte Fahranweisung wird nach der Norm eine Ebenenangabe vorausgesetzt. Dabei werden insgesamt drei Grundebenen mit Normalenvektoren in X, Y und Z Richtung definiert. Mit dem G17-Wort wird die X-Y-Ebene ausgewählt, mit dem G18-Wort die X-Z-Ebene und mit G19-Wort die Y-Z-Ebene.
Absolute und relative Maßangabe
Nach der Norm gibt es die Möglichkeit zwischen absoluten und relativen Maßangaben zu wechseln. Mit dem Wort G90 werden alle Angaben als absolute Werte vorgegeben. Mit dem Wort G91 werden die Werte relativ vorgeben. Die Maßangeben mit den Wörtern G90 und G91 beziehen sich auf die Koordinaten: X, Y, Z, A, B, C, U, V, W.
Das folgende Beispiel zeigt den Unterschied zwischen absoluten und relativen Maßangaben:
-
N010 X100 (X = 100 Units)
-
N020 G90(Absolut) X200 (X = 200 Units)
-
N030 G91(Relativ) X300 (X = 200 + 300 = 500 Units)
Wenn ein G91-Wort aufgerufen wird, werden die Werte relativ vorgegeben, d. h. die vorgegeben Werte werden zu den aktuellen addiert. Falls in einem Programm keine G90- oder G91-Wörter existieren, wird standardmäßig das G90-Wort für die absolute Maßangabe aktiv. Die Reihenfolge der Wörter innerhalb eines Satzes spielt keine Rolle. Die Wörtern G90 und G91 können an beliebiger Stelle im Satz geschrieben werden. Wenn die Wörter G90 und G91 innerhalb eines Satzes stehen, wird dies als Syntaxfehler interpretiert. Für die Interpolations-Koordinaten I, J und K werden separate Wörter G98 und G99 für die absolute oder relative Maßangabe verwendet. Mit dem Wort G98 wird die absolute Maßangabe für I, J und K unabhängig von der Maßangabe der Hauptkoordinaten verwendet. Für die relative Maßangabe wird der Wort G99 ebenfalls unabhängig von der Maßangabe der Hauptkoordinaten verwendet.
Fahranweisungen Geraden-Interpolation
Eine Gerade wird durch zwei Ortspunkte eindeutig definiert. Der Startpunkt einer Geraden ergibt sich aus der Zielposition des vorhergehenden Satzes. Der Endpunkt einer Geraden muss mit entsprechendem Wort und den Koordinaten angegeben werden. Unterschieden wird zwischen der "Geradeninterpolation mit Eilganggeschwindigkeit" und der "Geradeninterpolation mit Vorschubgeschwindigkeit".
Eilganggeschwindigkeit: Die Interpolation mit Eilganggeschwindigkeit wird mit dem Wort G0 programmiert. In einem Satz mit dem Wort G0 müssen die Koordinaten des Zielortes vorgegeben werden. Die Interpolation zwischen Start und Endposition wird als Punkt-zu-Punkt-Bewegung (PTP - "Point To Point movements") ausgeführt. Somit wird die Kontur der Geraden zwischen Start- und Endpunkt verlassen. Der Zielort wird schnellstmöglich erreicht. Alle Achsen kommen gleichzeitig im Ziel an. Für die Parameter "Geschwindigkeit", "Beschleunigung", "Verzögerung" und "Ruck" werden die Achsdaten (AXIS_REF) der betroffenen Achsen verwendet.
-
N010 G0 X100 Y50 Z30 (Die Position X = 100, Y= 50 und Z=30 wird mit Eilgang direkt angefahren)
Vorschubgeschwindigkeit (Linear): Das Wort G1 steht für die Geradeninterpolation mit Vorschubgeschwindigkeit. Hierbei wird die von Programm festgelegte Vorschubgeschwindigkeit, Beschleunigung und Verzögerung verwendet. Alle technologischen Anweisungen wie Verschleifen in den Ecken werden berücksichtigt. Der Startpunkt wird durch die vorhergehenden Informationen festgelegt und der Endpunkt muss in einem Satz mit dem G1-Wort angegeben werden. Durch mehrere aufeinanderfolgenden G01-Sätze entsteht ein Polygonzug, der je nach Anforderung der technologischen Anweisungen, auf unterschiedliche Weise verfahren werden kann. Beispielsweise können die Ecken in den Punkten mit dem Wort G51 verschliffen werden.
-
N010 G1 X10 Y10 G91(relativ)
-
N020 G1 X20 G90(absolut)
-
N030 G1 Y0
-
N040 G1 X10 Y10 G91(relativ)
|
|
Fahranweisungen Geraden-Interpolation
Fahranweisungen Kreis-Interpolation
Die Programmierung einer Kreis-Interpolation muss in einem Satz entweder mit dem G2-Wort oder G3-Wort erfolgen. Dabei steht das G2-Wort für einen Kreisbogen im Uhrzeigersinn und das G3-Wort für einen Kreisbogen entgegen dem Uhrzeigersinn. In einem Satz kann maximal eine Kreisumdrehung programmiert werden.
Mit den Koordinaten X, Y und Z wird der Endpunkt des Kreisbogens bestimmt. Die Vorgabe des Endpunktes kann relativ mit dem G91-Wort oder absolute mit dem G90-Wort programmiert werden.
Weiterhin ist es für den Kreisbogen notwendig, die Angabe des Mittelpunktes oder des Radius zu programmieren. Der Mittelpunkt wird über die Interpolationskoordinaten I, J und K vorgegeben. Mit der Adresse I wird die X-Richtung, mit J die Y-Richtung und mit K die Z-Richtung des Mittelpunktes festgelegt. Falls nichts anderes definiert ist, sind die Interpolations-Koordinaten immer als relative Position zum Anfangspunkt definiert. Die Interpolationskoordinaten haben einen relativen Bezug zum Startpunkt des Kreisbogens mit dem Wort G99. Mit dem Wort G98 wird über die Interpolationskoordinaten der absolute Punkt im Koordinatensystem für den Mittelpunkt festgelegt. Alternativ zum Mittelpunkt kann der Radius eines Kreises in der Adresse R vorgegeben werden.
Mit der Auswahl einer Ebenen wird der Kreisbogen entsprechend in die Ebene gelegt. Mit G17 wird die X-Y-Ebene, mit G18 die X-Z-Ebene und mit G19 die Y-Z-Ebene vorgegeben. Falls keine Ebenenauswahl im Programm existiert, wird standardmäßig die Ebene vom Startpunkte des Kreisbogens zum Mittelpunkt über die I-, J- und K-Koordinaten gespannt. Damit ist die Ebene durch den Startpunkt und den Mittelpunkt bestimmt.
|
Hinweis:
Wird bei einem Kreisbogen der Zielpunkt und der Mittelpunkt angegeben, so führt dies aufgrund des gegebenen Startpunktes zu ggf. mehrdeutigen Kreisradien. Typischerweise liegt die Genauigkeit an der Anzahl der angegebenen Nachkommastellen der Koordinatenwörter x, y, z und i, j, k. Die Radien werden mittels einer Toleranz auf Gleichheit geprüft. Ggf. wird ein Fehler am L_MC4P_PathRefFromFile ausgegeben. Der Wert der Toleranz kann über das Property L_MC4P_PathRefFromFile.SetCircTargetTolerance ausgelesen und angepasst werden |
Beispiel 1 zur Kreis-Interpolation:
-
N010 G0 X10 Y10 G90(Absolute)
-
N020 G2(Kreis URZ) G17(X-Y-Ebene) X30 Y10 I10(X_Mittelpunkt) J0(Y_Mittelpunkt)
|
|
Beispiel 2 zur Kreis-Interpolation:
-
N030 G2 X10 Y10 R10(Radius)
-
N040 G0 X0 Y0
|
|
Beispiel 3 zur Kreis-Interpolation:
-
N050 G1 X10 Y10
-
N030 G3 X20 Y0 R10(Radius)
|
|
Beispiel
Beispiel 4 zur Kreis-Interpolation:
|
Hinweis:
Der Modus G16 ijk wird gemäß dem PLC-Open Standard interpretiert. Die Lage des Mittelpunktes im Radiusmode ist nicht eindeutig. Nach der Konvention wird die Wahl des Mittelpunktes durch die Richtung des ijk-Vektors bestimmt. Mit G17 kann das so nicht unterstützt werden, da der Normalenvektor in positiver z-Richtung zeigt. Gewählt wird für G17 immer der kürzere Kreisbogen (analog für G18/G19). Darum unterscheiden sich die Kreise aus Beispiel 3 und Beispiel 4. |
|
N040 G16 I0 J0 K1 N050 G1 X10 Y10 N030 G3 X20 Y0 R10(Radius) |
|
|
Beispiel
Beispielcode für Kreise auf beliebigen Ebenen:
/automatic created File: Hier steht ein beschreibender Text!
3D Kreise
G-CODE NACH DIN 62012
Programmstart:
-
%(3D Kreise)
-
N001 F50 E+1000 E-1000
-
N002 G50 G98(Kreisinterpolation, I, J, K absolut)
-
N003 G0 X0 Y0 Z0
-
N004 G16 I0 J0 K1 (Normalenvektor in +Z-Richtung ==> XY Ebene)
-
N005 G2 X100 Y100 Z0 R100 (1. Viertelkreis XY)
-
N006 G0 X0 Y0 Z0
-
N007 G16 I0 J0 K-1 (Normalenvektor in -Z-Richtung ==> XY Ebene)
-
N008 G2 X100 Y100 Z0 R100 (2. Viertelkreis XY)
-
N009 G0 X0 Y0 Z0
-
N010 G16 I0 J0 K1 (Normalenvektor in +Z-Richtung ==> XY Ebene)
-
N010 G2 X200 Y0 Z0 R100 (3. 180Grad Kreis XY)
-
N012 G0 X0 Y0 Z0
-
N013 G16 I0 J1 K1 (Normalenvektor in +Y/+Z-Richtung)
-
N014 G2 X100 Y70.71 Z-70.71 R100 (4. Viertelkreis gekippt)
-
N015 G16 I0 J1 K1 (Normalenvektor in +Y/+Z-Richtung)
-
N016 G2 X200 Y0 Z0 R100 (5. Viertelkreis gekippt fortsetzen)
-
N017 G0 X0 Y0 Z0
Verweilzeit
Mit dem Wort G04 wird die Verweilzeit in einer Zeile programmiert. Die Angabe der Zeit wird mit dem Zahlenwert unter der Adresse T definiert. Der Zahlenwert wird in der Einheit Sekunden [s] vorgegeben. Im folgenden Beispiel ist die Verweilzeit von 20 s programmiert.
|
% (Programmanfang) N001 G01 X200 Y100 Z100 (Anfahren einer Position) N002 G04 T20 (Verweilzeit von 20s) N003 M02 (Programmende) |
Die Interpolation der Bahn wird im programmierten Punkt für 20 s gehalten.
M-Funktionen
Maschinenfunktionen werden zur Synchronisation der Abarbeitung des NC-Programmes mit der PLC verwendet.
Syntax: /N001 Myyy
Mit yyy = 0….65499 (Word).
|
Typ der M-Funktion |
Wertebereich |
Abkürzung |
Ablauf |
|---|---|---|---|
|
Ohne Synchronisation |
xx100 ... xx199 |
MOS |
Meldung der M-Funktion beim Start des Satzes, keine Quittung erforderlich |
|
Meldung am Satzstart, Quittierung am Satzstart |
xx200 ... xx299 |
MVS_SVS |
Meldung der M-Funktion und Warten auf die Quittung beim Start des Satzes |
|
Meldung am Satzstart, Quittierung am Satzende |
xx300 ... xx399 |
MVS_SNS |
Meldung der M-Funktion beim Start des Satzes Warten auf die Quittung am Satzende, d. h. nach Erreichen der Zielposition des Fahrweges |
|
Meldung am Satzende, Quittierung am Satzende |
xx400 ... xx499 |
MNS_SNS |
Meldung der M-Funktion und Warten auf die Quittung am Satzende, d. h. nach Erreichen der Zielposition des Fahrweges |
|
Programmende |
M2, M30 |
|
Die M-Funktionen M2 und M30 sind gleichwertig und beenden das Programm, ggf. auch aus einem Unterprogramm heraus |
|
Unterprogrammende |
M17, M29 |
|
Die M-Funktionen M17 und M29 sind gleichwertig und beenden das Unterprogramm. Es wird in die aufrufende Programmebene zurückgekehrt und dieses fortgesetzt. |
|
Sonstige M-Funktionen |
|
Nicht unterstütze M-Funktion |
Syntaxfehlermeldung des ASCII-Interpreters. |
Die Zuordnung einer M-Funktion zu einem Typ erfolgt über die Nummer der M-Funktion.
Nichtquittierungspflichtige M-Funktionen (Mxx100 ... Mxx199)
Nichtquittierungspflichtige M-Funktionen werden mit MOS abgekürzt. In einem Fahrauftrag führt eine MOS nicht zu einem Anhalten der Bahn. Die MOS wird lediglich so lange angezeigt, wie der Fahrauftrag abgefahren wird.
Beispiel 1:
-
% (Startzeichen)
-
N010 G51 D10 (Verschliff aktiviert)
-
N020 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N030 G01 Y200 M103 (Anfahren einer Position)
-
N040 G01 X200 (Anfahren einer Position)
-
N050 M02 (Programmende)
In Beispiel 1 werden die Zielpositionen nacheinander angefahren. Dabei werden die Eckpunkte mit einem Überschliffradius von 10 verschliffen. Bei Anfahrt des Zielpunktes aus der Zeile N030 wird die M103-Funktion aktiviert. Sie ist so lange aktiv, bis der Verschliff aus dem Satz N030 in den Satz N040 interpoliert wird. Die M-Funktion führt nicht zum Anhalten der Bahn beim Übergang vom Satz N030 in den Satz N040.
Sollte eine MOS in einem Satz allein stehen (ohne Fahrauftrag), wird dies wie ein Haltepunkt interpretiert. Die Bahn hält für einen SPS-Taktzyklus in diesem Satz an und fährt anschließend mit dem nachfolgenden Satz fort.
Beispiel 2:
-
% (Startzeichen)
-
N010 G51 D10 (Verschlief aktiviert)
-
N020 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N030 M103 (MOS)
-
N040 G01 Y200 (Anfahren einer Position)
-
N050 G01 X200 (Anfahren einer Position)
-
N060 M02 (Programmende)
In Beispiel 2 werden die Zielpositionen ebenfalls nacheinander angefahren. Nach Erreichen der Zielposition aus Zeile N020 wird die Bahn für einen SPS-Taktzyklus im Satz N030 angehalten. Die M-Funktion M103 wird für diesen einen SPS-Zyklus angezeigt. Die Bahn fährt anschließend mit dem nachfolgenden Satz fort.
Parallel aktive M-Funktionen
In einem Satz dürfen maximal 10 M-Funktionen parallel aktiv sein und davon darf nur eine M-Funktion quittierungspflichtig sein. In separaten Sätzen gibt es keine Einschränkung bei der maximalen Anzahl von M-Funktionen.
Beispiel 3:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 M101 (Meldung der M-Funktion, kein Quittung)
-
N030 M10 (Meldung der M-Funktion, kein Quittung)
-
N040 G01 Y200 M104 M105 (Anfahren einer Position)
-
N050 G01 X200 (Anfahren einer Position)
-
N090 M02 (Programmende)
In Beispiel 3 wird in den Sätzen N020 und N030 jeweils für einen SPS-Taktzyklus angehalten, um die M-Funktionen M101 und M102 anzuzeigen.
Mit dem Satz N040 werden zwei parallele M-Funktionen (M104 und M105) aktiviert. Am MC_MovePath wird nur eine aktive M-Funktion über den Ausgang MFunction angezeigt.
Für die parallele Darstellung der M-Funktionen wird ein zusätzlicher Funktionsbaustein benötigt: Der FB L_MC4P_MFunctionFromPathRef wird parallel zu MC_MovePath mit der PathRef angeschlossen. Über die Angabe wMCommand am Eingang des FBs L_MC4P_MFunctionFromPathRef wird die M-Funktion aufgerufen. Hierbei wird der Status der definierten M-Funktion am Ausgang des FBs angezeigt.
Quittierungspflichtige M-Funktionen
In einem Fahrauftrag können mehrere quittierungspflichtige M-Funktionen eingesetzt werden. Pro Satz ist allerdings nur eine quittierungspflichtige M-Funktion erlaubt. Das heißt, es sind keine parallel quittierungspflichtige M-Funktion erlaubt.
Im Fall, dass zwei quittierungspflichtige M-Funktion in einem Satz programmiert sind, wird der FB L_MC4P_PathRefFromFile einen Syntaxfehler ausgeben.
Drei Arten von quittierungspflichtigen M-Funktionen werden unterschieden:
MVS_SVS (Wertebereich Mxx200 ... Mxx299)
Wenn die MVS_SVS in einem Satz zusammen mit einem Fahrauftrag vorkommt, wird die M-Funktion am Eingang des Satzes gemeldet. Am Satzanfang wird die Bahn immer angehalten. Erst nach Quittierung der M-Funktion über den Eingang MAcknowledge des FBs MC_MovePath startet der Fahrauftrag gemäß dem programmierten Satz.
Beispiel 4:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 G01 Y200 M204 (Anfahren einer Position)
-
N030 G01 X200 (Anfahren einer Position)
-
N040 M02 (Programmende)
Im Beispiel 4 ist im Satz N020 eine M-Funktion von Typ MVS_SVS mit einem Fahrauftrag programmiert. Nach Erreichen des Zielpunktes aus dem Satz N010 bei X = 100, Y = 100 und Z = 0 wird die Bahn angehalten. Am MC_MovePath wird am Ausgang MFunction die M-Funktion 204 ausgegeben. Erst nach Quittierung der M-Funktion 204 über den Eingang MAcknowledge des MC_MovePath wird die Bahn mit dem Fahrauftrag aus dem Satz N020 fortgesetzt.
Im Fall, dass eine MVS_SVS alleine ohne Fahrauftrag in einem Satz programmiert ist, führt die Bahn an dieser Stelle (Zielposition des voranlaufenden Fahrauftrages) einen Genauhalt durch. Die Bahn wird erst nach der Quittierung der M-Funktion über den Eingang MAcknowledge des MC_MovePath weiter zum nächten Fahrauftrag verfahren.
Beispiel 5:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 M202
-
N030 G01 Y200 (Anfahren einer Position)
-
N040 G01 X200 (Anfahren einer Position)
-
N050 M02 (Programmende)
Im Beispiel 5 ist im Satz N020 eine M-Funktion von Typ MVS_SVS ohne Fahrauftrag programmiert. Nach Erreichen des Zielpunktes aus dem Satz N010 bei X = 100, Y = 100 und Z = 0 wird die Bahn angehalten. Am MC_MovePath wird am Ausgang MFunction die M-Funktion 202 ausgegeben. Erst nach Quittierung der M-Funktion 202 über den Eingang MAcknowledge des MC_MovePath wird die Bahn mit dem Fahrauftrag aus dem Satz N030 fortgesetzt.
MVS_SNS (Wertebereich Mxx300 ... Mxx399)
Wenn die MVS_SNS in einem Satz zusammen mit einem Fahrauftrag vorkommt, wird die M-Funktion am Eingang des Satzes gemeldet.
Der Fahrauftrag wird mit der aktiven M-Funktion abgefahren bis die Zielposition erreicht ist. Bis zu diesem Zeitpunkt kann die M-Funktion jederzeit quittiert werden.
Wenn die Quittierung vor Erreichen der Zielposition im aktuellen Satz erfolgt, wird am Satzende ein Verschliff eingebaut und ohne Haltepunkt der nächste Satz abgefahren.
Im Fall keiner vorzeitigen Quittierung der M-Funktion, wird in der Zielposititon angehalten und zwar ohne Verschliff in den nachfolgenden Satz. Nach Quittierung in der Zielposition des Satzes wird das nächte Satz aus der Path-Datei angefahren.
Beispiel 6:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 G01 Y200 M305 (Anfahren einer Position)
-
N030 G01 X200 (Anfahren einer Position)
-
N040 M02 (Programmende)
Im Beispiel 6 ist im Satz N020 eine M-Funktion von Typ MVS_SNS mit einem Fahrauftrag programmiert. Die M-Funktion 305 wird bereits nach Erreichen der Zielposition aus dem Satz N010 und bei der Anfahrt der Zielposition N020 gemeldet. Die Bahn wird im Zielpunkt aus dem Satz N020 bei X = 100, Y = 200 und Z = 0 angehalten.
Am MC_MovePath wird am Ausgang MFunction die M-Funktion 305 ausgegeben. Erst nach Quittierung der M-Funktion über den Eingang MAcknowledge des MC_MovePath wird die Bahn mit dem Fahrauftrag aus dem Satz N030 fortgesetzt.
Im Fall, dass eine MVS_SNS alleine ohne Fahrauftrag in einem Satz programmiert ist, wird diese M-Funktion wie eine MVS_SVS alleine ohne Fahrauftrag behandelt. Die Bahn wird an dieser Stelle (Zielposition des voranlaufenden Fahrauftrages) angehalten. Die Bahn wird erst nach Quittierung der M-Funktion über des Eingang MAcknowledge des FBs MC_MovePath weiter zum nächsten Fahrauftrag verfahren.
MNS_SNS (Wertebereich Mxx400 ... Mxx499):
Bei einer MNS_SNS zusammen mit einem Fahrauftrag in einem Satz wird die M-Funktion beim Erreichen der Zielposition gemeldet. Die Bahn wird immer in der Zielposition angehalten. Erst nach Erreichen der Zielposition darf die M-Funktion quittiert werden. Nach der Quittierung wird der nächte Satz angefahren.
Beispiel 7:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 G01 Y200 M407 (Anfahren einer Position)
-
N030 G01 X200 (Anfahren einer Position)
-
N040 M02 (Programmende)
Im Beispiel 7 ist im Satz N020 eine M-Funktion von Typ MNS_SNS mit einem Fahrauftrag programmiert.
Bei der Abfahrt dieser Datei über MC_MovePath wird die Bahn beim Erreichen des Zielpunktes aus dem Satz N020 bei X = 100, Y = 200 und Z = 0 angehalten. Am MC_MovePath wird die M-Funktion 407 ausgegeben. Erst nach Quittierung der M-Funktion 407 wird die Bahn mit dem Fahrauftrag aus dem Satz N030 fortgesetzt.
In Fall, dass eine MNS_SNS alleine ohne Fahrauftrag in einem Satz programmiert ist, wird diese M-Funktion wie eine MVS_SVS alleine ohne Fahrauftrag behandelt. Die Bahn wird an dieser Stelle (Zielposition des voranlaufenden Fahrauftrages) angehalten. Die Bahn wird erst nach Quittierung der M-Funktion über des Eingangs MAcknowledge des FBs MC_MovePath weiter zum nächsten Fahrauftrag verfahren.
M-Funktionen mit Parametern
Quittierungspflichtige M-Funktionen können mit Parametern versehen werden. Die Bezeichnung der Parameter beginnt mit einem „P“ gefolgt von einem Buchstaben "A ... Z". Pro M-Funktion können somit bis zu 26 Parameter definiert werden.
Beispiel 8
-
% (Startzeichen)
-
M200 PA4711 PB=4712 PC$GVL.g_VAR1$ PD=$GVL.g_VAR2$
-
Das Auslesen erfolgt mit dem FB L_MC4P_MFunctionFromPathRef.
Schaltfunktionen
Schaltfunktionen können entlang der Bahn definiert werden. Eine Schaltfunktion wird über die Adresse H zusammen mit einem Parameter O bzw. L programmiert.
Schaltfunktionen benötigen immer einen Bewegungsauftrag (i. Allg. G00 bis G04). Werden Schaltfunktionen in einem Satz ohne M-Befehl und ohne Bewegungsauftrag programmiert, werden sie der nachfolgenden Zeile zugeordnet.
Der Zustand aller Schaltfunktionen kann je Achsgruppe über den zentralen FB <<LINK>> L_MC4P_GroupDigitalSwitchHandler ausgelesen werden. Dieser muss Enabled werden, damit Zustandswechsel der Schaltfunktionen synchronisiert mit der Interpolation ausgewertet werden können.
Zur Programmierung von Schaltfunktionen über das NC-Programm gilt:
H: Schaltfunktion
-
Ein positiver Adresswert H1…H32767 aktiviert die jeweilige Schaltfunktion
-
Ein negativer Adresswert H-1 … H-32767 deaktiviert die jeweilige Schaltfunktion
O: relative Schaltposition auf dem Segment
-
O0: Schalten am Beginn des Satzes
-
O1: Schalten am Ende des Satzes
L: Distanz zum Start bzw. Zielpunkt in mm
-
L>0: Distanz zum Startpunkt des Satzes
-
L<0: Distanz zum Zielpunkt des Satzes
Es ist nicht möglich, eine Schaltfunktion über den Definitionsbereich eines Satzes hinweg zu verschieben. Der Parameter O wird intern auf den Wertebereich [0…1] limitiert. Der Parameter L wird intern auf [-Segmentlänge … +Segmentlänge] begrenzt.
Es können insgesamt 32676 unterschiedliche Schaltfunktionen programmiert werden
Es können je Bewegungssatz maximal drei Schaltpunkte definiert werden.
Beispiel:
% (Startzeichen)
N010 G01 X0 Y0 Z0 (Anfahren Startposition)
N020 G01 X100 Y100 Z0 H1 O0.5 H2 L-10(Schaltfunktionen 1 und 2 aktivieren)
N030 G01 z100 H-1 O1 H-2 O0 (Schaltfunktionen 1 und 2 deaktivieren)
N040 M30 (Programmende)
In Satz N020 wird die Schaltfunktion H1 zur Hälfte des Weges aktiviert, die Schaltfunktion H2 wird 10mm vor Erreichen der Zielposition x100, y100, z0 aktiv
In Satz N030 erfolgt das Ausschalten der Schaltfunktionen. H1 am Ende des Satzes (O1), H2 wird zu beginn des Satzes (O0) deaktiviert.
Verhalten der Schaltfunktionen innerhalb von verschliffenen Sätzen
Werden Verschliffe programmiert, so wird der Verschliff geometrisch dem Folgesatz zugeordnet. Die Schaltpositionen, welche mit O bzw. L programmiert sind, beziehen sich daher auf die Gesamtlänge von Verschliff + Nachfolgegeometrie.
Beispiel:
|
NC-Code |
Bewegung |
|---|---|
|
% (Startzeichen)
N010 G51 D20 (Verschliff an)
N020 G1 <P1> H1 O0…O1 (Schaltpunkt an P0…P11)
N030 G2 <P2> H2 O0…O1 (Schaltpunkt an P11…P21)
N040 G1 <P3> H3 O0…O1 (Schaltpunkt an P21…P3)
N050 M30 (Programmende)
|
|
Entsprechend gilt für H-Funktionen mit L-Parametern für verschliffene Bewegungen
Die Referenzpunkte für die Distanzen sind:
Bei L>0 (Abstand zum Startpunkt) der Beginn des vorherigen Verschliffs
Bei L<0 (Distanz zum Zielpunkt) der Anfang des nachfolgenden Verschliffs, Ende der „Originalgeometrie“
Schaltfunktionen für Eilgang-Bewegungen G00 und Wartezeiten G04
Bei Bewegungen G00 ist keine kartesische Bahn definiert. Die Antriebsachsen werden zeitlich synchronisiert verfahren.
Eine Programmierung von Schaltpunkten ist bei G00 nur mit relativem Schaltparameter O zulässig.
Als Basis für den relativen Fortschritt der Bewegung wird bei G00 die Verfahrzeit verwendet.
Schaltfunktionen bei kartesischen Bewegungen G01..G03 ohne kartesische Distanz
Werden in einer kartesischen Bewegung ausschließlich Rotationsachsen (A, B oder C) oder Hilfsachsen (Aux1 ... Aux6 bzw. U, V, W) positioniert, so gelten die folgenden Regeln:
-
Bei Verwendung des Parameters O wird die relative Zeit der Bewegung verwendet (Vgl. G00 bzw. G04)
-
Bei Verwendung des Parameters L0 bzw. L<0 wird unmittelbar am Beginn des Segments geschaltet
-
Bei Verwendung des Parameters L>0 wird am Ende des Segments geschaltet
Interpreterhalt – Synchronisation des Interpreters mit der Interpolation (MC_MovePath)
Mit dem Wort G75 wird der Interpreter angehalten, bis alle bisher aus der ASCII-Datei eingelesenen Sätze abgefahren wurden.
Interpreterhalt ohne Synchronisation aus der Applikation
Mit dem Wort G75 wird der Interpreter angehalten. Sobald der MC_MovePath alle Sätze im Speicher abgefahren hat und die Achsen angehalten sind, wird der Interpreter wieder gestartet.
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 G75 (Interpreterhalt, Haltepunt der Achsen)
-
N030 G01 Z100 (Zeile wird erst eingelesen, wenn die Achsen die Position X100, Y100, Z0 erreicht haben)
-
N040 M02 (Programmende)
Interpreterhalt mit Synchronisation aus der Applikation
Mit dem Wort G75 und einer M-Funktion von Typ MVS_SVS (Mxx200 bis xx299) in einer Zeile wird der Interpreter angehalten. Die Interpretation von Sätzen wird fortgesetzt, wenn die Quittierung des M-Befehl in der Applikation erfolgt.
G75 mit einer M-Funktion eines anderen Typs als MVS_SVS führt zu einer Fehlermeldung.
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position)
-
N020 G75 M200 (Interpreterhalt, Warten auf Quittierung M200)
-
N030 G01 Z100 (Zeile wird eingelesen, wenn M200 quittiert wurde)
-
N040 M02 (Programmende)
Zugriff auf SPS-Variablen im G-Code
Über $..$ geklammerte Ausdrücke kann aus dem Interpreter auf globale Variablen der SPS zugegriffen werden. Die Variablen sind mit vollem Pfad anzugeben und über die Symbolkonfiguration zugreifbar zu machen.
-
% (Startzeichen)
-
N010 G01 X$GVL.glrXPos$ Y$GVL.glrYPos$ (Anfahren einer variablen Position)
-
N020 M02 (Programmende)
Verwendung mathematischer Ausdrücke im G-Code
In vielen Fällen ist es hilfreich, bestimmte Werte für z.B. Geschwindigkeiten, Positionen oder logische Bedingungen bei Programmsprüngen (siehe Befehl GOTO) nicht fest fortzugeben, sondern diese innerhalb des G-Codes zu berechnen.
Dabei gilt:
-
Gleichungen sind mit Hochkommata zu klammern.
-
Innerhalb von Gleichungen können durch $..$ geklammerte SPS-Variablenzugriffe (aus der Symbolkonfiguration) erfolgen.
-
Auf SPS-Variablen kann nur lesend zugegriffen werden. Ein Schreibzugriff ist nicht zulässig.
-
Es ist möglich, Rechenergebnisse auf M-Funktionsparameter zu schreiben (siehe Beispiel). Diese Werte können mit dem Funktionsbaustein L_MC4P_MFunctionFromPathRef in der SPS ausgewertet werden.
-
Gleichungen sind weder bezüglich der Variablennamen noch bezüglich Befehlen Case-Sensitiv
-
Innerhalb von Gleichungen sind Kommentare in jeglicher Syntax < (Kommentar) >, </Kommentar> oder <{Kommentar}>NICHT zulässig. Die Klammern und / sind semantisch relevante Zeichen.
Beispiel eines Rechtecks mit variabler Kantenlänge:
-
% (Startzeichen)
-
N001 F1000 E1000
-
N002 G0 X0 Y0
-
N003 G1 X0 Y'100+$lrOffsetY$'
-
N004 G1 X'100+$lrOffsetX$' Y'100+$lrOffsetY$'
-
N005 G1 X'100+$lrOffsetX$' Y0
-
N006 G1 X0 Y0
-
N007 G75 M202 PX'100+$lrOffsetX$' PY'100+$lrOffsetY$' (Quittierpflichtiger Interpreterhalt und Ausgabe der XY-Koordinaten)
-
N008 M02 (Programmende)
Folgender Funktionsumfang steht zur Verfügung:
|
Funktion |
Befehl |
Datentyp der Operanden |
Datentyp des Resultats |
|---|---|---|---|
|
Algorithmische Funktionen |
|||
|
Addition |
+ |
LREAL,LREAL |
LREAL |
|
Subtraktion |
- |
LREAL,LREAL |
LREAL |
|
Multiplikation |
* |
LREAL,LREAL |
LREAL |
|
Division |
/ |
LREAL,LREAL |
LREAL |
|
Exponentenrechnung |
^ |
LREAL,LREAL |
LREAL |
|
Modulorechnung |
MOD |
LREAL,LREAL |
LREAL |
|
Absolutwertbildung |
ABS |
LREAL |
LREAL |
|
Quadratwurzel |
SQRT |
LREAL |
LREAL |
|
e–Funktion |
EXP |
LREAL |
LREAL |
|
Natürlicher Logarithmus |
LN |
LREAL |
LREAL |
|
Zehner - Logarithmus |
LOG |
LREAL |
LREAL |
|
Trigonometrische Funktionen (Im Gradmaß) |
|||
|
Sinus |
SIN |
LREAL |
LREAL |
|
Kosinus |
COS |
LREAL |
LREAL |
|
Tangens |
TAN |
LREAL |
LREAL |
|
Arkus-Sinus |
ASIN |
LREAL |
LREAL |
|
Arkus-Kosinus |
ACOS |
LREAL |
LREAL |
|
Arkus-Tangens |
ATAN |
LREAL |
LREAL |
|
Funktionen zum Runden |
|||
|
Abschneiden der Nachkommastellen = Zum kleineren Betrag Runden |
TRUNC |
LREAL |
LREAL |
|
Runden |
ROUND |
LREAL |
LREAL |
|
Aufrunden |
CEIL |
LREAL |
LREAL |
|
Abrunden |
FLOOR |
LREAL |
LREAL |
|
Logische Operatoren |
|||
|
UND-Verknüpfung |
AND |
BOOL,BOOL |
BOOL |
|
ODER-Verknüpfung |
OR |
BOOL,BOOL |
BOOL |
|
exklusive ODER-Verknüpfung |
XOR |
BOOL,BOOL |
BOOL |
|
NICHT-Operator |
NOT |
BOOL |
BOOL |
|
Vergleichsoperatoren |
|||
|
Gleichheit |
EQ |
LREAL,LREAL |
BOOL |
|
Ungleichheit |
NE |
LREAL,LREAL |
BOOL |
|
größer gleich |
GE |
LREAL,LREAL |
BOOL |
|
kleiner gleich |
LE |
LREAL,LREAL |
BOOL |
|
kleiner |
LT |
LREAL,LREAL |
BOOL |
|
größer |
GT |
LREAL,LREAL |
BOOL |
|
Sonstige Operanden |
|||
|
Vorzeichen |
SIGN |
LREAL |
LREAL |
|
Klammerung |
(...) |
|
|
|
unäres Minus (Vorzeichen) |
- |
LREAL |
LREAL |
|
unäres Plus (Vorzeichen) |
+ |
LREAL |
LREAL |
|
Konstanten |
|||
|
Pi |
PI |
|
LREAL |
|
Wahr |
TRUE |
|
BOOL |
|
Falsch |
FALSE |
|
BOOL |
Programmsprünge
Mit dem Befehl GOTO können innerhalb desselben ASCII-Programms Sprünge durchgeführt werden.
-
Das Sprungziel ist eine mit Nxxx gekennzeichnete Zeilennummer.
-
Ist das Sprungziel Nxxx kleiner als die aktuelle Zeilennummer wird in der Datei- das Sprungziel in Richtung Dateianfang gesucht.
-
Ist das Sprungziel Nxxx größer als die aktuelle Zeilennummer wird in der Datei das Sprungziel in Richtung Dateiende gesucht.
-
Daraus folgt: Werden Sprünge verwendet, ist die Zeilennummer eindeutig zu vergeben und (streng) Monoton aufsteigen im Code. Es erfolgt keine Prüfung der Monotonie.
-
Werden Zeilennummern mehrfach vergeben, so wird der erste Treffer angesprungen.
-
Wird das Sprungziel nicht gefunden, wird ein Fehler ausgegeben.
Beispiel unbedingter Programmsprung:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position 1)
-
N020 GOTO40 (Position 2 überspringen)
-
N030 G01 X110 Y100 Z0 (Anfahren einer Position 2)
-
N040 G01 X100 Y110 Z0 (Anfahren einer Position 3)
-
N050 M02 (Programmende)
Bedingte Programmsprünge
Mit dem Befehl IF kann eine Bedingung angegeben werden, ob ein Sprung ausgeführt werden soll.
-
Syntax: IF <Bedingung> GOTO <Zeilennummer>.
-
Wenn die Bedingung = WAHR bzw. ungleich Null ist, so wird der Sprung ausgeführt.
-
Wenn der Wert unter Bedingung = FALSE bzw. gleich Null ist, so wird die nächste Zeile im Programm eingelesen.
-
Bedingungen sind mit Hochkommata zu umklammern. Vgl. Gleichungen im G-Code.
-
Die zulässigen Hilfsausdrücke sind in der Tabelle zum Funktionsumfang Verwendung mathematischer Ausdrücke im G-Code angegeben.
Beispiel bedingter Programmsprung:
-
% (Startzeichen)
-
N010 G01 X100 Y100 Z0 (Anfahren einer Position 1)
-
N020 G01 X110 Y100 Z0 (Anfahren einer Position 2)
-
N030 G01 X100 Y110 Z0 (Anfahren einer Position 3)
-
N040 IF ‘$x$ LE 10‘ GOTO10 (Solange die drei Sätze 10..30 wiederholen, wie die Variable $x$ kleiner oder gleich 10 ist)
-
N040 M02 (Programmende)
Verwendung von Unterprogrammen
Häufig verwendete Bewegungen können als Makro in Unterprogramme ausgelagert werden. Durch die Angabe des Unterprogramms im Hauptprogramm wird der Inhalt der Unterprogrammdatei in den Ablauf des Hauptprogramms integriert.
-
Mit dem Wort G22 wird der Aufruf eines Unterprogramms eingeleitet.
-
Mit der Adresse L wird der Name des Unterprogramms in Hochkommata geklammert angegeben, beispielsweise:
-
N010 G22 L’Unterprogramm.lpp‘ (Unterprogrammaufruf)
-
Das Unterprogramm muss als Datei im selben Ordner wie das Hauptprogramm auf der SD Karte abgelegt sein.
-
Ein Unterprogramm darf sich nicht selber aufrufen, rekursive Aufrufe sind unzulässig.
-
Es wird eine Verschachtelungstiefe von max. fünf unterstützt.
-
Modal wirkende Funktionen (Vorschub, Beschleunigung, Positionen, ...) werden beim Eintritt in das Unterprogramm aus den gültigen Werten der aufrufenden Programmebene übernommen.
Werden modal wirkende Funktionen im Unterprogramm verändert, so haben diese Änderungen nach Ende des Unterprogramms auch Rückwirkungen auf die überlagerte Ebene
-
Unterprogramme sind mit M17 oder M29 zu beenden. Wird innerhalb eines Unterprogramms das Programmende M2 bzw. M30 verwendet, beendet dies alle Unterprogramme und das Hauptprogramm.
-
Es ist zulässig, Unterprogramme autark auszuführen. In dem Fall wirkt das Unterprogrammende M17, M29 wie ein Programmende M2, M30.
Beispiel:
-
Dateiname: <<Hauptprogramm.lpp>>
-
% (Startzeichen)
-
N010 G01 X200 Y100 Z0 (Anfahren einer Position)
-
N020 G04 T20 (Verweilzeit von 20s)
-
N030 G22 L‘Unterprogramm.lpp‘ (Unterprogrammaufruf)
-
N040 G04 T20 (Verweilzeit von 20s)
-
N050 M02 (Programmende)
-
Dateiname: <<Unterprogramm.lpp>>
-
% (Startzeichen)
-
N010 Z100
-
N020 X200 Y200
-
N030 Z0
-
N040 M29 (Unterprogrammende)
Übersicht der Adressen
|
Zeichen |
Bedeutung |
Bemerkung |
|---|---|---|
|
% |
Programm-Start |
|
|
M2, 30 |
Programm-Ende |
|
|
M17, M29 |
Unterprogrammende |
|
|
Zeilenumbruch |
Satz-Ende |
|
|
() |
Kommentar |
|
|
/ |
Kommentar einer ganzen Zeile |
|
|
/xx |
Ausblendebene |
xx = 0 ... 31 |
|
. <Punkt> |
Dezimaltrennzeichen |
|
|
, <Komma> |
Wird nicht unterstüzt-> Syntaxfehler |
|
|
` <Hochkomma> |
Kennzeichnung von Gleichungen Kennzeichnung des Unterprogrammbezeichnern für L-Wort |
|
|
= <Gleichheitszeichen> |
Optionales Gleichheitszeichen zur besseren Lesbarkeit |
Beispiel: G1 X2 und G1 X=2 sind gleichwertig |
|
$Variable$ |
Lesezugriff auf PLC Variable. |
Variablen müssen in der Symbolkonfiguration hinterlegt sein |
|
N, N00, N010 usw. |
Zeilennummer |
|
|
A |
Drehbewegung um X-Achse |
|
|
AUX1 … AUX6 |
Koordinate der Hilfsachsen Aux1…Aux6 Anstelle von AUX1 ..AUX3 können auch die Koordinatenwörter U, V, W verwendet werden |
Zur besseren Lesbarkeit sollte zwischen AUX<i> und der Zielposition immer ein Gleichheitszeichen verwendet werden. |
|
B |
Drehbewegung um Y-Achse |
|
|
C |
Drehbewegung um Z-Achse |
|
|
E |
Beschleunigung |
|
|
E- |
Negative Verzögerung (bremsen) Falls im Programm keine E-Angabe vorhanden ist, wird für die Verzögerung der Beschleunigungswert verwendet |
|
|
F |
Vorschub -> Bahngeschwindigkeit |
|
|
G |
Wegbedingung |
|
|
H |
Nicht unterstützt |
|
|
I |
Interpolationsparameter - zur Bestimmung des Kreises in X-Richtung |
|
|
J |
Interpolationsparameter - zur Bestimmung des Kreises in Y-Richtung |
|
|
K |
Interpolationsparameter - zur Bestimmung des Kreises in Z-Richtung |
|
|
L |
Bezeichner für Unterprogramme |
|
|
M |
M30, M2 wird als Programmende unterstützt |
|
|
O |
Nicht unterstützt |
|
|
P |
Parameter von M-Funktionen |
|
|
Q |
Nicht unterstützt |
|
|
D |
Zusammen mit G51 wird der Blendingradius für die Segmente festgelegt |
|
|
R |
Bei G02 und G03 steht R für den Radius der Kreisinterpolation. |
|
|
S |
Nicht unterstützt |
|
|
T |
Angabe der Zeit für die Verweilzeit G04 |
|
|
U |
Aux1-Hilfsachse |
Gleichwertig zu AUX1 |
|
V |
Aux2-Hilfsachse |
Gleichwertig zu AUX2 |
|
W |
Aux3-Hilfsachse |
Gleichwertig zu AUX3 |
|
X |
Bewegung in Richtung X-Achse im Bezugskoordinatensystem |
|
|
Y |
Bewegung in Richtung Y-Achse |
|
|
Z |
Bewegung in Richtung Z-Achse |
|
Übersicht der geometrischen Anweisung
|
Zeichen |
Bedeutung |
Bemerkung |
|---|---|---|
|
G00 |
Eilgang (PTP-Bewegung) 4Punkt-zu-Punkt-Bewegungen und kartesische Bahnbewegungen |
Schnellste Bewegung; alle Achsen kommen gleichzeitig an (keine definierte Bahn) |
|
G01 |
Geraden-Interpolation |
|
|
G02 |
Kreis-Interpolation im Uhrzeigersinn Der Zielpunkt wird über X, Y und Z festgelegt. Der Mittelpunkt wird mit Adressen I, J, und K definiert. Alternativ zum Mittelpunkt kann die Angabe des Radius mit der Adresse R vorgenommen werden. |
|
|
G03 |
Kreis-Interpolation gegen den Uhrzeigersinn Der Zielpunkt wird über X, Y und Z festgelegt. Der Mittelpunkt wird mit den Adressen I, J, und K definiert. Alternativ zum Mittelpunkt kann die Angabe des Radius mit der Adresse R vorgenommen werden. |
|
|
G04 |
Angabe der Verweilzeit (Pause) Unter dem Parameter T wird die Verweilzeit in Sekunden programmiert. |
Beispiel: G04 T10 à An dieser Stelle im Programm eine Pause von 10 s ausführen. |
|
G16 |
Räumliche Kreisinterpolation |
Definition der Ebene im Raum über I, J, K |
|
G17 |
Auswahl der Hauptebene XY |
|
|
G18 |
Auswahl der Hauptebene ZX |
|
|
G19 |
Auswahl der Hauptebene YZ |
|
|
G22 |
Unterprogrammaufruf |
|
|
G50 |
Verschleifen von Eckpunkten über einen Blendingradius ausschalten. |
|
|
G51 |
Verschleifen von Eckpunkten über einen Blendingradius einschalten. Der Blendingradius wird über die Adresse D programmiert. |
|
|
G53 |
Verschiebung aufheben è WCS-Koordinatensystem einschalten |
|
|
G54 |
PCS 1-Koordinatensystem einschalten |
|
|
G55 |
PCS 2-Koordinatensystem einschalten |
|
|
G56 |
PCS 3-Koordinatensystem einschalten |
|
|
G57 |
PCS 4-Koordinatensystem einschalten |
|
|
G58 |
PCS 5-Koordinatensystem einschalten |
|
|
G59 |
MCS-Koordinatensystem einschalten |
|
|
G75 |
Interpreterhalt – Synchronisation der ASCII-Interpretation mit der Bahnabarbeitung |
s |
|
G90 |
Absolutes Maßsystem für die Koordinaten X, Y, Z, A, B, C, U, V, W |
|
|
G91 |
Relatives Maßsystem für die Koordinaten X, Y, Z, A, B, C, U, V, W |
|
|
G98 |
Absolutes Maßsystem für die Interpolations-Koordinaten I, J und K |
|
|
G99 |
Relatives Maßsystem für die Interpolations-Koordinaten I, J und K |
|