Werkzeugvermessung automatisieren
Mich erreichen immer wieder Fragen zu meinem Post über CNC-Makros. In diesem Beitrag möchte ich ein paar Antworten geben und Details zur Vermessung und Kompensation verschiedener Werkzeuglängen teilen.
Frage: Wie berechnet das Makro die Werkzeuglänge?
Im Abschnitt Werkzeuglänge Vermessen steht folgender Code:
1 G53 G00 Z[zSafety] ; # Go to safety height (machine coordinates)
2 G53 G00 X[xPosTls] Y[xPosTls] ; # Go to tool length sensor
3 G53 G00 Z[zSpindleTip + toolLengthEst + 10] ;# Move Z down to 10mm above estimated tool tip
Wenn Z=0 im Maschinenkoordinatensystem (G53) die höchste Position ist, sind zSpindleTip und toolLengthEst dann negative Werte?
Antwort:
- Diese Zeile fährt die Maschine zum in Variable #4506 hinterlegten Wert. Bei mir ist er
0, also maximale Z-Höhe. Dieser Wert bleibt permanent gespeichert (siehe hier) und man muss ihn vorher im Makro-Setup-Dialog festlegen. - Führt eine Bewegung zum Werkzeuglängensensor (WZLS) im Maschinenkoordinatensystem aus. Dafür habe ich meinen Sensor an einem festen Punkt auf der Maschine platziert.
- Mit
zSpindleTip(Variable#4509) ist die Höhe auf derZ-Achsegemeint, in der die Spindelnase den Werkzeuglängensensor freitastet. Dieser Wert ist negativ. Weshalb? Der größte Wert der Z-Achse istNull, wenn sie sich ganz am oberen Anschlag der Maschine befindet. Senkt man dia Achse von hier aus zum WZLS ab, bewegt man sie in negative Z-Richtung. Addiert man die geschätzte WerkzeuglängetoolLengthEstsowie eine Sicherheitshöhe von10mmdazu (falls man sich bei der Werkzeuglängenschätzung vertan hat), bleibt aber unter dem mechanischen Anschlag der Z-Achse, so ist der Wert noch immer negativ. Die Spindelnase hat nun aber genügend Luft zum WZLS, weil jetzt virtuell Werkzeug und Sicherheitshöhe dazu addiert wurden.
Pro Tipp: Im “Variables” Tab von EdingCNC kann man sich Werte von Variablengruppen anzeigen lassen. Man gibt eine Gruppe ein, z.B.
#4500und erhält die Live-Werte aller zehn Variablen.
Um das gut nachvollziehen zu können bietet sich an, die CNC-Software zum Ausprobieren nebenbei im Simulationsmodus laufen zu lassen. Konkretes Beispiel:
zSafety = 0 ;# machine coordinates, Z-axis at top notch
zSpindleTip = -86.43 ;# machine coordinates, where empty spindle collet touches TLS
toolLengthEst = 35 ;# the length the tool is protruding from spindle collet
G53 G00 Z[-86.43 + 35 +10] # = -41.32mm, so below max Z height
Die Benennung der Variablen habe ich in meinem Makro-Repository auf Github abgelegt.
Frage: Wie berechne ich die Werkstückhöhe nach einer Werkzeugvermessung?
Folgendes Szenario: Man vermisst das Werkzeug und bestimmt anschließend per Makro die Werkstückhöhe. Wenn ich nun die Werkzeuglänge verändere ohne das Werkzeugwechselmakro aufzurufen, stimmt der Werkstücknullpunkt ja nicht mehr. Mit einem kürzeren Werkzeug liegt der Nullpunkt “zu tief”, bei einem Längeren “zu hoch”.
Wie kann man dieses Problem lösen?
Antwort: Mehrere Lösungswege
Aus meiner Sicht gibt es drei Lösungswege für das Problem.
- Werkzeuglängenänderung immer über das Werkzeugwechselmakro laufen lassen. Man kann dort ja dieselbe Werkzeugnummer erneut eingeben.
- Den Z-Nullpunkt über die Werkstückvermessung neu setzen (nicht empfohlen1)
- Ohne Makro: Per Kommando
G92das Z-Koordinatensystem verschieben. Beispiel folgt.

Lösung #3: Koordinatensystem verschieben
Man kann das Werkstückkoordinatensystem mit den Befehl G92 Coordinate System Offset verschieben. Führt man ihn aus, so wird die ihm übergebene Zahl der angewählten Achse als neuer Wert im Koordinatensystem übernommen.
In diesem Fall wollen wir ja nur die relative Position verschieben und damit den Unterschied der Werkzeuglängen zueinander ausgleichen. Machen wir es mal konkret:
Nehmen wir an, das alte Werkzeug T17 hat eine freie Länge von 32mm und das neue Werkzeug (wieder T17, denn wir spannen in diesem Beispiel nur um oder setzen ein Schlichtwerkzeug mit gleichen Schnittdaten ein) eine freie Länge von 24mm. Der neue Wert ist kürzer, und daher muss der Nullpunkt um 8mm nach unten wandern. “Nach unten” ist im Koordinatensystem der Z-Achse ein negativer Wert.
;# Pseudocode
;# (CamelCaseWord steht für eine Variablennummer wie #5003):
G92 Z[AktuelleZPosition + (AlteWerkzeuglänge - NeueWerkzeuglänge)]
;# 20mm + (32mm - 24mm ) = 20mm + 8mm = 28mm
Verschiebung Werkstücknullpunkt vs. Werkstückkoordinatensystem
Diese Rechnung mag erst einmal verwirren, versetzt sie das Koordinatensystem doch nach oben. Aber genau das ist erforderlich, damit der Werkstücknullpunkt relativ zur Werkzeugspitze erhalten bleibt: Das Werkzeug ist 8mm kürzer. Da wir den Werkstücknullpunkt nicht nach unten schieben, muss das Koordinatensystem halt nach oben versetzt werden. So wird die nun längere Strecke zwischen Werkzeugspitze und Werkstück kompensiert.
| Coordinate System | Tool tip position Z [mm] | Workpiece position Z [mm] | Tool top position Z [mm] | Workpiece position Z [mm] |
|---|---|---|---|---|
| Before shift | Before shift | After shift | After shift | |
| Workpiece | 20 | 0 | 28 | 0 |
| Machine | -41.42 | -61,42 | -41.42 | -69,42 |
Man sieht hier, dass sich durch das Versetzen des Koordinatensystems die Position der Werkzeugspitze im Werkstückkoordinatensystem verändert. Die Z-Achse wird dabei nicht bewegt. Das Maschinenkoordinatensystem bleibt von dieser Änderung unberührt. Da die Z-Achse nun aber einen weiteren Weg zum Werkstück zurücklegen muss, liegt seine Position im Maschinenkoordinatensystem jetzt um -8mm unter dem vorigen Wert.
Rahmenbedingungen
Die Makros funktionieren nur unter bestimmten Voraussetzungen:
- Die Werkzeuglänge wurde zuvor gemessen bzw. Werkzeugwechsel werden stets per Makro gesteuert und nicht ohne “Wissen” der Maschine
- Der Werkstücknullpunkt wird bei bereits bekannter Werkzeuglänge ermittelt.
- Es gab keinen Not-Aus oder einen anderen kritischen Fehler. Dies würde den flüchtigen Speicher für die relevanten Variablen löschen.
-
Nach einem Werkzeugwechsel die Werkstückhöhe in Z erneut einzumessen verschiebt meiner Ansicht nach den falschen Parameter. In Wirklichkeit hat sich doch nicht die Höhe des Werkstückes geändert, sondern die Position der Werkzeugspitze. Daher würde ich es immer vorziehen, den sich ändernden Parameter anzupassen. ↩