Skip to main content
CNC.wiki

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.

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

CNC CARE Mitgründer

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 SpezifikationDetails
BefehlscodesFanuc: M98, M99, M198
Siemens: L<number>, <program name>, MCALL, EXTCALL, M17, RET
Mitsubishi: M98, M99, M198
Modale Gruppe / ModalitätUnterprogramm-Aufruf- und Rückkehrbefehle
Abgedeckte MarkenFanuc, Siemens, Mitsubishi
Kritische ParameterFanuc: 3404#2 (SBP), 6001#5/7000#0 (TCS)
Siemens: P (INT), VAR-Schlüsselwort
Mitsubishi: #8876 (M198-Gerät), #8129 (Suchpriorität)
HauptbeschränkungSchachtelungsgrenzen: 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) oder EXTCALL (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) und PRG9 (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 MCALL in 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>) oder L<number> oder MCALL <program name>
  • Siemens-Rückkehr: 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ückkehr: M99 P__ ;
ParameteradresseSteuerungsmarkeBeschreibungZulässige Einstellungen
PFanuc / MitsubishiGibt die aufzurufende Zielprogrammnummer anBis zu 8 Ziffern
LFanuc / MitsubishiBestimmt, wie oft das Unterprogramm wiederholt wird1 bis 9999 (Standard: 1)
HMitsubishiGibt die Start-Satznummer (sequence block number) innerhalb des Unterprogramms anSatznummerncode (z. B. H100 entspricht N100)
,DMitsubishiRoutet den Aufruf explizit an ein bestimmtes physikalisches Speichermedium0 bis 4 (über Parameter zugewiesen)
<file name>MitsubishiGibt einen alphanumerischen Dateinamen in spitzen Klammern anBis zu 32 Zeichen
P (im Aufruf)SiemensSteuert die Anzahl der Programmwiederholungen1 bis 9999 (z. B. P3)
VARSiemensDeklariert die Parameterübergabe per Referenz (call-by-reference) in der PROC-KopfzeileN. v. (Schlüsselwort)
SAVESiemensSpeichert und stellt aktive modale G-Funktionen und Frames automatisch wieder herN. v. (Attribut)
DISPLOFSiemensUnterdrückt die Satzanzeige auf dem HMI während der UnterprogrammausführungN. v. (Attribut)
SBLOFSiemensDeaktiviert 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 / VersionTypBeschreibungEinstellungen / Details
Parameter 0010#4 (PRG9)ParameterBestimmt, ob das Bearbeiten der Unterprogramme O9000 bis O9999 gesperrt ist.0 (nicht gesperrt), 1 (gesperrt)
Parameter 0389#2 (PRG8)ParameterBestimmt, ob das Bearbeiten der Unterprogramme O8000 bis O8999 gesperrt ist.0 (nicht gesperrt), 1 (gesperrt)
Parameter 3404#2 (SBP)ParameterBestimmt, ob die Adresse P in einem M198-Block eine Dateinummer oder eine Programmnummer angibt.0 (Dateinummer), 1 (Programmnummer)
Parameter 3457ParameterKonfigurationen der Suchordnerhierarchie (z. B. Benutzerordner, MTB-Ordner, Systemordner).Bit-Werte
Parameters 6071 to 6079ParameterWeist bestimmte M-Codes zu, um automatisch die Unterprogramme O9001 bis O9009 aufzurufen.3 to 99999999 (ausgenommen reservierte M-Codes)
Alarm 0076AlarmPROGRAM 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 0077AlarmTOO MANY SUB, MACRO NESTING: Schachtelungstiefe überschreitet das Limit.Max. 4 verschachtelte Unterprogramme (8 inklusive Makroaufrufen).
Alarm 1080AlarmDUPLICATE DEVICE SUB PROGRAM CALL: Verschachtelter M198-Aufruf.Vermeiden Sie den Aufruf von M198 aus einem active M198-Unterprogramm.
Alarm 1091AlarmDUPLICATE SUB-CALL WORD: Mehrere Aufrufe im selben Block.Programmieren Sie Unterprogrammaufrufe in separaten Blöcken.
Parameter 0001#1 (FCV)VersionLegacy-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 / VersionTypBeschreibungEinstellungen / Details
P (INT)ParameterAdresse zur Programmierung der Anzahl der Unterprogrammwiederholungen.1 bis 9999
VARParameterDeklariert Parameter zur Referenzübergabe (call-by-reference) in der PROC-Kopfzeile.N. v. (Schlüsselwort)
SAVEAttributSpeichert und stellt aktive modale G-Funktionen und Frames automatisch wieder her.N. v.
DISPLOF / SBLOFAttributUnterdrückt die Satzanzeige auf dem HMI / deaktiviert den Einzelsatzmodus (single block).N. v.
Alarm 14011Alarmprogram 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 14012Alarmmaximum subroutine level exceeded: Maximale Schachtelungstiefe überschritten.Überprüfen Sie die Schachtelungstiefe.
Alarm 12720Alarmprogram 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 slVersionHardware-Tier-Unterschiede bei den Unterprogramm-Schachtelungstiefen.808D: 11 Ebenen · 828D/840D sl: 16 Ebenen (18 mit ASUBs)
Software Version 5+VersionSicherheitsverriegelung 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 / VersionTypBeschreibungEinstellungen / Details
#8876 (M198 pro stor: dev)ParameterWählt das Ziel-Speichermedium für über M198 aufgerufene Unterprogramme aus.G (Festplatte), R (Speicherkarte), D (Datenserver), N (USB-Speicher)
#8880 to #8888ParameterLegt 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)ParameterBestimmt die Priorisierung bei der Suche nach Unterprogrammnummern.0 (programmierte Nummer), 1 (4-stellige O-Nummer), 2 (8-stellige O-Nummer)
Program Error (P230)AlarmSubprogram nesting over: Maximale Schachtelungstiefe überschritten.Überprüfen Sie die Schachtelungsgrenzen und Datenserver-Konfigurationen.
Program Error (P231)AlarmNo sequence No.: Rücksprung-Satznummer oder Sprungziel fehlt.Überprüfen Sie, ob die Satznummer mit dem Ziel in M99 P übereinstimmt.
Program Error (P232)AlarmNo 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/M80VVersionCNC-Serienlimits für Unterprogramm-Schachtelungstiefen.M70V/M700V: 8 Ebenen · M800V/M80V: 10 Ebenen
M800VW/M80VW vs M800VS/M80VVersionStandard-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

ThemaFanucSiemensMitsubishi
Alphanumerische DateienKeine 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 AufrufSatzweise Ausführung oder modaler Makroaufruf (G66).Modale Unterprogrammausführung über MCALL <prog>.Satzweise Ausführung.
SchachtelungstiefeMax. 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 SpeichermedienM198 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übergabeErfordert 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

SteuerungAlarmcodeAuslösebedingungBedienersymptomUrsache / Lösung
FanucAlarm 0076Aufgerufene 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.
FanucAlarm 0077Schachtelungstiefe ü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).
FanucAlarm 1080Verschachtelter 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.
FanucAlarm 1091Mehrere 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.
SiemensAlarm 14011Aufgerufenes 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.
SiemensAlarm 14012Schachtelungstiefe ü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.
SiemensAlarm 12720ISO-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.
MitsubishiError P230Schachtelungsebene ü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).
MitsubishiError P231Angegebener 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.
MitsubishiError P232Aufgerufene 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

  • G65 Einfacher Makroaufruf: Initiiert einen einzelnen, nicht modalen Aufruf eines Unterprogramms und ermöglicht die direkte Übergabe lokaler Variablen an Makroregister.
  • G66 Modaler 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.

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