CNC Teil5 - Makros

15 Minuten Lesezeit

Dies ist der fünfte Teil meiner Serie über Portalfräsmaschinen. Er befasst sich mit praktischem Zubehör, das Ihnen das Leben als CNC-Bediener erleichtert und zu schnelleren und genaueren Fräsergebnissen führen kann.

Übersicht

In diesem Artikel geht es um Makros für die CNC, mit deren Hilfe bestimmte sich wiederholende Vorgänge automatisiert werden können. Es werden sowohl grundlegende als auch anspruchsvollere Makros für mehrere Zwecke wie automatische Z-Nullstellung, Werkzeuglängenmessung oder Werkzeugwechsel behandelt. Er wird einige G-Code Befehle behandeln und versuchen, dabei zu helfen, mehr Vertrauen in die Maschine aufbauen zu können.

Haftungsausschluss

Die folgenden Subroutinen wurden für den RS274 NGC Interpreter geschrieben. Ich habe sie mit EdingCNC validiert, da dies die CNC-Software ist, die ich zufälligerweise verwende. Ich habe einige Aspekte von Makro-Dateien abgeleitet, die sowohl Sorotec als auch Eding zusammen mit ihren Maschinen ausliefern.

Da Sie möglicherweise unterschiedliche Hardware- und Softwaredistributoren für Ihre Maschine haben, passen diese Routinen möglicherweise nicht zu 100%. Meine Absicht war mehr zu erklären, was in ihnen geschieht, als eine 1-zu-1 Kopievorlage zu liefern.

Was ist ein Makro?

Ein Makro oder Unterprogramm ist eine Sammlung von Anweisungen, die für den CNC-Interpreter geschrieben wurden, um Aktionen auszuführen. Sie werden oft verwendet, um wiederkehrende Vorgänge zu automatisieren. Auf meiner Maschine beginnt ein solches Makro mit einem SUB-Befehl und endet mit einem ENDSUB. Sie enthalten oft Verzweigungslogik und G-Code-Befehle, um die Maschine zu veranlassen, Dinge zu tun oder sogar Benutzerdialoge anzuzeigen, um die Eingaben des Bedieners zu erhalten.

Auf meiner Maschine befinden sich alle Makros in einer einzigen Datei namens macro.cnc, die von meiner CNC-Software beim Start gelesen wird, damit sie ausgeführt werden kann. Einige “Soft-Buttons” der Software rufen direkt Makros aus dieser Datei auf, z.B. für die Referenzfahrt.

Image: Makroausführung in Aktion Um zu demonstrieren, dass diese Datei von großer Bedeutung ist, schließen Sie Ihre CNC-Software und öffnen Sie das Dokument macro.cnc mit einem Texteditor. Suchen Sie nach Sub user_9 (es sollte eine Routine sein, die nichts Relevantes tut), entfernen Sie ihren Inhalt und fügen Sie die Zeile MSG "hello world!" hinzu. Speichern Sie Ihre Arbeit, starten Sie die CNC-Software, und drücken Sie im Benutzermenü die Taste 9 - Voilà!

Ein einfaches Makro zur Erkennung des Status des Werkzeuglängensensors

Legen wir los und verbinden das neu erworbene Wissen über Makros mit einem nützlichen Beispiel.

Der Werkzeuglängensensor

Image: Mein Werkzeuglängensensor Ein Werkzeuglängensensor ist ein Zubehörteil, das an einen Eingang der CNC-Maschine angeschlossen wird und bei Berührung (z.B. durch eine Werkzeugspitze) auslöst. Es gibt viele verschiedene Ausführungen, von einem sehr einfachen Mikroschalter mit Gehäuse und einfachem Tastmechanismus bis hin zu hochpräzisen induktiven Sensoren aus feingedrehtem Edelstahl mit automatischer Luftspülung um sicherzustellen, dass die Oberfläche des Sensors sauber ist.

Der Werkzeuglängensensor wird entweder am Maschinenbett, auf dem Ablagetisch oder einfach an einer anderen festen Position an der Maschine angebracht. Meiner ist ein sehr einfacher Schalter, den ich an jeder beliebigen Stelle meiner Maschine anbringen kann. Er hat eine angebliche Wiederholgenauigkeit von 10µm.

Wie auch immer, der eigentliche Zauber wird in der CNC-Software vollbracht.

Makro-Aufgabe

Ich möchte, dass das Makro prüft, ob der Werkzeuglängensensor betriebsbereit ist (und nicht klemmt). Ich überprüfe also, ob der Sensorschalter den Status “nicht ausgelöst” hat - normalerweise geschlossen. Wenn er ausgelöst wurde (seine Kontakte also offen sind), könnte das bedeuten, dass der Sensor in der ausgelösten Position klemmt (ist mir schon passiert) oder dass ein Sensordraht gebrochen ist (ist mir bisher noch nicht passiert), oder dass der Sensor überhaupt nicht mit der Maschine verbunden ist.

Macko code

SUB is_sensor_ok
    IF [sensorStatus == triggered] ;# 5068 == 0 (normally closed)
        DLGMSG "Tool length sensor not connected or already triggered - please check"
        IF [dialogButton == 1]
            IF [sensorStatus == triggered]
                ERRMSG "Tool length sensor input still unexpected - aborting"
            ENDIF
        ELSE
            ERRMSG "User abort."
        ENDIF
    ENDIF
ENDSUB

Der Name des Makros ist is_sensor_ok. Ich prüfe den Sensorstatus und zeige eine Dialogmeldung an, falls hier etwas nicht stimmt. Sobald auf “OK” gedrückt wird, gehe ich davon aus, dass das Problem behoben wurde und versuche es erneut. Wenn er immer noch ausgelöst ist, breche ich die Routine ab.

Dieses Makro ist in allen folgenden Abschnitten zu finden, in denen ich den Werkzeuglängensensor benötige, um etwas zu messen - es dient als Schutz, um nicht versehentlich meine Maschine, den Sensor oder das Werkstück zu zerstören, indem ich einen fehlerhaften Zustand annehme.

Benennung von Variablen

Die RS274/NGC-Sprache ist alt. Ich meine wirklich alt. Ihre erste Version wurde in den späten 1950er Jahren veröffentlicht. Kein Wunder, dass die Parameter (#1 - #5399 ist der erlaubte Bereich) alle numerisch sind, sowohl in der Benennung als auch in den Werten, die sie speichern können. Es gibt kein Typsystem (wie Strings, int usw.) und keine praktische Benennung, die das Verständnis eines Parameters wie sensorStatus erleichtert.

Es wird einfach #5068 sein und Sie müssen sich selbst daran erinnern, dass der Hersteller der CNC-Software diese Variable ausgewählt hat, um den Status des Werkzeuglängensensors zu kennzeichnen, und dass sie boolean ist mit 0 = nicht ausgelöst und 1 = ausgelöst.

Um den Makrocode so lesbar und verständlich wie möglich zu gestalten, verzichte ich in diesem Artikel auf die Verwendung von numerischen Parameternamen. Eine Übersetzungstabelle finden Sie ganz unten.

Verwendung des Werkzeuglängensensors zur Ermittlung der Werkstückoberfläche (Z=0)

Mit dieser Methode brauchen Sie die Werkstückoberfläche nicht manuell abzunullen. So entfällt das Absenken der Z-Achse bis das Werkzeug die Oberfläche leicht ankratzt und dann das Festlegen der Werkstückkoordinaten.

Image: Skizze Werkzeuglängensensor Sobald das Makro programmiert und eingerichtet ist, platzieren Sie den Werkzeuglängensensor auf dem Werkstück und verfahren die Maschine so, dass sie sich direkt über dem Sensor befindet (noch nicht berührt). Starten Sie dann das Makro. Ihre Maschine wird nun automatisch ihre Z-Achse langsam absenken, bis der Sensor schaltet. Dann fährt sie sehr langsam zurück, bis der Sensorkontakt wieder geschlossen ist. Dieser Punkt wird dann zur Bestimmung von Z-0 herangezogen, die dann automatisch gesetzt wird.

Voraussetzungen

Bevor wir das Makro schreiben können, benötigen wir die Z-Position des Werkzeuglängensensors “zTls” zum Zeitpunkt des Umschaltens von “ausgelöst” auf “nicht ausgelöst”. Ich habe meine vorerst (denn das ist nicht sehr genau) mit einem Messschieber gemessen und notiert. Wir brauchen diesen Wert, damit die Maschine ihn beim Ansetzen von der Z-Höhe abziehen kann, um die Position der Werkstückoberfläche zu ermitteln.

Wie man die Messung des Auslösepunktes präziser hinbekommt soll Gegenstand eines eigenen Artikels werden.

Außerdem ist es wichtig zu wissen, wie der Schalter mit der Maschine verbunden ist. Die bevorzugte Art ist “normal geschlossen”, d.h. der Schalter öffnet sich, wenn er ausgelöst wird: “Ausgelöst = 0”. Dies ist die sicherste Anwendung, da ein Drahtbruch oder eine unterbrochene Verbindung automatisch erkannt wird, wenn der Stromkreis unterbrochen wird.

Schließlich müssen wir den Vorwärts- und Rückwärtsvorschub des Messtasters festlegen, z.B. Tasten = 100mm/min, Lösen = 10mm/min.

Das Makro enthält auch einen etwas aufwendigeren Teil: Wenn Z-0 gemessen werden soll, aber die Werkzeuglänge nicht bekannt ist, kann die Maschine die aktuelle Position posX, posY vor der Fahrt zum Werkzeuglängensensor in Neupositionierungsvariablen speichern, so dass das Makro get_tool_length direkt von hier aus aufgerufen werden kann. So kann es später automatisch wieder dorthin positionieren, wo Z-0 des Werkstücks gemessen wird.

Das Unterprogramm “Z-Null-Erkennung”

Nach dem Ausschalten der Spindel senkt das Programm die Z-Achse der Maschine ab, bis der Fräser Werkzeuglängensensor auslöst (oder bis sie ohne eingelegtes Werkzeug so weit nach unten gefahren ist, dass die Spindelnase den Sensor fast berührt, wo das Makro dann wiederum abbrechen würde, weil es den Sensor nicht gefunden hat), und zwar mit dem Befehl G38.2. Wenn der Sensor ausgelöst wird, fährt die Maschine vorsichtig die Z-Achse wieder hoch, bis der Sensor freigegeben ist. Dieser Punkt wird dann als neuer Koordinaten-Offset für die Z-Achse mit dem Befehl G92 gespeichert.

Code

Bevor wir beginnen, stellen wir sicher, dass wir uns im richtigen Zustand befinden. Die Werkzeuglänge sollte bereits festgelegt sein, damit bei künftigen Werkzeugwechseln nicht erneut der Z-Nullpunkt gemessen werden muss. Außerdem sollten wir wissen, dass der Sensor richtig angeschlossen ist.

SUB measure_workpiece_z0
    IF ![toolLengthStat]
        DLGMSG "WARNING - Please first measure tool length!"
        IF [dialogButton == 1]
            xPosReposition = xPos
            yPosReposition = yPos
            repositionTo = 1
            GOSUB get_tool_length
        ENDIF
    ENDIF

    GOSUB is_sensor_ok              ;# Check if tool length sensor status is OK

Programmieren wir nun die eigentliche Routine, indem wir abfragen, ob der Z-Nullabgleich jetzt durchgeführt werden soll. Wenn die CNC im Simulatormodus läuft (ohne angeschlossene Hardware), wird der Z-Nullabgleich nicht funktionieren, also müssen wir auch dies überprüfen und den Schritt gegebenenfalls überspringen.

    DLGMSG "Start Z-Zeroing?"
    IF [dialogButton == 1] AND [operatingMode != simulator]
        M5                          ;#Switch spindle off
        M9                          ;#Switch coolant off
        G53 G38.2 Z[zSpindleTip + 5] F[touch] 
                                    ;# G38.2 = touch toward probe, stop on contact, flag error on fail
                                    ;# fail = 5mm before touching spindle tip
        IF [probeOk == 1]           ;# #5067 == 1 : G38.2 command success
            G38.2 G91 Z20 F[rev]    ;# now reverse slowly to find untrigger point (max. 20mm up)
            G90                     ;# back to absolute coordinates
            IF [probeOk == 1]      
                G00 Z[zTouched]     ;# #5063 Go to Z-axis's probe point	
                G92 Z[zTls]         ;# Set Z-axis's coordinate offset (0) to tool length sensor's height
                G00 Z[zTls + 5]     ;# clear sensor
            ELSE
                ERRMSG "Could not locate sensor untrigger point."
            ENDIF 
        ELSE
            DLGMSG "Could not locate sensor trigger point. Retry?" 
            IF [dialogButton == 1]  				
                GOSUB measure_workpiece_z0
            ELSE
                ERRMSG "User abort."
            ENDIF
    ENDIF
ENDSUB

Ausführen des Makros Z-Nullabgleich auf Zerspanobert

Es steht Ihnen natürlich frei, dieses Makro komplexer zu gestalten - z.B. könnten Sie abfragen, ob die Werkzeuglänge zuvor gemessen wurde, so dass von Ihnen vorgenommene Werkzeugänderungen automatisch kompensiert werden können, oder wenn Sie den Z-Nullpunkt immer an derselben XY-Position messen, könnten Sie die Maschine mit einem Z-Up-Befehl dorthin fahren lassen usw.

Messung der Werkzeuglänge

Wenn die Maschine die Werkzeuglänge kennt, bevor sie den Z-Nullpunkt misst, müssen Sie den Z-Nullpunkt bei anstehenden Werkzeugwechseln während des Auftrags nicht immer wieder messen. Deshalb ist es eine gute Idee, die Länge der verwendeten Werkzeuge zu messen und zu aktualisieren. Schreiben wir ein weiteres, das diese Aufgabe übernimmt.

Vorbereitung

Image: get_tool_length macro parameters

Die CNC-Software ist in der Lage, die Position der Werkzeugspitze zu erkennen, da sie ihre Position im Raum (X, Y, Z) kennt, wenn sie ordnungsgemäß referenziert worden ist. Die meisten CNCs leiten ihre aktuellen Positionsdaten durch Zählen der Motorschritte ab, die sie nach Abschluss der Referenzfahrt ausgeführt hat.

Um die Werkzeuglänge zu messen und die Position der Werkzeugspitze korrekt einzustellen, muss die Maschine eine Reihe zusätzlicher Parameter kennen:

  • Spindelspitze zSpindleTip (berührt Werkzeuglängensensor ohne eingelegtes Werkzeug), damit berechnet werden kann, wie weit das Werkzeug aus der Spindel herausragt
  • X-Position xPosTls des Werkzeuglängensensors beim Werkzeugwechsel
  • Y-Position yPosTls des Werkzeuglängensensors bei Werkzeugwechseln
  • Sicherheitshöhe zSafety (stellt sicher, dass die Spindel auf ihrem Weg zum Werkzeugwechselbereich nicht auf ein Hindernis stößt)
  • Berührungsvorschub vorwärts und rückwärts. Wir können sie aus dem Makro Z-Null wiederverwenden.

Die Unterroutine “Werkzeuglänge messen”

Legen wir zunächst fest, was diese Unterroutine tun soll:

  1. Spindel, Kühlmittel etc. anhalten.
  2. Dialog: Bediener soll die geschätzte Länge eingeben
  3. Eilgang Z auf Sicherheitshöhe, dann XY zur Position des Werkzeugsensors
  4. Werkzeuglängensensor abtasten, ähnlich wie bei der Z-Nullpunkt-Erkennung
  5. Werkzeuglänge berechnen
  6. Berechnung der Differenz zwischen der letzten und der aktuellen Werkzeuglänge
  7. Z-Nullpunkt entsprechend aktualisieren
  8. Z im Eilgang wieder auf Sicherheitshöhe bringen

Code

SUB get_tool_length
    GOSUB is_sensor_ok                                  ;# Check if tool length sensor status is OK

    DLGMSG "Start tool length measurement? Please enter estimated tool length: " [toolLengthEst]
    IF [dialogButton == 1] AND [operatingMode != simulator]
        IF [toolLengthEst < 0]
            ERRMSG "Error: tool length cannot be negative."
        ENDIF

        IF [[zSpindleTip+ toolLengthEst + 10] > [zSafety]
            ERRMSG "Error: tool too long - could collide with sensor."
        ENDIF

        M5                                              ;# Switch spindle off
        M9                                              ;# Switch coolant off
        G53 G00 Z[zSafety]                              ;# Go to safety height (machine coordinates)
        G53 G00 X[xPosTls] Y[xPosTls]                   ;# Go to tool length sensor
        G53 G00 Z[zSpindleTip + toolLengthEst + 10]     ;# Move Z down to 10mm above estimated tool tip

        ;# measure tool length, save results, apply Z-offset if needed
        G53 G38.2 Z[zSpindleTip] F[touch]                   ;# probe sensor, latest stop point is spindle tip
        IF [probeOk == 1]                                   ;# #5067 == 1 : G38.2 command success
            G38.2 G91 Z20 F[rev]                            ;# now reverse slowly to find untrigger point
            G90                                             ;# back to absolute coordinates
            IF [probeOk == 1]  
                toolLength = [zTouched - sTip]
                MSG "Tool length = " toolLength

                IF [toolLengthStat == 1]                    ;# defaults to 0 on startup
                    lastToolLength = currToolLength         ;# save last tool's length
                    currToolLength = toolLength             ;# save current tool's length
                    toolLengthDiff = [currToolLength - lastToolLength]	
                    G92 Z[zPos - toolLengthDiff]            ;# Set Z-axis's coordinate offset (0)
                ELSE
                    currToolLength = toolLength             ;# save current tool's length
                ENDIF
                toolLengthStat = 1
                GOSUB reposition_spindle
            ELSE
                ERRMSG "Could not locate sensor untrigger point."
            ENDIF
        ELSE
            ERRMSG "Could not locate sensor trigger point."
        ENDIF
    ENDIF
ENDSUB   

Werkzeuglängenmakro auf meiner Maschine

In diesem Video ist die Maschine so konfiguriert, dass sie zum XY-Nullpunkt zurückkehrt, wenn die Werkzeugmessung abgeschlossen ist. Sie würde sich genauso verhalten, wenn ich die Werkzeuglänge nach einem Werkzeugwechsel messen lassen würde.

Werkzeugwechsel

Wenn es kein Makro für den Werkzeugwechsel gibt, hält die Maschine ihren Auftrag an und wartet, bis Sie sie manuell an die Stelle fahren, an der Sie den Werkzeugwechsel durchführen, und verlangt, dass Sie die Z0-Position des Werkstücks aufgrund der möglicherweise geänderten Werkzeuglänge neu nullen, bevor sie den Auftrag fortsetzt.

Diese Aufgabe kann leicht automatisiert werden und der folgende Abschnitt zeigt Ihnen, wie Sie ein entsprechendes Makro schreiben können.

Voraussetzungen

Ein optionales Flag getToolLength kann das Verhalten des Werkzeugwechsel-Makros konfigurieren - ob die Länge jedes Werkzeugs nach einem Werkzeugwechsel gemessen werden soll oder nicht. Wenn Sie einen automatischen Werkzeugwechsler haben, brauchen Sie dies vielleicht nicht.

Die folgenden zusätzlichen Parameter werden ebenfalls benötigt:

  • X-Position xToolChg wo der Werkzeugwechsel stattfindet (bei mir ist es xToolChg = xPosTls)
  • Y-Position yToolChg, wo der Werkzeugwechsel stattfindet (bei mir ist es yToolChg = yPosTls)
  • Wiederverwendung von zSafety aus get_tool_length Makro
  • newToolNumber zur Angabe des angeforderten Werkzeugs aus dem G-Code (oder bei manueller Eingabe)
  • currToolNumber zur Angabe des “alten” Werkzeugs, das ersetzt werden soll
  • ToolChangeDone-Hilfsflag, um anzuzeigen, ob ein Werkzeugwechsel bereits stattgefunden hat

Das Makro “Werkzeugwechsel”

Die folgenden Schritte werden von dem Makro ausgeführt, wenn ein Werkzeugwechsel entweder durch den Befehl M06 “Werkzeugwechsel” in der G-Code-Datei eines Jobs oder manuell durch Benutzer ausgelöst wird:

  1. Spindel, Kühlmittel etc. anhalten.
  2. Wenn das angeforderte Werkzeug das aktuelle Werkzeug ist, erscheint ein Dialog mit der Frage, ob es trotzdem gewechselt werden soll.
  3. Z im Eilgang nach oben (zSafety), dann XY auf die Werkzeugwechselposition fahren
  4. Dialog: Angabe des aktuellen Werkzeugs a und Aufforderung, das gewünschte Werkzeug b einzusetzen
  5. Prüfen, ob die Werkzeugwechselkonfiguration die Bestimmung der Werkzeuglänge impliziert. Wenn ja, Makro “get_tool_length” aufrufen.

Code

SUB change_tool
    toolChangeDone = 0
    M5                                              ;# Switch spindle off
    M9                                              ;# Switch coolant off

    IF [operatingMode != simulator]
        TCAGuard off                              ;# tool change area guard: off for tool change

        ;# handle case that tool is already in place
        IF [newToolNumber == currToolNumber]
            DLGMSG "Tool already mounted. Change anyways?"
            IF [dialogButton == 1]
                toolChangeDone = 0
            ELSE
                toolChangeDone = 1
            ENDIF
        ENDIF

        ;# go to tool change position and prompt to change tool
        IF [toolChangeDone == 0]
            G53 G00 Z[zSafety]                        ;# Go to safety height (machine coordinates)
            G53 G00 X[xToolChg] Y[yToolChg]           ;# Go to tool change position
            DLGMSG "Please mount tool now. Old tool number: " [currToolNumber] 
                    " New tool number: " [newToolNumber]
            IF [dialogButton == 1]
                IF [newToolNumber > 99] OR [newToolNumber < 0]
                    TCAGuard on                       ;# tool change area guard: on for normal job
                    ERRMSG "New tool number implausible."
                ENDIF
                toolChangeDone = 1
            ELSE
                ERRMSG "Tool change aborted."
            ENDIF
        ENDIF

        ;# prompt when complete and optionally call tool length measurement
        IF [toolChangeDone == 1]   
            MSG "Tool change from " [currToolNumber] " to "  [newToolNumber] " complete."
            M6 T[newToolNumber]				      ;# set new tool number

            IF [getToolLength == 1]               ;# config flag 0 = no, 1 = yes
                GOSUB get_tool_length             ;# Measure tool length. Careful: To be called after M6 T !
            ELSE
                GOSUB reposition_spindle
            ENDIF
        ENDIF

        TCAGuard on                               ;# tool change area guard: on for normal job
    ENDIF
ENDSUB

Repositionieren (auf gespeicherte Koordinaten)

Dies ist ein sehr kurzes Makro, das von anderen Unterprogrammen aufgerufen werden kann, um die Maschine entweder zu einer befohlenen Position oder zum XY-Werkstücknullpunkt zu repositionieren. Das Makro könnte mit mehreren repositionTo-Flag-Werten erweitert werden, z.B. 0 = keine Neupositionierung, 1 = benutzerdefinierte Position, 2 = Werkstücknullpunkt, 3 = Maschinennullpunkt …

Code

SUB reposition_spindle
    G53 G00 Z[zSafety]                          ;# Go to safety height (machine coordinates)
    IF [repositionTo == 1]
        G00 X[xPosReposition] Y[yPosReposition] ;# Move back to where requested before
        repositionTo = 0                        ;# reset reposition flag and values
        xPosReposition = 0
        yPosReposition = 0
    ELSE
        G00 X0 Y0                               ;# Move back to XY zero (workpiece coordinates)
    ENDIF
ENDSUB

Tabelle der Variablen

In den folgenden Abschnitten finden Sie alle Parameter, die ich in den obigen Makros verwendet habe.

Systemparameter

protected bedeutet, dass diese Parameter zu festen Befehlen oder Zuständen gehören, die schreibgeschützt sind. reserved bedeutet, dass die Parameter eine feste Verwendung innerhalb meiner CNC-Software haben (ich weiß nichts über andere CNC-Programme).

Variable name Parameter nr. Type Comment
xPos #5001 protected current CNC position
yPos #5002 protected current CNC position
zPos #5003 protected current CNC position
currToolNumber #5008 protected [1…99]
newToolNumber #5011 protected [1…99]
zTouched #5063 protected Z where sensor touched
probeOk #5067 protected 1 = OK
sensorStatus #5068 protected 1 = triggered
operatingMode #5397 reserved 1 = simulator
dialogButton #5398 reserved 1 = OK

Konfig-Parameter

Config-Parameter sind die Parameter, die einmal eingestellt und dann konstant gehalten werden, da sie an die CNC und ihre Geometrie gebunden sind.

Die Volatilität der Parameter hängt stark von der CNC-Softwarelösung ab, die Sie verwenden, und die Anzahl der freien Parameter kann unterschiedlich sein. In meiner Software werden die Variablen im Bereich “#4000 - #4999” beibehalten, während alle anderen freien und reservierten Parameter flüchtig und/oder skaliert sind.

Variable name Parameter nr. Type Comment
triggered #4400 free, persisted 1 = normally open
currToolLength #4501 free, persisted [mm]
lastToolLength #4502 free, persisted [mm]
zSafety #4506 free, persisted Z position for move
xPosTls #4507 free, persisted tls position
xPosTls #4508 free, persisted tls position
zSpindleTip #4509 free, persisted Z zpindle on tls
zTls #4510 free, persisted TLS height [mm]
toolLengthEst #4511 free, persisted [mm]
touch #4512 free, persisted touch feed [mm/min]
rev #4513 free, persisted reverse feed [mm/min]
getToolLength #4520 free, persisted Flag, 1 = Yes
xToolChg #4521 free, persisted tool change position
yToolChg #4522 free, persisted tool change position

Flag-Parameter

Freie Parameter können nach Belieben verwendet werden. Es muss jedoch darauf geachtet werden, dass nicht versehentlich eine bestehende Systemvariable wiederverwendet oder überschrieben wird.

Variable name Parameter nr. Type Comment
toolLengthStat #3501 free 1 = measured
toolLengthDiff #3502 free [mm]
toolChangeDone #5015 free 1 = Yes
repositionTo #5020 free Flag, 1 = Yes
xPosReposition #5021 free reposition flag
yPosReposition #5022 free reposition flag
toolLength #5024 free [mm]

PS: Damit die obigen Code-Beispiele ordentlich angezeigt werden, habe ich fürs Markup die Sprachinterpretation ruby verwendet. Hier kommt die farbige Syntax-Markierung am besten überein mit der Logik des NGC-interpreters.