Zyklen als globale oder lokale Unterprogramme (Aufruf L / LL CYCLE)
Zyklen stehen im NC-Kern in der Form globaler oder lokaler Unterprogramme zur Verfügung und ermöglichen spezielle Bearbeitungsvorgänge wie zum Beispiel das Tieflochbohren oder das Taschenfräsen. Die im Zyklus definierte Bearbeitungsaufgabe ist in allgemeiner Form geschrieben. Die Datenversorgung erfolgt beim Zyklusaufruf mit der Belegung der Versorgungsparameter.
Ein Zyklus ist unabhängig von der aktuell gültigen Ebene (G17, G18, G19) und unabhängig von den im NC-Kanal konfigurierten Achsnamen programmiert. Lediglich die Richtung, aus der die Bearbeitung in der aktuellen Ebene durchgeführt werden soll, muss beim Zyklusaufruf angegeben werden. Im Zyklus kann auf eine eigene gekapselte Gruppe von Parametern zugegriffen werden. Diese werden beim Zyklusaufruf mit Werten belegt.
Hierzu steht eine spezielle Syntax zur Verfügung, die durch das „@“-Zeichen charakterisiert ist. Dieses Zeichen wird in der Zyklenprogrammierung verwendet in Verbindung mit:
@Pxx | Versorgungsparameter im Zyklusaufruf und Zyklus |
@X, @Y, @Z | Hauptachsen im Zyklus |
@I, @J, @K | Mittelpunktskoordinaten im Zyklus |
@S | Hauptspindel im Zyklus |
Der Zyklusaufruf muss in einem eigenen NC-Satz ohne weitere NC-Befehle programmiert werden. Die Syntax besteht aus einem globalen oder lokalen Unterprogrammaufruf mit zusätzlicher Angabe der zyklusabhängigen Versorgungsparameter.
Syntax: |
L | LL CYCLE [ NAME=<cycle> [MODAL_MOVE / MODAL_BLOCK] @P1=.. @P200=.. { \ } ] |
NAME=<cycle> | Name des Zyklus (Dateiname) |
MODAL_MOVE (MODAL, alte Syntax) | Modaler Zyklusaufruf. Nach jedem weiteren NC-Satz in der aktiven Programmebene, der Bewegungsbefehle enthält, wird der Zyklus erneut implizit ausgeführt. |
MODAL_BLOCK | Modaler Zyklusaufruf. Nach jedem weiteren NC- Satz in der aktiven Programmebene wird der Zyklus erneut implizit ausgeführt. |
| Bei folgenden NC-Befehlen wird der implizite blockmodale Zyklusaufruf unterdrückt: |
|
|
| |
| |
| Die Abwahl der modalen Wirkung von MODAL_MOVE / _BLOCK erfolgt am Ende der Programmebene ((M2, M30, M17; M29) oder durch #DISABLE MODAL CYCLE. |
@Pxx=.. | Auflistung der Versorgungsparameter. Es können maximal 200 @Pxx-Parameter vom Typ REAL oder STRING (ab V3.3079.25) übergeben werden. Schreib- und Lesezugriffe sind nur innerhalb eines Zyklus‘ erlaubt. Den @Pxx-Parametern können direkt Werte, beliebige Variablen, P-Parameter und mathematische Ausdrücke übergeben werden. |
\ | Trennzeichen ('Backslash') für Programmierung des Befehls über mehrere Zeilen |
Versorgungsparameter - @P-Parameter
- Innerhalb der Klammerung ist keine Reihenfolge bei der Angabe der Schlüsselworte und Versorgungsparameter erforderlich. Bei der Programmierung muss der Anwender lediglich wissen, welche @P-Parameter für den Zyklus belegt werden müssen.
- Nicht benötigte @P-Parameter können weggelassen werden.
- Beim Lesezugriff auf einen nicht übergebenen @P-Parameter im Zyklus wird dieser implizit angelegt (Standard) und mit 0 (Null) initialisiert. Hierbei erhöht sich dann der Speicherbedarf. Dieses Verhalten kann der Anwender über P-CHAN-00463 ab der CNC-Version V3.1.3079.20 abschalten. Beim Lesezugriff auf nicht übergebene @P-Parameter wird dann der Fehler ID 20394 ausgegeben.
In CNC-Versionen bis V3.1.3079.19 sind nicht programmierte @P-Parameter beim Lesezugriff mit 0 (Null) initialisiert. - Ob ein @P-Parameter verwendet bzw. gültig ist, kann im Zyklus über die Variable V.G.@P[i].VALID ermittelt werden.
- Über die Funktionen IS_STRING und IS_NUMBER können @P-Parameter im Zyklus geprüft werden, ob es sich um einen String oder eine Zahl handelt, siehe Beispiel 4. (ab V3.3079.25)
- In CNC-Versionen bis V3.1.3079.19 bleiben die Versorgungsparameter bis zum programmierten Aufruf eines anderen Zyklus (L CYCLE.. oder G80..) erhalten. Ab der CNC-Version V3.1.3079.20 werden die Versorgungsparameter beim Schließen des Zyklus (M17 bzw. M29) gelöscht.
- Im Zyklusaufruf programmierte, aber im Zyklus selbst nicht verwendete @P-Parameter werden ignoriert.
- Ob das aktuelle Unterprogramm bzw. die aktuelle Programmebene ein Zyklus ist, kann über die Variable V.G.CYCLE_ACTIVE ermittelt werden.
Achtung
Ein Zyklus ist eine abgeschlossene NC-Programmeinheit mit einer definierten Bearbeitungsaufgabe. Es wird empfohlen, die Schachtelung von Zyklen zu vermeiden, da dabei die Gefahr der Mehrfachbelegung von Versorgungsparametern besteht.
Hinweis
Versionsspezifisch sind in der Standardeinstellung im laufenden NC-Programm oder im Einzelsatzbetrieb während der Ausführung eines Zyklus in der Anzeige die Bearbeitungszeilen des Zyklus ausgeblendet oder sichtbar. Bei aktiver Ausblendung wird in dieser Zeit nur der Zyklusaufruf angezeigt.
Dieses Verhalten kann über den Kanalparameter P-CHAN-00211 geschaltet werden.
Erforderliche Definitionen vor Zyklusaufruf:
- Die vor dem Zyklusaufruf aktiven modalen G-Funktionen, sowie Kreisgeometriedaten und der aktuell aktive Vorschub (F-Wort) bleiben über den Zyklus hinaus erhalten. Dieses Verhalten kann über den Kanalparameter P-CHAN-00210 geschaltet werden.
- Modale G-Funktionen, die in Verbindung mit Achsnamen programmiert sind (z.B. G92, G98, G99, G100, G112, G130 ...) werden nicht wieder hergestellt, wenn diese im Zyklus selbst programmiert wurden.
- Die Bearbeitungsebene (G17, G18, G19) sollte vor dem Zyklusaufruf im übergeordneten NC-Programm definiert werden. Die senkrecht auf dieser Ebene stehende Achse ist dann bei Bohrzyklen die Achse, in der die Bohrung ausgeführt wird und bei Fräszyklen die Zustellachse für die Tiefe.
- Auch eventuelle Werkzeuggeometriekorrekturen (z.B. Längenkorrektur) müssen vor Aufruf des Zykluses angewählt werden.
- Die erforderlichen Werte für Vorschub, Spindeldrehzahl und Spindeldrehrichtung sind im übergeordneten NC-Programm festzulegen, es sei denn, entsprechende Versorgungsparameter sind im Zyklus vorhanden.
- Die in den Zyklen programmierten Spindelbefehle beziehen sich stets auf die aktive Hauptspindel des NC-Kanals. Es ist sicherzustellen, dass diese Hauptspindel vor dem Zyklusaufruf definiert wurde.
- Die Startposition für eine entsprechende Bohr- oder Fräsbearbeitung sowie die Orientierung des Werkzeuges sind stets vor dem Zyklusaufruf im übergeordneten NC-Programm anzufahren.
Abwahl eines modalen Zyklus:
Mit nachfolgendem NC-Befehl wird ein modal wirkender Zyklus (Schlüsselwort MODAL_MOVE oder MODAL_BLOCK im Zyklusaufruf) abgewählt. Der Befehl muss allein im NC-Satz programmiert werden.
Syntax: |
#DISABLE MODAL CYCLE |
Verfügbare Zyklen:
Folgende Zyklen stehen zur Verfügung:
Programmierbeispiel
Verfügbare Zyklen
Am Beispiel eines Zyklusaufrufes zum Bohren (drilling.cyc) werden im Folgenden die verschiedenen Möglichkeiten der Parameterbelegung dargestellt.
Der Bohrzyklus drill.cyc benötigt folgende Versorgungsparameter:
@P1 | Position der Rückzugsebene (absolut) |
@P2 | Position der Bearbeitungsebene (absolut) |
@P3 | Sicherheitsabstand (ohne Vorzeichen) |
@P4 | Endbohrtiefe (absolut) oder |
@P5 | Endbohrtiefe relativ zur Bearbeitungsebene (ohne Vorzeichen) |
Zyklusaufruf mit konstanten Werten:
..
Nxx L CYCLE [NAME=drilling.cyc @P1=110 @P2=100 @P3=4 @P4=40]
..
oder mit Angabe einer relativen Bohrtiefe @P5:
..
Nxx L CYCLE [NAME=drilling.cyc @P1=110 @P2=100 @P3=4 @P5=60]
..
Zyklusaufruf mit Variablen:
Die Variablen müssen vor dem Zyklusaufruf definiert und mit Werten belegt werden.
..
#VAR
V.L.RPL = 110
V.L.WPL = 100
V.L.SDST = 4
V.L.DEP = 50
#ENDVAR
Nxx L CYCLE [NAME=drilling.cyc @P1= V.L.RPL @P2=V.L.WPL @P3=V.L.SDST @P4=V.P.DEP]
..
Zyklusaufruf mit P-Parametern:
Die Parameter müssen vor dem Zyklusaufruf definiert und mit Werten belegt werden.
..
Nxx P10 = 110
Nxx P11 = 100
Nxx P15 = 4
Nxx P17 = 50
Nxx L CYCLE [NAME=drilling.cyc @P1= P10 @P2=P11 @P3=P15 @P4=P17]
..
Zyklusaufruf mit mathematischen Ausdrücken:
..
Nxx P20 = 100
Nxx L CYCLE [NAME=drilling.cyc @P1= 10+P20 @P2=2*50 @P3=5-1 @P4=P20/2]
..
Zyklusaufruf mit konstanten Werten; Reihenfolge der Parameter in der Klammerung beliebig:
..
Nxx L CYCLE [@P4=40 NAME=drilling.cyc @P2=100 @P3=4 @P1=110]
..
Zyklusaufruf mit konstanten Werten; Zyklus soll modal wirken:
..
Nxx L CYCLE [NAME=drilling.cyc @P1=110 @P2=100 @P3=4 @P4=40 MODAL_MOVE]
..
[Beispiel:]
%drill_main
N05 T1 D1
N10 M06
N15 G53 G17 G90 M3 S300 F200 S300
N16 G0 X0 Y0 Z0
N20 Z110
N30 X40 Y40 (Bohrposition 1)
N40 L CYCLE [NAME=drilling.cyc @P1=110 @P2=100 @P3=2 @P4=55 MODAL_MOVE]
N50 X60 Y60 (Bohrposition 2 und impliziter Zyklusaufruf, da modal)
N60 X100 Y60 (Bohrposition 3 und impliziter Zyklusaufruf, da modal)
N70 X100 Y20 (Bohrposition 4 und impliziter Zyklusaufruf, da modal)
#DISABLE MODAL CYCLE
N80 X0 Y0 M5
N100 M30
Hinweis
Hinweise für das Erstellen von Zyklen
Zyklen müssen so weit wie möglich allgemeingültig und unabhängig von den aktuell im NC-Kanal verwendeten Achsnamen und der Ebenenfestlegung programmiert sein. Zu diesem Zweck besteht im Zyklus die Möglichkeit, für die ersten drei Hauptachsen die ebenenunabhängigen „neutralen Achsnamen“ @X, @Y und @Z zu verwenden. Hierbei bedeutet:
@X immer die erste Hauptachse
@Y immer die zweite Hauptachse
@Z immer die dritte Hauptachse
Beispiel 1: Achsen im Zyklus
Nxx G91 @X=@P1 @Y=@P2 @Z=@P3 F1000 G01
Analog dazu stehen auch bei der Kreisprogrammierung s.g. 'neutrale Mittelpunktskoordinaten' zur Verfügung. Hierbei bedeutet:
@I immer die Mittelpunktskoordinate in der ersten Hauptachse
@J immer die Mittelpunktskoordinate in der zweiten Hauptachse
@K immer die Mittelpunktskoordinate in der dritten Hauptachse
Beispiel 2: Kreis im Zyklus
Nxx G91 G02 @X=@P1 @Y=@P2 @I=@P4 @J=@P5 F1000
Um auch bei der Spindelprogrammierung vom konfigurierten Spindelnamen unabhängig zu sein, kann im Zyklus die Hauptspindel immer mit dem neutralen Spindelnamen @S angesprochen werden.
@S immer die Hauptspindel
Beispiel 3: Spindel im Zyklus
Nxx @S=1000 M3 (Hauptspindel cw mit 1000 U/min)
Beispiel 4: Prüfung @P-Parameter
Die übergebenen @P-Parameter können mit den Funktionen IS_STRING und IS_NUMBER überprüft werden.
%L cycle
( Check variables)
$IF IS_STRING[@P1] == TRUE
#MSG["Text: %s",@P1]
$ELSE
#MSG["Error no String"]
$ENDIF
$IF IS_NUMBER[@P2] == TRUE
#MSG["Zahl: %f",@P2]
$ELSE
#MSG["Error not a number"]
$ENDIF
M17
% Main
LL CYCLE [NAME=cycle @P1 ="String1" @P2=12.34]
M30