Skip to main content
CNC.wiki

Verschachtelte Unterprogramme auf Fanuc, Siemens und Mitsubishi

Lernen Sie verschachtelte Unterprogramme auf Fanuc, Siemens und Mitsubishi zu programmieren. Vermeiden Sie Kollisionen durch korrekte Parameter-Konfiguration.

Hakan Gündoğdu
Hakan Gündoğdu

CNC CARE Mitgründer

Einleitung

Eine unkontrollierte Nullpunktverschiebung, die den Werkzeugrevolver (turret) im Eilgang direkt in das Spannfutter (chuck), die Spannbacke (vise jaw) oder eine Spannpratze (clamp) rammt, ist die unmittelbare physische Folge fehlerhafter modaler Zustände in verschachtelten CNC-Unterprogrammen. Wenn ein Unterprogramm auf inkrementelle Positionierung (G91) umschaltet, Koordinaten verschiebt oder Vorschübe ändert, diese aber vor dem Rücksprung (M99 oder M17) nicht auf den absoluten Ausgangszustand des Hauptprogramms zurücksetzt, verfährt die Maschine auf völlig falschen Bahnen. Für den Programmierer und Bediener bedeutet das im besten Fall Maßabweichungen und Toleranzüberschreitung, im schlimmsten Fall jedoch kapitalen Ausschuss und teuren Maschinenstillstand. Die Absicherung der Prozesssicherheit erfordert eine präzise Konfiguration der Hardwareparameter, die Einhaltung steuerungsspezifischer Schachtelungsgrenzen sowie die gezielte Koordination modal wirksamer G-Befehle auf Fanuc-, Siemens- und Mitsubishi-Steuerungen.

Technische Übersicht

Technische SpezifikationDetails
BefehlscodesFanuc: M98, M198, M99
Siemens: Alphanumerischer Name, PROC, M17, RET
Mitsubishi: M98, M198, M99
Modale Gruppe / ModalitätUnterprogramm-Aufruf- und Rückkehrsteuerung / Modal-Code
Abgedeckte MarkenFanuc, Siemens, Mitsubishi
Kritische ParameterFanuc: 3457 (Suchpfad), 0010#4 (PRG9)
Siemens: SAVE-Attribut, VAR-Schlüsselwort
Mitsubishi: #8876 (M198-Gerät), #8129 (Suchpriorität)
HauptbeschränkungSchachtelungstiefe: Max. 4 Ebenen (Fanuc), Max. 8/16 Ebenen (Siemens), Max. 8/10 Ebenen (Mitsubishi). Keine verschachtelten externen M198/EXTCALL-Aufrufe.

Schnellleser

  • Wiederherstellung des modalen Zustands: Stellen Sie absolute Koordinaten (G90) explizit wieder her und heben Sie Kompensationen unmittelbar vor dem Rücksprungblock des Unterprogramms auf, um ein Übertragen von Koordinaten (coordinate bleeding) zu verhindern.
  • Schachtelungsgrenzen: Halten Sie verschachtelte Aufrufe innerhalb der strengen hardwaredefinierten Tiefengrenzen von 4 Ebenen für Fanuc, 8 bis 16 für Siemens und 8 bis 10 für Mitsubishi.
  • Unterprogramm-Parametersperre: Sperren Sie die Bearbeitungsrechte für die Makro-Serien O8000 und O9000 auf Fanuc, indem Sie die Parameter 0389#2 (PRG8) und 0010#4 (PRG9) auf 1 setzen.
  • Aufrufe externer Medien: Führen Sie größere Dateien direkt von Speicherkarten oder Datenservern mit M198 (Fanuc/Mitsubishi) oder EXTCALL (Siemens) aus, um interne Speicherbegrenzungen zu umgehen.
  • Direktes Speicher-Routing: Routen Sie Mitsubishi-Unterprogramme im Aufrufblock über die lokale ,D-Adresse (0 bis 4) zu bestimmten physischen Speichermedien.
  • Automatisches modales Speichern: Deklarieren Sie das SAVE-Attribut in Siemens PROC-Kopfzeilen, um Koordinaten-Frames und modale G-Codes automatisch zu speichern und wiederherzustellen.

Grundlegende Konzepte

Der praktische Programmiereffekt verschachtelter Unterprogramme ist die Fähigkeit, komplexe, sich wiederholende Werkzeugwege durch Ineinanderstapeln von Unterprogrammen stark zu komprimieren, was den Speicherverbrauch drastisch reduziert und Bearbeitungen für Merkmale wie Lochrasterbilder oder Schruppdurchgänge vereinfacht. Anstatt identische geometrische Blöcke im Hauptprogramm zu wiederholen, können Entwickler diese Routinen einmal als eigenständige Dateien schreiben und sie nacheinander aufrufen. Diese modulare Struktur hält die Programmgrößen klein und ermöglicht es Programmierern, bestimmte Bearbeitungsabschnitte zu aktualisieren, ohne das gesamte Hauptprogramm bearbeiten zu müssen. Wenn Sie neu bei Unterprogrammen sind, lesen Sie unseren Leitfaden zum Schreiben und Aufrufen von Unterprogrammen, um die Grundlagen zu verstehen.

Die Steuerungsmarken unterscheiden sich darin, wie sie diese Unterprogramme lokalisieren, aufrufen und ausführen. Ältere Plattformen erfordern strenge numerische O-Nummern-Namenskonventionen, während moderne Steuerungen beschreibende alphanumerische Namen zulassen. Unterprogramme können auch modal über verschiedene Koordinaten hinweg ausgeführt oder dynamisch von externen Hardwareschnittstellen 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 Ebenen hinweg, was strenge Programmierpraktiken erfordert, um ein Übertragen von Koordinaten (coordinate bleeding) zu vermeiden. Für verwandte Zyklustechniken können Sie auf den G83 Tiefbohrzyklus und den G84/G74 Gewindebohrzyklus verweisen.

Befehlsstruktur

Die Syntax und Struktur eines verschachtelten Unterprogrammaufrufs erfordern, dass der Interpreter der Steuerung den Namen oder die Nummer des Zielprogramms, den Startblock und die Anzahl der Wiederholungen parst. In traditionellen Umgebungen leitet der Befehl M98 einen Sprung ein und leitet die Ausführung an das im CNC-Speicher abgelegte Unterprogramm weiter. Sobald der Interpreter das Unterprogramm desynchronisiert liest, führt er die Blöcke nacheinander aus. Nach Erreichen des Endes des Unterprogramms leitet ein Rücksprungblock den Ausführungszeiger zurück zum aufrufenden Programm. Wenn Wiederholungen angegeben sind, durchläuft der Interpreter das Unterprogramm die befohlene Anzahl von Zyklen, bevor er den Ablauf des Hauptprogramms fortsetzt.

Siemens-Steuerungen implementieren ein hochentwickeltes, alphanumerisches Benennungssystem, bei dem Unterprogramme direkt über ihre Dateinamen aufgerufen werden. Anstatt sich auf starre O-Nummern zu verlassen, können Siemens-Unterprogramme Parameter akzeptieren, die als Wert (call-by-value) oder Referenz (call-by-reference) übergeben werden und in einer PROC-Kopfzeile deklariert sind. Die Rückkehr aus einem Siemens-Unterprogramm wird mit M17 oder RET abgeschlossen. Im Gegensatz dazu nutzen Fanuc und Mitsubishi ältere Registerarchitekturen, die Makrooptionen zur Wertübertragung erfordern oder Programmierer zwingen, sich auf flüchtige gemeinsame oder globale Variablen zu verlassen. Die Parameter und Syntaxadressen steuern, 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ücksprung: M99 ;
  • Siemens-Definition: PROC <program name> (<ParamType> <ParamName>, VAR <ParamType> <ParamName>) [SAVE]
  • Siemens-Aufruf: <program name> (<Param1>, <Param2>) oder MCALL <program name>
  • Siemens-Rücksprung: M17 oder RET
  • Mitsubishi-Standardaufruf: M98 P__ H__ L__ ,D__ ; oder M98 <file name> H__ L__ ,D__ ;
  • Mitsubishi-externer Aufruf: M198 P__ L__ ; oder M198 <file name> L__ ;
  • Mitsubishi-Rücksprung: M99 P__ ;
Parameter / AdresseSteuerungsmarkeBeschreibungWertebereich / Einstellungen
PFanuc / MitsubishiProgrammnummern-Identifikator des aufzurufenden Unterprogramms.Bis zu 8 Ziffern
LFanuc / MitsubishiAnzahl der wiederholten Ausführungen für das Unterprogramm.1 bis 9999
HMitsubishiStart-Satznummer (N-Nummer) innerhalb des aufgerufenen Unterprogramms.Gültige N-Nummer
,DMitsubishiExplizite Gerätenummer-Routung zur Dateisuche.0 bis 4
<file name>MitsubishiDirekter alphanumerischer Namensaufruf des Unterprogrammfiles.Bis zu 32 Zeichen
PROC-ParametertypenSiemensVom Unterprogramm akzeptierte Datentypen (z. B. REAL, INT, CHAR, BOOL).Standardvariablentypen
VARSiemensSchlüsselwort zur Deklaration, dass ein Parameter als Referenz übergeben wird.Schlüsselwort
SAVESiemensAttribut zum automatischen Speichern und Wiederherstellen aktiver modaler Einstellungen und Frames.Attribut-Flag

Markenanwendungen

Fanuc-CNC-Integration

Die verschachtelte Unterprogrammumgebung von Fanuc verwendet parametergesteuerte Mechanismen zur Verwaltung von Zugriff und Sicherheit. In diesem System schränkt Parameter 0010#4 (PRG9) den Zugriff auf die Makroprogramme der 9000er-Serie ein, während Parameter 0389#2 (PRG8) dieselbe Funktion für die Programme der 8000er-Serie erfüllt.

Um ein standardmäßiges verschachteltes Unterprogramm aufzurufen, programmieren Programmierer einen M98-Block, der die Programmnummer und Schleifen angibt, wie zum Beispiel: M98 P1000 L5 ;. Externe Routinen werden gestreamt über: M198 P50 ;, während Unterprogramme beendet werden mit: M99 ;.

TypName / CodeBeschreibung und Einstellungen
Parameter0010#4 (PRG9)Verbietet die Bearbeitung der Unterprogramme 09000 bis 09999, wenn auf 1 gesetzt (nicht verboten bei 0).
Parameter0389#2 (PRG8)Verbietet die Bearbeitung der Unterprogramme 08000 bis 08999, wenn auf 1 gesetzt (nicht verboten bei 0).
Parameter3404#2 (SBP)Gibt an, ob sich die Adresse P in M198 auf die Dateinummer (0) oder die Programmnummer (1) bezieht.
Parameter6005#0 (SQC)Bestimmt, ob ein Unterprogramm-Satznummernaufruf nicht verwendet (0) oder verwendet (1) wird.
Parameter3457Konfiguriert den Suchpfad der Ordnerhierarchie (LIB-, MC1/MC2-, SYS-Ordner) zum Auffinden von Dateien.
Alarm0077TOO MANY SUB, MACRO NESTING: Schachtelungstiefe überschritten oder verschachtelter M198-Aufruf.
Alarm1080DUPLICATE DEVICE SUB PROGRAM CALL: Verschachtelter M198-Aufruf innerhalb eines aktiven M198-Programms.
Alarm1091DUPLICATE SUB-CALL WORD: Mehrere Aufruf-Wörter im selben Block gefunden.
Alarm0076PROGRAM NOT FOUND: Aufgerufene Unterprogrammnummer weder im Speicher noch in den Suchpfaden gefunden.
Version0001#1 (FCV)Legacy-Lochstreifenkompatibilität. Die Einstellung 1 parst den P-Code, um Wiederholungsanzahl und Programmnummer zusammenzuführen.

Warnung: Wird die modale inkrementelle Positionierung vor dem M99-Befehl nicht auf die absolute Positionierung zurückgesetzt, führt dies zu einer Nullpunktverschiebung und somit zu harten Kollisionen.

Siemens-SINUMERIK-Integration

Siemens SINUMERIK-Systeme verwenden keine numerischen O-Nummern, sondern rufen Unterprogramme direkt über ihre alphanumerischen Namen auf. Programmparameter können an diese Unterprogramme mit dem PROC-Befehl in der Deklaration übergeben werden.

Um ein Unterprogramm namentlich aufzurufen, verwenden Sie: SUB_NAME(Parameter). Der Rücksprungblock wird als M17 oder RET geschrieben, wobei RET Mehrfachsprünge ermöglicht wie: RET("N200", 2) ;.

TypName / CodeBeschreibung und Einstellungen
ParameterPROC-ParametertypenVom Unterprogramm akzeptierte formale Parameter-Datentypen (z. B. REAL, INT, CHAR, BOOL).
ParameterVARSchlüsselwort zur Deklaration, dass formale Parameter per Referenz statt per Wert übergeben werden.
ParameterSAVEAttribut, das beim Rücksprung automatisch modale G-Codes und Koordinaten-Frames speichert und wiederherstellt.
Alarm14012Maximale Unterprogrammebene überschritten: Schachtelungstiefe überschritten (8 Ebenen für 808D, 16 Ebenen für 840D/828D).
Alarm14011Programm nicht vorhanden oder wird editiert: Unterprogramm-Datei fehlt oder ist aktuell im HMI-Editor geöffnet.
Alarm14013Anzahl der Unterprogrammdurchläufe ungültig: Wiederholungszähler des Unterprogramms ungültig oder außerhalb des Bereichs.
Version808D vs 828D/840D slSINUMERIK 808D beschränkt die Schachtelung auf 8 Ebenen, während 828D und 840D sl bis zu 16 Ebenen unterstützen.

Warnung: Der Aufruf einer aktiven Unterprogrammdatei, die aktuell im HMI editiert wird, löst sofort den Alarm 14011 aus und stoppt die Maschine.

Mitsubishi-CNC-Integration

Mitsubishi-Steuerungen unterstützen direktes physisches Speicher-Routing innerhalb des Aufrufblocks. Programmierer konfigurieren die Speicherziele über die Parameter #8876 und #8880, um Gerätedestinationen der lokalen ,D-Adresse zuzuweisen.

Um ein Unterprogramm vom Kartenleser unter Verwendung der Start-Satznummer N100 aufzurufen, programmieren Sie: M98 <ROUGH-CUT.PRG> H100 ,D1 ;. Die Rückkehr zum aufrufenden Programm wird mit M99 ; abgeschlossen.

TypName / CodeBeschreibung und Einstellungen
Parameter#8876Speichergerätekonfiguration für externe M198-Unterprogrammaufrufe (G=HD, R=M-Card, D=Server, N=USB).
Parameter#8880 bis #8884Ordnet Gerätedestinationen den Adressen ,D0 bis ,D4 zu (M=Memory, E=Memory 2, G=HD, R=M-Card, D=Server).
Parameter#8129Unterprogramm-Suchpriorität (0=programmierte Programmnummer, 1=4-stellige O-Nummer, 2=8-stellige O-Nummer).
AlarmP230Unterprogramm-Schachtelung überlaufen: Schachtelungstiefe überschritten oder M198-Aufruf innerhalb eines Datenserver-Programms.
AlarmP231Keine Satznummer: Die Satznummer für das Rücksprungziel (M99 P) wurde im aufrufenden Programm nicht gefunden.
AlarmP232Keine Programmnummer: Die programmierte Programmnummer oder der Dateiname in spitzen Klammern wurde auf dem angegebenen Gerät nicht gefunden.
VersionM70V vs M80VDie M70V/M700V-Serie unterstützt Schachtelung bis zu 8 Ebenen tief, während moderne M80V/M800V bis zu 10 Ebenen unterstützen.
VersionM800VW vs M800VSWenn Parameter #8876 leer ist, wechselt M800VW/M80VW standardmäßig auf den Datenserver, während M800VS/M80V standardmäßig die frontseitige SD-Karte wählt.

Warnung: Die Unterbrechung der Verbindung zum externen Speichermedium während der Ausführung löst den Alarm P232 aus und verursacht einen gefährlichen Not-Aus mitten im Zyklus.

Markenvergleich

VergleichsthemaFanucSiemensMitsubishi
Unterprogramm-AufrufcodeM98 (Intern), M198 (Extern)Alphanumerischer Programmname oder CALL / PCALL / MCALLM98 (Intern/Extern), M198 (Extern)
RückkehrbefehlM99M17 oder RETM99
Alphanumerische Namen— (keine Quelle)Ja (direkte Namenszuweisung)Ja (unter Verwendung der Syntax <filename>)
Max. Schachtelungstiefe4 Ebenen (8 mit Makros)8 Ebenen (808D), 16 Ebenen (840D sl / 828D)8 Ebenen (M70V), 10 Ebenen (M80V)
Parameterübergabe— (keine Quelle)Ja (lokale, in PROC deklarierte Parameter)— (keine Quelle)
Speichermedium-Auswahl im AufrufGlobaler Suchordner-Parameter (3457)Pfadsuche / SpeicherJa (über ,D-Geräteadresse im Satz)
Modaler Erhalt bei RückkehrManuelle WiederherstellungAutomatisch (über SAVE-Attribut bei PROC)Manuelle Wiederherstellung

Technische Analyse

Eine analytische Betrachtung dieser drei CNC-Architekturen offenbart unterschiedliche Ansätze zur Unterprogrammausführung, zum Gültigkeitsbereich des Speichers (memory scoping) und zum Parametertransfer. Siemens modelliert seine Ausführung nach dem Vorbild von 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 übergeordnete Programm zurückgeben können. Fanuc und Mitsubishi nutzen ältere Registerarchitekturen, die Makrooptionen wie G65 oder G66 zur Wertübertragung erfordern oder Programmierer zwingen, sich auf flüchtige gemeinsame oder globale Variablen zu verlassen, was das Risiko einer Verfälschung modaler Daten birgt.

Die Schachtelungshierarchien spiegeln ebenfalls unterschiedliche Hardwarephilosophien wider. Die 4-Ebenen-Schachtelungsgrenze von Fanuc erfordert, dass Programmierer vereinfachte, flache Aufrufstrukturen beibehalten. Siemens bietet bis zu 16 Schachtelungsebenen. Da diese Ebenen jedoch dynamisch zwischen Benutzer-Unterprogrammen, Standard-Festzyklen und OEM-Hintergrundroutinen des Herstellers (wie Spindeldrehzahlbegrenzungen oder Revolversteuerungsmakros) geteilt werden, kann dieses Budget schnell erschöpft sein. Mitsubishi nimmt eine Mittelstellung ein und bietet 8 Ebenen bei der älteren M70V-Serie und 10 Ebenen bei neuartigen M80V-Steuerungen. Das Überschreiten dieser Grenzen führt auf jeder Steuerung zum sofortigen Abbruch der Ausführung, was die Notwendigkeit unterstreicht, die Aufruftiefe über alle aktiven Systeme hinweg genau zu verfolgen.

Verzeichnisrouting und Sicherheitskontrollen unterscheiden diese Plattformen. Fanuc nutzt den Parameter 3457 zur Durchsuchung einer starren, automatisierten Ordnerhierarchie, während Mitsubishi ein direktes physisches Routing über die ,D-Adresse oder Dateinamen in spitzen Klammern wie <PART.PRG> erlaubt. Siemens isoliert Unterprogrammaufrufe auf das lokale Werkstückverzeichnis, es sei denn, es wird eine EXTERN-Deklaration vorgenommen. Siemens erzwingt eine HMI-Bearbeitungs-Sicherheitsverriegelung (ab Version 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

Verschachteltes Unterprogramm-Beispiel für Fanuc

Dieses Beispiel demonstriert ein Hauptprogramm (O0001), das ein verschachteltes Unterprogramm (O1000) fünfmal aufruft, um wiederholte, koordinatenverschobene Schnitte auszuführen.

O0001 (MAIN PROGRAM) ;
G90 G54 G00 X0 Y0 Z10.0 ; Achsen auf Werkstück-Absolutnull vorpositionieren
M98 P1000 L5 ; Unterprogramm O1000 fünfmal nacheinander aufrufen
G00 Z50.0 M30 ; Z-Achse zurückziehen und Hauptprogramm beenden ;

O1000 (SUBPROGRAM) ; G91 G01 Z-2.0 F150 ; Auf inkrementellen Modus umschalten, Z-Achse um 2.0 mm zustellen G90 G01 X50.0 F300 ; Zurück auf absolute Positionierung schalten, X-Achse auf 50.0 mm verfahren G91 G01 Z2.0 ; Inkrementeller Z-Achsen-Rückzug um 2.0 mm G90 G01 X0 ; Absolute X-Rückkehr auf Null M99 ; Steuerung an das Hauptprogramm zurückgeben

Trockenlauf (dry run)

Während eines Trockenlaufs bewegt die Fanuc-Steuerung die Maschinenachsen im absoluten Positionierungsmodus auf X0, Y0 und Z10.0. Beim Lesen von M98 P1000 L5 springt sie zum Unterprogramm O1000. In O1000 schaltet die Steuerung in den inkrementellen Modus (G91), um Z um 2,0 mm zuzustellen, und wechselt dann wieder in den absoluten Modus (G90), um auf X50.0 zu verfahren. Nach einem inkrementellen Rückzug von Z um 2,0 mm kehrt das Werkzeug im absoluten Modus zu X0 zurück. Die Steuerung führt diese gesamte Unterprogrammschleife insgesamt fünfmal aus, was zu einer inkrementellen Gesamttiefe in Z von 10,0 mm führt. Anschließend kehrt sie zum Hauptprogramm zurück, zieht sich auf Z50.0 zurück und beendet das Programm über M30.

Alphanumerisches Unterprogramm-Beispiel für Siemens

Dieses Programm nutzt alphanumerische Siemens-Aufrufkonventionen mit Parameterübergabe in einer PROC-Kopfzeile und schützt das Koordinatensystem automatisch über das SAVE-Attribut.

; Main Program (MAIN_PROG.MPF)
N10 G90 G54 G00 X0 Y0 Z10.0 ; Werkzeug auf Absolutnull vorpositionieren
N20 MCALL CUT_POCKET(3.0, 150.0) ; Unterprogramm CUT_POCKET modal registrieren
N30 X50.0 Y50.0 ; Unterprogramm an Koordinate 1 automatisch ausführen
N40 X100.0 Y50.0 ; Unterprogramm an Koordinate 2 automatisch ausführen
N50 MCALL ; Modalen Unterprogrammaufruf abwählen
N60 G00 Z50.0 M30 ; Z zurückziehen und Hauptprogramm beenden ;

; Subprogram CUT_POCKET.SPF (gespeichert im SPF-Verzeichnis) PROC CUT_POCKET(REAL DEPTH, REAL FEED) SAVE DISPLOF ; G91 G01 Z=-DEPTH F=FEED ; Inkrementelle Zustellung basierend auf DEPTH-Parameter G90 G01 G41 X0 Y0 ; Absolute Positionierung mit aktiver Werkzeugradiuskorrektur G03 X0 Y0 CR=25.0 ; Kreistaschenprofil interpolieren G40 G01 X0 Y0 ; Werkzeugradiuskorrektur aufheben G91 G01 Z=DEPTH ; Inkrementeller Rückzug der Z-Achse M17 ; Unterprogramm beenden und Steuerung zurückgeben

Trockenlauf

In einem Trockenlauf des Siemens-Programms führt die Steuerung zuerst die absolute Positionierung auf X0, Y0 und Z10.0 aus. Der MCALL-Befehl im Block N20 registriert CUT_POCKET als modales Unterprogramm. Das Anfahren von N30 (X50.0 Y50.0) positioniert die Achsen, pausiert und ruft das Unterprogramm mit den Parameterwerten 3.0 und 150.0 auf. Das Unterprogramm beginnt die Ausführung unter dem SAVE-Attribut, welches den aktiven absoluten Zustand des übergeordneten Programms erfasst. Es führt den Taschenschnitt mit inkrementellen Bewegungen aus, zieht sich zurück und kehrt über M17 zurück. Die Steuerung stellt automatisch den absoluten G90-Zustand wieder her und fährt mit N40 (X100.0 Y50.0) fort, um den Vorgang zu wiederholen. Schließlich wählt Block N50 den modalen Routineaufruf ab, bevor Z auf 50.0 mm zurückzieht und mit M30 endet.

Alphanumerisches Unterprogramm-Beispiel für Mitsubishi

Dieses Programm zeigt die Fähigkeit von Mitsubishi, einen alphanumerischen Dateinamen von einem bestimmten Speichermedium unter Verwendung der Parameteradresse ,D aufzurufen.

O0002 (HAUPTPROGRAMM) ;
G90 G54 G00 X0 Y0 Z10.0 ; Werkzeug auf Werkstück-Absolutnull vorpositionieren
M98 <ROUGH-CUT.PRG> H200 L3 ,D1 ; Rufen Sie die Datei ROUGH-CUT.PRG von Gerät 1 ab Satznummer N200 auf
G00 Z50.0 M30 ; Zurückziehen und Hauptprogramm beenden ;

; ROUGH-CUT.PRG (gespeichert auf CF-Karte - Gerät 1) O2000 (SUBPROGRAM) ; N100 G01 Z-5.0 F100 ; Dieser Block wird aufgrund des Satzsuchblocks H200 umgangen N200 G91 G01 Z-2.0 F120 ; Ausführung der Unterroutine beginnt hier; inkrementeller Vorschub N300 G90 G01 X30.0 Y30.0 F250 ; Absoluter Bahnprofilschnitt N400 G91 G01 Z2.0 ; Inkrementeller Z-Rückzug um 2.0 mm N500 G90 G01 X0 Y0 ; Return to absolute X0 Y0 position M99 ; Steuerung an das Hauptprogramm zurückgeben

Trockenlauf

Während eines Trockenlaufs auf dem Mitsubishi-System wird das Werkzeug auf X0, Y0 und Z10.0 vorpositioniert. Bei der Ausführung des M98-Blocks greift die Steuerung auf Gerät 1 (die CF-Karte) zu, um die Datei ROUGH-CUT.PRG zu öffnen. Sie sucht im Unterprogramm nach dem Block N200, wie durch die Adresse H200 angegeben. Block N100 wird vollständig übersprungen. Die Ausführung beginnt bei N200 mit einer inkrementellen Z-Bewegung, gefolgt von absoluten Profilschnitten. Das Werkzeug zieht sich dann zurück, kehrt zu absoluten Koordinaten zurück und stößt auf den M99-Block. Die Steuerung wiederholt diese Schleife dreimal, bevor sie zum Hauptprogramm zurückkehrt, um Z zurückzuziehen und über M30 zu beenden.

Fehleranalyse

SteuerungAlarmcodeAuslösebedingungBedienersymptomUrsache / Behebung
Fanuc0076Aufgerufene Programmnummer nicht im Speicher oder in den Suchordnern gefunden.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 Speicher registriert ist.
Fanuc0077Schachtelungstiefe von Unterprogrammen oder Makros überschreitet das maximal zulässige Limit.Die CNC stoppt mitten im Zyklus und zeigt den Fehler "TOO MANY SUB, MACRO NESTING".Stellen Sie sicher, dass die Schachtelungstiefe 4 Ebenen nicht überschreitet (8 Ebenen inklusive Makroaufrufen).
Fanuc1080Verschachtelter M198-Aufruf eines externen Geräts innerhalb eines aktiven M198-Unterprogramms ausgeführt.Die Steuerung friert die Ausführung ein und zeigt den Fehler "DUPLICATE DEVICE SUB PROGRAM CALL".Vermeiden Sie verschachtelte M198-Aufrufe. Übertragen Sie sekundäre Routinen in das interne SRAM.
Fanuc1091Mehr als ein Unterprogramm-Aufrufbefehl im exakt selben Block angegeben.Der Interpreter stoppt und gibt den Fehler "DUPLICATE SUB-CALL WORD" aus.Isolieren Sie jeden Unterprogrammaufruf in einen eigenen Block.
Siemens14011Aufgerufenes Unterprogramm fehlt, ist nicht freigegeben oder zur Bearbeitung geöffnet.Die Steuerung bricht die Ausführung ab und zeigt die Meldung "program not existing or will be edited".Schließen Sie die Datei im HMI, um die Bearbeitungssperre aufzuheben. Überprüfen Sie den Pfad in _N_SPF_DIR.
Siemens14012Grenzwert der Schachtelungstiefe für Programmebenen ist überschritten.Das System stoppt mit der Meldung "maximum subroutine level exceeded".Überprüfen Sie die Schachtelungsebenen. Feste Zyklen von Siemens verbrauchen bis zu 3 Ebenen; strukturieren Sie Aufrufe auf Ebene 12 oder höher.
Siemens14013Anzahl der Unterprogrammdurchläufe ungültig: Wiederholungsanzahl ungültig oder außerhalb des Bereichs.Die Steuerung weist die Ausführung zurück und zeigt "Number of subroutine passes invalid".Überprüfen und korrigieren Sie den Wert der Wiederholungsanzahl im Unterprogrammaufruf.
MitsubishiP230Unterprogramm-Schachtelungstiefe überschritten oder M198-Aufruf innerhalb eines Datenserver-Programms.Die Steuerung stoppt und zeigt den Fehler "Subprogram nesting over".Stellen Sie sicher, dass die Schachtelungstiefe 8 Ebenen (M70V) oder 10 Ebenen (M80V) nicht überschreitet. Restrukturieren Sie M198-Aufrufe.
MitsubishiP231Die als Rücksprungziel angegebene Satznummer kann im aufrufenden Programm nicht gefunden werden.Der Interpreter bricht ab und zeigt den Fehler "No sequence No.".Stellen Sie sicher, dass die nach P programmierte Satznummer im M99-Block des aufrufenden Programms existiert.
MitsubishiP232Die angegebene Programmnummer oder der Dateiname wurde auf dem bezeichneten Gerät nicht gefunden.Die Ausführung stoppt und zeigt den Fehler "No program No.".Überprüfen Sie die Geräteverbindung, die Parameterzuordnung der Adressen und halten Sie die Namenslänge unter 32 Zeichen.

Anwendungshinweis

Ein verheerender Werkzeugbruch und teurer Ausschuss an komplexen Bauteilen sind die direkten Folgen, wenn Schachtelungsgrenzen überschritten oder kritische Makro-Unterprogramme manipuliert werden. Bei Fanuc-Steuerungen ist es für die Prozesssicherheit unerlässlich, die Editierrechte für die 8000er- und 9000er-Makroprogramme über die Parameter 0389#2 (PRG8) und 0010#4 (PRG9) auf 1 zu setzen, da unbefugte Änderungen an Tool-Change- oder Messzyklen zu verheerenden Achskollisionen führen. In Siemens-Umgebungen führt das Versäumnis, das Attribut SAVE in der PROC-Kopfzeile zu deklarieren, zu unbemerkten Schleppfehlern, da modale G-Befehle ungeschützt in das Hauptprogramm zurückfließen. Wird dieser Parameter nicht verifiziert, liegt das Ergebnis außerhalb der Toleranz — und der Fehler zeigt sich erst bei der Endmessung. Zudem blockiert das Aufrufen einer auf dem HMI geöffneten Datei die Ausführung sofort mit Alarm 14011. Auf Mitsubishi-Steuerungen müssen Programmierer die Schnittstelle über Parameter #8876 absichern, da eine fehlerhafte Ansteuerung von externen Speichermedien den gefürchteten Fehler P232 auslöst. Korrekte Konfiguration eliminiert die häufigste Ursache für Maßabweichungen bei diesem Befehl und stellt sicher, dass automatisierte Fertigungsprozesse ohne ungeplante Ausfallzeiten ablaufen.

Verwandte Befehle

  • Schreiben und Aufrufen von Unterprogrammen: Etabliert die grundlegende Logik der Unterprogrammorganisation und zeigt den Übergang von Einzelprogrammen zu modularen Aufrufen.
  • G83 Tiefbohrzyklus: Ruft einen Tiefbohrzyklus auf, der in benutzerdefinierten Unterprogrammen verschachtelt werden kann, um Lochrasterbilder zu bearbeiten.
  • G84/G74 Gewindebohrzyklus: Ruft einen Gewindebohrzyklus innerhalb verschachtelter Unterprogramme auf, um Innengewinde an mehreren Koordinatenpositionen automatisch zu fertigen.
  • G65 Einfacher Makroaufruf: Führt ein Makroprogramm für einen einzelnen Block aus und übergibt lokale Variablen an Makroregister, ähnlich wie ein Unterprogrammaufruf, jedoch mit Parameterunterstützung.
  • G66 Modaler Makroaufruf: Weist die Steuerung an, ein Makro-Unterprogramm nach jedem folgenden Verfahrsatz modalerweise auszuführen, bis es abgewählt wird.

Fazit

Für eine prozesssichere Ausführung von verschachtelten CNC-Unterprogrammen müssen Programmierer eine lückenlose Sicherheitsprüfung etablieren. Das Einfügen von modalen Rücksetzbefehlen (G90) sowie das Aufheben von Längen- und Radiuskorrekturen (G40, G49) unmittelbar vor jedem M99- oder M17-Block verhindert unerwünschte Koordinatenverschiebungen. Die gezielte Aktivierung von Schreibschutzparametern für Makrobibliotheken sichert die Maschineneinstellungen gegen Bedienfehler ab. Korrekte Konfiguration eliminiert die häufigste Ursache für Maßabweichungen bei diesem Befehl. Werden diese Maßnahmen strikt umgesetzt, lassen sich Toleranzüberschreitung und teurer Ausschuss in der Serienfertigung zuverlässig ausschließen.

Häufig gestellte Fragen (FAQ)

Wie wird eine Toleranzüberschreitung durch unbemerkt aktive inkrementelle Befehle aus dem Unterprogramm verhindert?

Wenn ein verschachteltes Unterprogramm temporär auf G91 umschaltet, bleibt dieser Zustand nach der Rückkehr ins Hauptprogramm aktiv, falls er nicht zurückgesetzt wird. Das führt zu fehlerhaften Bahnbewegungen und Maßabweichungen beim nächsten Werkzeugweg. Praktische Maßnahme: Fügen Sie direkt vor dem M99- oder M17-Befehl einen dedizierten Sicherheitsblock mit G90 ein.

Warum ist die Freigabe des HMI-Editierblocks bei Siemens-Steuerungen kritisch für die Prozesssicherheit?

Ein Unterprogramm, das auf dem Bedienpult zur Bearbeitung geöffnet ist, wird von der SINUMERIK-Steuerung für die Programmausführung gesperrt und löst sofort den Alarm 14011 aus. Dies unterbricht laufende Produktionszyklen und gefährdet die zeitliche Taktung automatisierter Linien. Praktische Maßnahme: Schließen Sie den Editor auf dem Bedienfeld und prüfen Sie den Freigabestatus der Datei im Verzeichnis _N_SPF_DIR vor dem NC-Start.

Wie wird bei Mitsubishi-Steuerungen verhindert, dass Verbindungsprobleme mit externen Medien zum Programmabbruch führen?

Bei Verwendung von M198-Aufrufen greift die Steuerung kontinuierlich auf die CF-Karte oder das Netzwerklaufwerk zu. Vibrationsbedingte Wackelkontakte unterbrechen diesen Zugriff und lösen den Fehler P232 aus, was zu einem plötzlichen Stopp mitten im Schnitt führt. Praktische Maßnahme: Verwenden Sie für vibrationsintensive Schruppbearbeitungen ausschließlich das interne CNC-SRAM und reservieren Sie externe Medien für unkritische Schlichtzyklen.

Immer noch nicht gelöst?

Frage unseren KI-Assistenten zu diesem Thema in natürlicher Sprache. Basierend auf verifizierten Quellen, keine Halluzinationen.

KI-Assistent fragen
Hakan Gündoğdu
Hakan Gündoğdu
  • 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