Unterprogramme auf Fanuc, Siemens und Mitsubishi programmieren
Leitfaden für CNC-Unterprogramme auf Fanuc, Siemens und Mitsubishi. Syntax für M98, MCALL & M198, Schachtelungsgrenzen und Fehlerbeseitigung für die Praxis.
Einleitung
Wenn ein CNC-Unterprogramm beendet wird, während sich die Steuerung noch im inkrementellen Positionierungsmodus (G91) befindet, führt dies beim Wiedereintritt in das Hauptprogramm zu einer unkontrollierten Nullpunktverschiebung. Das Werkzeug fährt dadurch auf falschen Bahnen ab, was das Werkstück unbrauchbar macht und im schlimmsten Fall dazu führt, dass der Revolver (turret) oder die Spindel (spindle) mit voller Wucht mit einem Spannmittel wie den Spannbacken (vise jaw), dem Spannfutter (chuck) oder einer Spannpratze (clamp) kollidiert. Eine solche harte Kollision verbiegt Spindelkomponenten und beschädigt Werkzeuge irreparabel. Dieser Ausschuss und die daraus resultierenden Maschinenstillstände lassen sich durch präzise Konfiguration und klare modale Abgrenzungen auf Fanuc-, Siemens- und Mitsubishi-Steuerungen verhindern. Durch die Modularisierung wiederkehrender Bearbeitungssequenzen in separate Unterprogramme lässt sich der Speicherbedarf drastisch senken. Doch da modale Befehle wie Vorschübe (feedrate) und Koordinatensysteme fließend über Programmebenen hinweg wirken, erfordert der sichere Betrieb eine strenge Disziplin bei der Wiederherstellung des modalen Ausgangszustands sowie die Überwachung von Schachtelungstiefen (nesting) und Parametersperren.
Technische Übersicht
| Technische Spezifikation | Details |
|---|---|
| Befehlscodes | Fanuc: M98, M99, M198Siemens: L<number>, <program name>, MCALL, EXTCALL, M17, RETMitsubishi: M98, M99, M198 |
| Modale Gruppe / Modalität | Unterprogramm-Aufruf- und Rückkehrbefehle |
| Abgedeckte Marken | Fanuc, Siemens, Mitsubishi |
| Kritische Parameter | Fanuc: 3404#2 (SBP), 6001#5/7000#0 (TCS)Siemens: P (INT), VAR-SchlüsselwortMitsubishi: #8876 (M198-Gerät), #8129 (Suchpriorität) |
| Hauptbeschränkung | Schachtelungsgrenzen: Max. 4 Ebenen (Fanuc), Max. 11/16 Ebenen (Siemens), Max. 8/10 Ebenen (Mitsubishi). Verschachtelte M198-Aufrufe auf externen Speichermedien sind verboten. |
Schnellleser
- Modale Rücksetzung: Stellen Sie vor dem Verlassen eines Unterprogramms stets die absolute Positionierung (G90) wieder her und setzen Sie alle geänderten modalen Vorschübe zurück, um katastrophale Abweichungen der Werkzeugbahn zu verhindern.
- Schachtelungsgrenzen: Begrenzen Sie die Schachtelungstiefe auf 4 Ebenen bei Fanuc, 8 bis 10 bei Mitsubishi und 11 bis 16 bei Siemens, um Speicherüberläufe des Interpreters zu vermeiden.
- Aufruf von externem Speicher: Programmieren Sie
M198(Fanuc/Mitsubishi) oderEXTCALL(Siemens), um große Programme direkt von externen Speicherkarten oder Datenservern auszuführen. - Parameterschutz: Sperren Sie die Editierrechte für Makroprogramme der 8000er- und 9000er-Serien bei Fanuc über die Parameter
PRG8(0389#2) undPRG9(0010#4), um versehentliche Änderungen zu verhindern. - Alias-Customizing: Verwenden Sie benutzerdefinierte M-, S-, T- oder B-Codes, um Hintergrund-Unterprogramme, wie z. B. Revolver-Schaltsequenzen (turret), automatisch zu maskieren und auszulösen.
- Siemens MCALL (modal): Nutzen Sie
MCALLin Siemens-Steuerungen, um ein Unterprogramm automatisch an jeder in den folgenden Blöcken aufgeführten Koordinatenposition auszuführen, bis es abgewählt wird.
Grundlegende Konzepte
Der praktische Programmiereffekt eines Unterprogramms liegt in der Möglichkeit, sich wiederholende Bearbeitungssequenzen zu modularisieren, was die Dateigröße erheblich reduziert und zukünftige Programmänderungen vereinfacht. Anstatt exakt dieselben Schruppdurchgänge, Nutungsroutinen oder Palettenwechselsequenzen mehrfach in ein einziges großes Programm zu kopieren, speichern Entwickler diese Aktionen als unabhängige Programme auf einer tieferen Ebene ab. Das Hauptprogramm ruft diese Unterprogramme bei Bedarf einfach auf und setzt den Hauptpfad sofort fort, sobald das Unterprogramm beendet ist. Dies ermöglicht saubere, optimierte Dateien, die nur minimalen Speicherplatz beanspruchen.
Die Steuerungshersteller unterscheiden sich darin, wie sie diese Unterprogramme lokalisieren, aufrufen und ausführen. Ältere Plattformen erfordern strenge numerische O-Nummern als Namenskonvention, während moderne Steuerungen beschreibende alphanumerische Namen zulassen. Unterprogramme können auch modal an verschiedenen Koordinaten ausgeführt oder dynamisch von externen Hardware-Schnittstellen gestreamt werden, um interne Speicherbegrenzungen vollständig zu umgehen. Da ein Unterprogramm als aktive Erweiterung des aufrufenden Programms ausgeführt wird, fließen modale Zustände wie Vorschübe (feedrate) und Positionierungskoordinaten nahtlos über die verschiedenen Ebenen hinweg, was strenge Programmierpraktiken erfordert, um ein unerwünschtes Übertragen (Coordinate Bleeding) von Koordinaten zu vermeiden.
Befehlsstruktur
Um ein Unterprogramm aufzurufen, muss der CNC-Interpreter einen spezifischen Befehlscode zusammen mit der Kennung des Zielprogramms und der Anzahl der Wiederholungen verarbeiten. In standardmäßigen Fanuc- und Mitsubishi-Umgebungen leitet der Code M98 diesen Sprung ein und überträgt die Kontrolle an das durch die Adresse P angegebene Programm. Die Steuerung verfolgt jeden Durchlauf des Unterprogramms mithilfe eines Wiederholungszählers, bevor sie die abschließende Rückkehrsequenz ausführt. Am Ende des Unterprogramms stoppt ein Rückkehrbefehl die Ausführung im Unterprogramm und setzt den Programmzeiger wieder auf den Block zurück, der direkt auf den ursprünglichen Aufruf folgt.
Siemens-Steuerungen unterstützen eine flexiblere Struktur, bei der Unterprogramme direkt über ihren Programmnamen oder eine L-Adresse aufgerufen werden können. Die Definition eines Siemens-Unterprogramms kann eine PROC-Kopfzeile enthalten, die Parametertypen und -namen für die Wertübergabe zwischen den Programmebenen definiert. Der Rücksprung erfolgt über M17 oder RET. Bei allen Marken ermöglichen externe Aufrufe wie M198 oder EXTCALL das Streaming von Speicherkarten oder Netzwerklaufwerken. Die Parameter und Syntaxadressen bestimmen, wie die Steuerung diese Routinen sucht, wiederholt und daraus zurückkehrt.
Befehlssyntax-Adressen:
- Fanuc Standardaufruf:
M98 P_ L_ ; - Fanuc externer Aufruf:
M198 P_ ; - Fanuc Rückkehr:
M99 ; - Siemens-Definition:
PROC <program name> (<ParamType> <ParamName>, VAR <ParamType> <ParamName>) [SAVE] [DISPLOF] [SBLOF] [ACTBLOCNO] - Siemens-Aufruf:
<program name> (<Param1>, <Param2>)oderL<number>oderMCALL <program name> - Siemens-Rückkehr:
M17oderRET - Mitsubishi Standardaufruf:
M98 P__ H__ L__ ,D__ ;oderM98 <file name> H__ L__ ,D__ ; - Mitsubishi externer Aufruf:
M198 P__ L__ ;oderM198 <file name> L__ ; - Mitsubishi Rückkehr:
M99 P__ ;
| Parameteradresse | Steuerungsmarke | Beschreibung | Zulässige Einstellungen |
|---|---|---|---|
P | Fanuc / Mitsubishi | Gibt die aufzurufende Zielprogrammnummer an | Bis zu 8 Ziffern |
L | Fanuc / Mitsubishi | Bestimmt, wie oft das Unterprogramm wiederholt wird | 1 bis 9999 (Standard: 1) |
H | Mitsubishi | Gibt die Start-Satznummer (sequence block number) innerhalb des Unterprogramms an | Satznummerncode (z. B. H100 entspricht N100) |
,D | Mitsubishi | Routet den Aufruf explizit an ein bestimmtes physikalisches Speichermedium | 0 bis 4 (über Parameter zugewiesen) |
<file name> | Mitsubishi | Gibt einen alphanumerischen Dateinamen in spitzen Klammern an | Bis zu 32 Zeichen |
P (im Aufruf) | Siemens | Steuert die Anzahl der Programmwiederholungen | 1 bis 9999 (z. B. P3) |
VAR | Siemens | Deklariert die Parameterübergabe per Referenz (call-by-reference) in der PROC-Kopfzeile | N. v. (Schlüsselwort) |
SAVE | Siemens | Speichert und stellt aktive modale G-Funktionen und Frames automatisch wieder her | N. v. (Attribut) |
DISPLOF | Siemens | Unterdrückt die Satzanzeige auf dem HMI während der Unterprogrammausführung | N. v. (Attribut) |
SBLOF | Siemens | Deaktiviert das schrittweise Abarbeiten im Einzelsatzmodus (single block) | N. v. (Attribut) |
Markenanwendungen
Fanuc-CNC-Integration
Fanuc-Steuerungen unterstützen parametergesteuerte Aliase zur Auslösung von Unterprogrammen. Das System kann Hintergrund-Unterprogramme ausführen, indem es den Parameter 6001#5 (TCS) verwendet, um Werkzeugaufrufe dem Programm O9000 zuzuweisen.
Standard-Unterprogramme werden über M98 aufgerufen, Dateien auf externen Speicherkarten über M198, und die Rückkehr erfolgt mit dem Befehl M99.
| Parameter / Alarm / Version | Typ | Beschreibung | Einstellungen / Details |
|---|---|---|---|
Parameter 0010#4 (PRG9) | Parameter | Bestimmt, ob das Bearbeiten der Unterprogramme O9000 bis O9999 gesperrt ist. | 0 (nicht gesperrt), 1 (gesperrt) |
Parameter 0389#2 (PRG8) | Parameter | Bestimmt, ob das Bearbeiten der Unterprogramme O8000 bis O8999 gesperrt ist. | 0 (nicht gesperrt), 1 (gesperrt) |
Parameter 3404#2 (SBP) | Parameter | Bestimmt, ob die Adresse P in einem M198-Block eine Dateinummer oder eine Programmnummer angibt. | 0 (Dateinummer), 1 (Programmnummer) |
Parameter 3457 | Parameter | Konfigurationen der Suchordnerhierarchie (z. B. Benutzerordner, MTB-Ordner, Systemordner). | Bit-Werte |
Parameters 6071 to 6079 | Parameter | Weist bestimmte M-Codes zu, um automatisch die Unterprogramme O9001 bis O9009 aufzurufen. | 3 to 99999999 (ausgenommen reservierte M-Codes) |
Alarm 0076 | Alarm | PROGRAM NOT FOUND: Das aufgerufene Programm wurde im Speicher oder den Suchordnern nicht gefunden. | Überprüfen Sie den Parameter 3457 und verifizieren Sie die Registrierung der O-Nummer. |
Alarm 0077 | Alarm | TOO MANY SUB, MACRO NESTING: Schachtelungstiefe überschreitet das Limit. | Max. 4 verschachtelte Unterprogramme (8 inklusive Makroaufrufen). |
Alarm 1080 | Alarm | DUPLICATE DEVICE SUB PROGRAM CALL: Verschachtelter M198-Aufruf. | Vermeiden Sie den Aufruf von M198 aus einem active M198-Unterprogramm. |
Alarm 1091 | Alarm | DUPLICATE SUB-CALL WORD: Mehrere Aufrufe im selben Block. | Programmieren Sie Unterprogrammaufrufe in separaten Blöcken. |
Parameter 0001#1 (FCV) | Version | Legacy-Kompatibilitätsmodus für FS0-TC/FS15-TA Lochstreifenformate. | 0 (Standardformat), 1 (kehrt zum Format der Serie 15 zurück und führt Wiederholungsanzahl und P-Adresse zusammen) |
Warnung: Wird die modale Positionierung (G91) vor dem M99-Rücksprung nicht zurückgesetzt, führt dies zu einer Nullpunktverschiebung, die den Revolver (turret) in die Spannbacken (vise jaw) fahren lässt.
Siemens SINUMERIK Integration
Siemens unterstützt hochsprachenähnliche Unterprogrammdefinitionen mit lokalem Variablenbereich. Standardaufrufe verwenden den Programmnamen oder eine L-Nummer und übergeben Parameter direkt über die PROC-Kopfzeile.
Modale Unterprogrammaufrufe werden über MCALL initiiert, wodurch das Unterprogramm nach jedem Koordinatenblock bis zur Abwahl ausgeführt wird. Rücksprünge erfolgen über M17 oder RET.
| Parameter / Alarm / Version | Typ | Beschreibung | Einstellungen / Details |
|---|---|---|---|
P (INT) | Parameter | Adresse zur Programmierung der Anzahl der Unterprogrammwiederholungen. | 1 bis 9999 |
VAR | Parameter | Deklariert Parameter zur Referenzübergabe (call-by-reference) in der PROC-Kopfzeile. | N. v. (Schlüsselwort) |
SAVE | Attribut | Speichert und stellt aktive modale G-Funktionen und Frames automatisch wieder her. | N. v. |
DISPLOF / SBLOF | Attribut | Unterdrückt die Satzanzeige auf dem HMI / deaktiviert den Einzelsatzmodus (single block). | N. v. |
Alarm 14011 | Alarm | program not existing or will be edited: Aufgerufene Datei fehlt oder ist auf dem HMI geöffnet. | Schließen Sie die Datei auf dem HMI; überprüfen Sie den Pfad _N_SPF_DIR. |
Alarm 14012 | Alarm | maximum subroutine level exceeded: Maximale Schachtelungstiefe überschritten. | Überprüfen Sie die Schachtelungstiefe. |
Alarm 12720 | Alarm | program number for macro call (G65/G66) missing: Makroaufruf im ISO-Modus ohne Angabe der Programmnummer. | Geben Sie die Zielprogrammnummer über die Adresse P an. |
SINUMERIK 808D vs 828D/840D sl | Version | Hardware-Tier-Unterschiede bei den Unterprogramm-Schachtelungstiefen. | 808D: 11 Ebenen · 828D/840D sl: 16 Ebenen (18 mit ASUBs) |
Software Version 5+ | Version | Sicherheitsverriegelung verhindert Ausführung von Programmen, die zur Bearbeitung geöffnet sind. | Auf dem HMI geöffnete Programme können nicht mit NC-Start gestartet werden. |
Warnung: Das Weglassen des SAVE-Attributs in der PROC-Zeile führt dazu, dass modale G-Code-Einstellungen (wie G91) unbemerkt in das Hauptprogramm übertragen werden, was zu unmittelbaren Achskollisionen führt.
Mitsubishi-CNC-Integration
Mitsubishi ermöglicht alphanumerische Unterprogrammaufrufe direkt im G-Code-Block. Die Suchpriorität wird über den Parameter #8129 konfiguriert, um die O-Nummer-Formatierung zu bestimmen.
Unterprogramme werden über M98 mit spitzen Klammern aufgerufen (z. B. <PART.PRG>) und mit M198 oder der ,D-Adresse auf externe Medien geroutet.
| Parameter / Alarm / Version | Typ | Beschreibung | Einstellungen / Details |
|---|---|---|---|
#8876 (M198 pro stor: dev) | Parameter | Wählt das Ziel-Speichermedium für über M198 aufgerufene Unterprogramme aus. | G (Festplatte), R (Speicherkarte), D (Datenserver), N (USB-Speicher) |
#8880 to #8888 | Parameter | Legt bestimmte Hardware-Geräte fest, die der ,D-Adresse (0 bis 4) zugeordnet sind. | M (Speicher), G (Festplatte), R (Speicherkarte), D (Datenserver), T (Ethernet), F (Floppy-Laufwerk/FLD) |
#8129 (Subpro No. select) | Parameter | Bestimmt die Priorisierung bei der Suche nach Unterprogrammnummern. | 0 (programmierte Nummer), 1 (4-stellige O-Nummer), 2 (8-stellige O-Nummer) |
Program Error (P230) | Alarm | Subprogram nesting over: Maximale Schachtelungstiefe überschritten. | Überprüfen Sie die Schachtelungsgrenzen und Datenserver-Konfigurationen. |
Program Error (P231) | Alarm | No sequence No.: Rücksprung-Satznummer oder Sprungziel fehlt. | Überprüfen Sie, ob die Satznummer mit dem Ziel in M99 P übereinstimmt. |
Program Error (P232) | Alarm | No program No.: Zieldatei fehlt oder externes Laufwerk ist nicht gemountet. | Überprüfen Sie den Laufwerks-Mount-Status und die Dateinamenlänge (max. 32 Zeichen). |
M70V/M700V vs M800V/M80V | Version | CNC-Serienlimits für Unterprogramm-Schachtelungstiefen. | M70V/M700V: 8 Ebenen · M800V/M80V: 10 Ebenen |
M800VW/M80VW vs M800VS/M80V | Version | Standard-Suchlaufwerk für M198, wenn der Parameter #8876 nicht definiert ist. | VW/Typ-W: Datenserver · VS/Typ-S: frontseitige SD-Karte |
Warnung: Das gleichzeitige Ausführen eines M198-Unterprogramms von einer SD-Karte auf mehreren Kanälen (part systems) is blockiert und führt zu einem sofortigen Stopp der Ausführung.
Markenvergleich
| Thema | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Alphanumerische Dateien | Keine native Unterstützung; erfordert zwingend O-Nummern. | Nativ über Programmnamens-Strings unterstützt. | Nativ über spitze Klammern unterstützt (z. B. <PART-FILE.PRG>). |
| Wiederholter modaler Aufruf | Satzweise Ausführung oder modaler Makroaufruf (G66). | Modale Unterprogrammausführung über MCALL <prog>. | Satzweise Ausführung. |
| Schachtelungstiefe | Max. 4 Schachtelungsebenen (8 inklusive Makros). | Max. 11 (808D), 16 (828D/840D sl), bis zu 18 mit ASUBs. | Max. 8 (M70V/M700V), 10 (M800V/M80V). |
| Aufruf von Speichermedien | M198 P_ streamt von Karte/Datenserver. | EXTCALL ruft externe Unterprogramme auf. | M198 ruft vom über #8876 konfigurierten Gerät oder über explizite ,D-Adresse auf. |
| Parameterübergabe | Erfordert Custom-Macro-Aufrufe (G65/G66). | Direkt über die PROC-Definition unterstützt („call-by-value“ und „call-by-reference“ über VAR). | Erfordert Makroaufruf oder Variablen. |
Technische Analyse
Eine analytische Betrachtung dieser drei CNC-Architekturen offenbart unterschiedliche Ansätze zur Unterprogrammausführung, zum Speicherbereich (scoping) und zur Parameterübergabe. Siemens orientiert sich bei der Ausführung an PC-Hochsprachen und ermöglicht es Programmierern, lokale Gültigkeitsbereiche und Parameterübergabemechanismen direkt im Unterprogrammkopf zu definieren. Durch Verwendung des VAR-Schlüsselworts in der PROC-Zeile ermöglicht Siemens eine Ausführung per Referenz (call-by-reference), wodurch Unterprogramme Berechnungen modifizieren und an das Hauptprogramm zurückgeben können. Fanuc und Mitsubishi nutzen ältere Registerarchitekturen, die Makro-Optionen wie G65 oder G66 zur Wertübertragung erfordern oder Programmierer dazu zwingen, sich auf flüchtige globale Variablen zu verlassen, was das Risiko einer Verfälschung modaler Daten birgt.
Die Schachtelungshierarchien spiegeln ebenfalls unterschiedliche Hardware-Philosophien wider. Fanucs Begrenzung auf 4 Ebenen erfordert von Programmierern vereinfachte, flache Aufrufstrukturen. Siemens bietet bis zu 16 oder 18 Schachtelungsebenen. Da diese Ebenen jedoch dynamisch zwischen Anwender-Unterprogrammen, Standardzyklen und OEM-Hintergrundroutinen des Maschinenherstellers (wie Spindeldrehzahlbegrenzungen oder Revolversteuerungsmakros) geteilt werden, kann dieses Budget schnell aufgebraucht sein. Mitsubishi liegt in der Mitte und bietet 8 Ebenen bei der älteren M70V-Serie sowie 10 Ebenen bei neueren M80V-Steuerungen. Das Überschreiten dieser Grenzwerte auf einer beliebigen Steuerung stoppt die Ausführung sofort, was die Notwendigkeit unterstreicht, die Aufruftiefe über alle aktiven Systeme hinweg zu verfolgen.
Verzeichnisrouting und Sicherheitskontrollen unterscheiden diese Plattformen. Fanuc nutzt den Parameter 3457, um eine starre, automatisierte Ordnerhierarchie zu durchsuchen, während Mitsubishi ein direktes physikalisches Routing über die ,D-Adresse oder Dateinamen in spitzen Klammern wie <PART.PRG> ermöglicht. Siemens isoliert Unterprogrammaufrufe auf das lokale Werkstückverzeichnis, es sei denn, es wurde eine EXTERN-Deklaration vorgenommen. Siemens erzwingt eine HMI-Bearbeitungssperre (ab Softwareversion 5), die den NC-Start verhindert, wenn die aufgerufene Datei auf dem Bildschirm geöffnet ist – eine Funktion, die bei Fanuc oder Mitsubishi nativ nicht vorhanden ist.
Programmbeispiele
Fanuc-Unterprogramm-Aufrufbeispiel
; Fanuc-Unterprogramm-Aufrufbeispiel O0001 (HAUPTPROGRAMM) ; G90 G54 G00 X0 Y0 Z10.0 ; Achsen vorpositionieren M98 P1000 L5 ; Unterprogramm O1000 fünfmal aufrufen G00 Z50.0 M30 ; Z zurückziehen und Hauptprogramm beenden
O1000 (UNTERPROGRAMM) ; G91 G01 Z-2.0 F150 ; Auf inkrementell umschalten und Z zustellen G90 G01 X50.0 F300 ; Auf absolut umschalten und auf X50.0 verfahren G91 G01 Z2.0 ; Inkrementeller Z-Rückzug G90 G01 X0 ; Absolute Rückkehr zu X0 M99 ; Rückkehr zum Hauptprogramm
Trockenlauf (dry run)
Beim Testen des Fanuc-Codes in einem Trockenlauf bewegt sich die Maschine zuerst im absoluten Modus auf die Koordinaten X0, Y0 und Z10.0. Sobald der Interpreter den Block M98 P1000 L5 erreicht, pausiert er das Hauptprogramm und springt zum Unterprogramm O1000. In O1000 schaltet die Steuerung auf den inkrementellen Modus (G91) um, um Z um 2,0 mm zuzustellen, und wechselt dann wieder in den absoluten Modus (G90), um den X-Achsen-Vorschub auf 50,0 mm auszuführen. Sie führt einen inkrementellen Rückzug aus, kehrt absolut zu X0 zurück und liest dann M99. Die Steuerung wiederholt diese Schleife fünfmal, bevor sie zum Hauptprogramm zurückkehrt, wo sie Z auf 50,0 mm zurückzieht und über M30 beendet.
Siemens-Unterprogramm-Aufrufbeispiel
; Siemens-Unterprogramm-Aufrufbeispiel
N10 G90 G54 G00 X0 Y0 Z10.0 ; Achsen vorpositionieren
N20 MCALL POCKET_CYCLE(3.0, 150.0) ; Unterprogramm POCKET_CYCLE modal aufrufen
N30 X50.0 Y50.0 ; Unterprogramm an Koordinate 1 ausführen
N40 X100.0 Y50.0 ; Unterprogramm an Koordinate 2 ausführen
N50 MCALL ; Modalen Unterprogrammaufruf abwählen
N60 G00 Z50.0 M30 ; Z zurückziehen und Hauptprogramm beenden
Hinweis: Unten sehen Sie das im Werkstückverzeichnis gespeicherte Unterprogramm POCKET_CYCLE.SPF:
PROC POCKET_CYCLE(REAL DEPTH, REAL FEED) SAVE DISPLOF ;
G91 G01 Z=-DEPTH F=FEED ; Inkrementelles Eintauchen
G90 G01 G41 X0 Y0 ; Werkzeugradiuskorrektur aktivieren
G03 X0 Y0 CR=25.0 ; Kreistasche fräsen
G40 G01 X0 Y0 ; Radiuskorrektur aufheben
G91 G01 Z=DEPTH ; Inkrementeller Rückzug
M17 ; Rückkehr zum Hauptprogramm
Trockenlauf
Das Testen des Siemens-Programms während eines Trockenlaufs zeigt, dass die Maschine zuerst X0, Y0 und Z10.0 anfährt. Der MCALL-Befehl im Block N20 registriert die Routine POCKET_CYCLE modal im NC-Speicher. Auf N20 führt die Maschine das Unterprogramm noch nicht aus, aber beim Lesen des Blocks N30 (X50.0 Y50.0) verfährt sie auf die Koordinate, pausiert und ruft das Unterprogramm auf. Das Unterprogramm läuft mit aktivem SAVE-Attribut, wodurch die modalen Einstellungen des aufrufenden Programms automatisch gespeichert werden. Es schaltet in den inkrementellen Modus um, um Z um 3,0 mm zuzustellen, fräst einen Kreis, zieht Z zurück und liest M17. Die Steuerung stellt automatisch die ursprünglichen modalen Einstellungen wieder her und fährt fort. Sie wiederholt diese Sequenz bei N40 (X100.0 Y50.0), bevor der Block N50 den modalen Zustand aufhebt.
Mitsubishi-Unterprogramm-Aufrufbeispiel
; Mitsubishi-Unterprogramm-Aufrufbeispiel
O0002 (HAUPTPROGRAMM) ;
G90 G54 G00 X0 Y0 Z10.0 ; Achsen vorpositionieren
M98 <POCKET-ROUT.PRG> H200 L3 ,D1 ; Datei POCKET-ROUT.PRG von Gerät 1 ab Block N200 aufrufen
G00 Z50.0 M30 ; Z zurückziehen und Hauptprogramm beenden
Hinweis: Unten sehen Sie das auf der CF-Karte (Gerät 1) gespeicherte Unterprogramm POCKET-ROUT.PRG:
O2000 (UNTERPROGRAMM) ;
N100 G01 Z-5.0 F100 ; Dieser Block wird wegen Startadresse H200 übersprungen
N200 G91 G01 Z-2.0 F120 ; Ausführung beginnt hier; inkrementelle Zustellung
N300 G90 G01 X30.0 Y30.0 F250 ; Absolutes Profil fräsen
N400 G91 G01 Z2.0 ; Inkrementeller Rückzug
N500 G90 G01 X0 Y0 ; Absolute Rückkehr
M99 ; Rückkehr zum Hauptprogramm
Trockenlauf
Während eines Trockenlaufs positioniert die Mitsubishi-Steuerung das Werkzeug bei X0, Y0 und Z10.0 vor. Bei der Ausführung des M98-Befehls prüft die CNC das Gerät 1 (CF-Karte), lokalisiert die Datei <POCKET-ROUT.PRG> und sucht nach dem Satz N200. Der Interpreter überspringt den Satz N100 vollständig und beginnt die inkrementelle Z-Bewegung bei N200. Nach der Ausführung der Profilschnitte kehrt das Werkzeug im absoluten Modus zu X0, Y0 zurück. Beim Lesen von M99 kehrt die Steuerung zum Hauptprogramm zurück und wiederholt diesen Vorgang dreimal, bevor das Programm mit M30 endet.
Fehleranalyse
| Steuerung | Alarmcode | Auslösebedingung | Bedienersymptom | Ursache / Lösung |
|---|---|---|---|---|
| Fanuc | Alarm 0076 | Aufgerufene Programmnummer fehlt im Speicher oder den Suchordnern. | Die Maschine stoppt sofort und zeigt eine Fehlermeldung PROGRAM NOT FOUND. | Überprüfen Sie die Ordnerpfad-Konfigurationen in Parameter 3457 und stellen Sie sicher, dass die Datei mit der O-Nummer im lokalen Speicher vorhanden ist. |
| Fanuc | Alarm 0077 | Schachtelungstiefe überschreitet das zulässige Limit. | Die CNC stoppt mitten im Zyklus und zeigt den Fehler TOO MANY SUB, MACRO NESTING. | Vereinfachen Sie die Programmlogik. Stellen Sie sicher, dass die Aufrufe 4 Ebenen nicht überschreiten (8 inklusive Makroaufrufen). |
| Fanuc | Alarm 1080 | Verschachtelter M198-Aufruf eines externen Geräts innerhalb eines aktiven M198-Unterprogramms ausgeführt. | Ausführung friert ein und zeigt den Fehler DUPLICATE DEVICE SUB PROGRAM CALL. | Vermeiden Sie das Verschachteln von M198-Blöcken. Kopieren Sie sekundäre Routinen in das lokale SRAM. |
| Fanuc | Alarm 1091 | Mehrere Unterprogramm-Aufrufschritte im selben Block programmiert. | Der Interpreter stoppt und gibt den Fehler DUPLICATE SUB-CALL WORD aus. | Isolieren Sie jeden Unterprogrammaufruf in einen eigenen Block. |
| Siemens | Alarm 14011 | Aufgerufenes Unterprogramm fehlt, ist nicht freigegeben oder wird bearbeitet. | Die Steuerung stoppt die Ausführung und zeigt die Meldung „program not existing or will be edited“. | Schließen Sie die Datei auf dem HMI, um die Bearbeitungssperre freizugeben. Überprüfen Sie den Pfad in _N_SPF_DIR. |
| Siemens | Alarm 14012 | Schachtelungstiefe überschritten. | Das System stoppt mit der Meldung „maximum subroutine level exceeded“ und deaktiviert den NC-Start. | Überprüfen Sie den Aufrufbaum. Reduzieren Sie verschachtelte Zyklen oder OEM-Makros wie Turret3_CODE_T. |
| Siemens | Alarm 12720 | ISO-Modus-Makroaufruf ausgeführt, ohne die Programmnummer über P zu definieren. | Die Steuerung weist den Befehl zurück und zeigt den Fehler „program number for macro call missing“. | Geben Sie die Zielprogrammnummer über die Adresse P an. |
| Mitsubishi | Error P230 | Schachtelungsebene überschreitet die Kapazität oder verschachtelte M198-Datenserver-Aufrufe ausgeführt. | Die Steuerung stoppt und zeigt den Fehler „Subprogram nesting over“. | Überprüfen Sie die Schachtelungstiefe. Begrenzen Sie Aufrufe auf 8 (M70V/M700V) oder 10 (M800V/M80V). |
| Mitsubishi | Error P231 | Angegebener Rücksprung-Satz (M99 P) oder Sprungziel fehlt. | Interpreter meldet Fehler und zeigt „No sequence No.“. | Stellen Sie sicher, dass die nach P programmierte Satznummer im Zielprogramm existiert. |
| Mitsubishi | Error P232 | Aufgerufene Datei fehlt, Laufwerk ist nicht gemountet oder Name überschreitet 32 Zeichen. | Die Ausführung stoppt und zeigt den Fehler „No program No.“. | Mounten Sie externe Medien sicher, prüfen Sie die Dateinamen und halten Sie die Zeichenzahl unter 32. |
Anwendungshinweis
Eine unkontrollierte Kollision des Revolvers (turret) oder der Spindel (spindle), die Werkzeuge beschädigt und teure Werkstücke unbrauchbar macht, ist die direkte Folge einer mangelnden Absicherung modaler Positionierungszustände und Schachtelungstiefen. In Siemens-Umgebungen führt das Weglassen des SAVE-Attributs in der PROC-Anweisung dazu, dass eine temporäre inkrementelle Positionierung (G91) unbemerkt in das Hauptprogramm übertragen wird. Kehrt die Steuerung per M17 zurück, arbeitet sie relativ zur letzten Unterprogrammkoordinate weiter. Wird dieser Parameter nicht verifiziert, liegt das Ergebnis außerhalb der Toleranz — und der Fehler zeigt sich erst bei der Endmessung. Auf Fanuc-Steuerungen führt das Versäumnis, die Parameter 0010#4 (PRG9) und 0389#2 (PRG8) zu sperren, dazu, dass Makros für Werkzeugwechsler versehentlich überschrieben werden. Korrekte Konfiguration eliminiert die häufigste Ursache für Maßabweichungen bei diesem Befehl. Um Ausschuss und Toleranzüberschreitungen zuverlässig zu vermeiden, müssen Programmierer Editierrechte für die 8000er- und 9000er-Serien sperren und sicherstellen, dass alle Unterprogramme mit einer expliziten modalen Rückstellung enden.
Verwandte Befehle
G65Einfacher Makroaufruf: Initiiert einen einzelnen, nicht modalen Aufruf eines Unterprogramms und ermöglicht die direkte Übergabe lokaler Variablen an Makroregister.G66Modaler Makroaufruf: Weist den CNC-Interpreter an, ein bestimmtes Makro-Unterprogramm nach jedem folgenden Verfahrsatz automatisch auszuführen, bis es abgebrochen wird.- G645 Toleranzbasierte Konturglättung: Reguliert Konturglättungstoleranzen bei der Hochgeschwindigkeitsbearbeitung, die sorgfältig auf die Vorschübe (feedrate) des Unterprogramms abgestimmt werden müssen, um Sehnenfehler (chordal errors) zu vermeiden.
- G68.2 Bearbeitungsebene schwenken: Definiert geschwenkte Bearbeitungsebenen-Koordinaten für die Mehrachsbearbeitung, was eine korrekte Koordinatenzuordnung vor der Ausführung von Unterprogrammschleifen erfordert.
- Mitsubishi High-Speed Control III (G05 P20000): Aktiviert eine fortschrittliche Look-Ahead-Pfadpufferung für die Mikrosegmentverarbeitung, die in einem separaten Block getrennt von Unterprogrammaufrufen programmiert werden muss, um Befehlskonflikte zu vermeiden.
Fazit
Die Implementierung einer standardisierten Prüfliste für Unterprogramme ist die effektivste Maßnahme, um unerwünschte Maßabweichungen und Schachtelungsalarme zu vermeiden. Programmierer sollten sich angewöhnen, absolute Koordinatenbefehle (G90) sowie Kompensationsaufhebungen (G40, G49) direkt vor dem Rücksprungbefehl (M99 oder M17) einzufügen. Die Isolierung von M198-Aufrufen externer Medien, die Verifizierung hardwareabhängiger Schachtelungstiefen und die Aktivierung von Schreibschutzparametern für Makrobibliotheken sichern die automatisierte Fertigung gegen teure Toleranzüberschreitungen und ungeplante Stillstandszeiten ab.
Häufig gestellte Fragen (FAQ)
Wie wird eine Toleranzüberschreitung durch modale Nullpunktverschiebungen im Unterprogramm verhindert?
Wenn im Unterprogramm temporär auf inkrementelle Maße (G91) oder andere Vorschübe gewechselt wird, müssen diese vor dem Rücksprung zwingend zurückgesetzt werden. Andernfalls verbleibt die Steuerung im geänderten Modus, was zu unbemerkten Abweichungen im Hauptprogramm führt. Praktische Maßnahme: Programmieren Sie unmittelbar vor dem M99- oder M17-Befehl einen dedizierten Sicherheitsblock mit G90 sowie den Aufhebungsbefehlen G40 (Radiuskorrektur) und G49 (Werkzeuglängenkorrektur).
Welcher Parameter verhindert Maßabweichungen durch unbefugte Änderungen an Werkzeugwechselmakros?
Unterprogramme der 8000er- und 9000er-Serien steuern oft kritische Maschinenzyklen wie den Werkzeugwechsler oder Messzyklen. Unbefugtes Ändern dieser Programme führt zu fehlerhaften Werkzeugaufrufen und infolgedessen zu schwerem Ausschuss. Praktische Maßnahme: Sperren Sie den Schreibzugriff auf Fanuc-Steuerungen, indem Sie den Parameter 0010#4 (PRG9) für 9000er-Programme und den Parameter 0389#2 (PRG8) für 8000er-Programme auf den Wert 1 setzen.
Wie wird bei Siemens-Steuerungen sichergestellt, dass modale Parameter nach dem Unterprogramm automatisch zurückgesetzt werden?
Ohne zusätzliche Absicherung bleiben modale G-Befehle über das Unterprogrammende hinaus aktiv, was die nachfolgenden Bahnbewegungen verfälscht. Siemens bietet dafür ein systemspezifisches Attribut, das den Zustand vor dem Unterprogrammaufruf speichert. Praktische Maßnahme: Ergänzen Sie die PROC-Kopfzeile des Unterprogramms um das Attribut SAVE (z. B. PROC MEIN_ZYKLUS SAVE), um alle modalen Frames und G-Funktionen beim Verlassen automatisch auf die Werte des Hauptprogramms zurückzusetzen.
Immer noch nicht gelöst?
Frage unseren KI-Assistenten zu diesem Thema in natürlicher Sprache. Basierend auf verifizierten Quellen, keine Halluzinationen.

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)
Mit über 25 Jahren Erfahrung in allen Bereichen der CNC-Maschinenbranche bin ich weiterhin als Mitgründer von CNC CARE tätig, wo wir markenunabhängige Beratung, Engineering und Original-Ersatzteil-Services anbieten.
Ähnliche Artikel
Weitere Artikel zu diesem Thema
Fanuc 3D-Kollisionsüberwachung einrichten und parametrieren
Richten Sie die Fanuc 3D-Kollisionsüberwachung prozesssicher ein. Lernen Sie Parameter 10930 zu konfigurieren, Alarm PS0492 zu beheben und Crashs zu vermeiden.
Fanuc Custom Macro aktivieren: Parameter 0932 & 8135 einrichten
Erfahren Sie, wie Sie die Fanuc Custom Macro Parameter 0932 und 8135 einrichten, Variablenregister erweitern und Alarm 123 für prozesssichere CNC-Abläufe beheben.
Fanuc Standzeitüberwachung Parameter: G10 L3 Konfiguration
Anleitung zur Fanuc Standzeitüberwachung: Konfigurieren Sie Parameter 6800 und 6810 richtig. Vermeiden Sie Crash-Alarme 156 und 159 für prozesssichere CNC-Zyklen.
Fanuc Rigid Tapping: Parameter für optimale Beschleunigung einstellen
Lernen Sie die Konfiguration der optimalen Fanuc Rigid Tapping Beschleunigung. Vermeiden Sie Ausschuss durch Tuning von Parameter 11420#0 und Beheben von SP0741.