Programmierung
Messergebnisse, V.A.MESS.<Achse> V.A.MERF.<Achse> V.A.MOFFS.<Achse> V.A.MEIN.<Achse>
Beim Messen über den NC-Befehl G100/G310 wird eine Achsposition nach dem Auslösen eines Messtasters gespeichert. Nach Auslösen des Messinterrupt wird die aktuelle Position gespeichert (gelatcht) und die Messfahrt eventuell beendet.
Die durch den Messvorgang erfassten Positionen können im NC-Programm durch G101/G102 (Verrechnung des Messoffsets) sowie spezielle achsspezifische Variablen verwendet werden.
Beispiele:
V.A.MESS.X | Messwert von Achse X in dem Koordinatensystem, in dem gemessen wurde inklusive aller Verschiebungen. |
V.A.MERF.X | Messen ist erfolgt (TRUE/FALSE). Gibt an, ob der Messinterrupt vor Erreichen der Zielposition eingetroffen ist. |
V.A.MOFFS.X | Distanz zwischen Messposition und programmierter Zielposition. |
V.A.MEIN.X | Der aktuell mit G101 eingerechnete Messoffset der X-Achse. Dieser wirkt wie eine additive Verschiebung der programmierten Position: PCS’ = PCS + MessoffsetG101 |
V.G.MEAS_TYPE | Wert des aktuell aktiven Messtyps [ab V2.11.2022.03] Weitere Informationen über die Verwendung der Funktionalität Messen können der Programmieranleitung [PROG// Kapitel Messfunktionen] entnommen werden. |
V.A.MEAS.ACS.VALUE.<Achse> V.A.MEAS.PCS.VALUE.<Achse> | Ab Version V2.11.2020.07 ergänzen die achsspezifischen Variablen V.A.MEAS.ACS.VALUE und V.A.MEAS.PCS.VALUE die Variable V.A.MESS. Die zusätzlichen Variablen liefern den Messwert sowohl im Achskoordinatensystem inklusive aller Verschiebungen als auch den Messwert im Programmierkoordinatensystem. |
Beispiele:
V.A.MEAS.ACS.VALUE.X | Messwert von Achse X im Achskoordinatensystem (ACS). Im Wert sind alle Verschiebungen eingerechnet |
V.A.MEAS.PCS.VALUE.X | Messwert von Achse X im Programmierkoordinatensystem (PCS). Im Wert sind keine Verschiebungen eingerechnet. Über die Angabe im Werkzeugradius kann der Kugelradius des Messtasters bei der Berechnung des PCS-Wertes berücksichtigt werden (siehe nachfolgendes Beispiel). Das Einrechnen des Kugelradius kann mit dem Kanalparameter P-CHAN-00311 gesteuert werden. |
Programmierbeispiel
Messen mit einem Messtasterwerkzeug mit 2mm Radius
%meas_example
:
;Messtasterwerkz.
;mit Radius 2 mm
D1
:
G0 X150 Z200
G100 Z20
:
M30
Einrechnen des Messoffsets mit G101, G102
Im NC-Programm kann mit
Syntax: | |
G101 <Achsname><fact> { <Achsname><fact> } | nicht modal |
ein Offset eingerechnet werden.
Der Messoffset ist die Distanz zwischen aufgezeichneter Messposition und der programmierten Zielposition. Er berechnet sich wie folgt:
Messoffset = Messposition - Zielposition
Für die programmierten Koordinaten wird der aus den Messwerten ermittelte Messoffset als weitere Verschiebung zwischen programmierten und absoluten Koordinaten eingerechnet. Es erfolgt eine Fehlermeldung, wenn zuvor keine Messwerte erfasst wurden. Die Zahl hinter der Achsbezeichnung stellt den Faktor für die Einrechnung dar.
Die Verschiebung durch den Messoffset gilt bis zur Abwahl mit G102.
Syntax: | |
G102 { <Achsname><dummy_expr> } | nicht modal |
Hinweis
Werden mehrere Messfahrten sequentiell programmiert, so ist bei der Verwendung der achsspezifischen Variablen V.A.MERF zu berücksichtigen, dass für nicht programmierte Achsen die Werte aus der vorherigen Messung erhalten bleiben.
Für die Berechnung von V.A.MESS.*, V.A.MEAS.* und V.A.MOFFS.* gelten folgende Zusammenhänge (Beispiel für X-Achse):
V.A. | Ohne | Mit kartesischer | Mit kinematischer |
MESS.X | ACS-Position (beinhaltet alle | Umrechnung der | Umrechnung der |
MEAS.ACS.VALUE.X | ACS-Position (beinhaltet alle | ACS-Position (beinhaltet alle | ACS-Position (beinhaltet alle |
MEAS.PCS.VALUE.X | PCS Position (ohne | Umrechnung der | Umrechnung der |
MOFFS.X | = V.A.MESS.X | = V.A.MESS.X | = V.A.MESS.X |
Programmierbeispiel
Messen im ACS ohne Verschiebungen
In den folgenden Programmierbeispielen wird ein idealer Messtaster mit Kugelradius 0 mm angenommen.
Annahme: Messtaster spricht bei ACS-Position Z=100 an.
%meas1
N05 #MEAS MODE[1]
N10 G01 G90 Z200 F2000
N20 G100 Z20 F2000
N30 #MSG SYN["V.A.MESS.Z=%f", V.A.MESS.Z]
-> V.A.MESS.Z = 100.0
N31 #MSG SYN["V.A.MEAS.ACS.VALUE.Z=%f",
V.A.MEAS.ACS.VALUE.Z]
-> V.A.MEAS.ACS.VALUE.Z = 100.0
N32 #MSG SYN["V.A.MEAS.PCS.VALUE.Z=%f",
V.A.MEAS.PCS.VALUE.Z]
-> V.A.MEAS.PCS.VALUE.Z = 100.0
N40 #MSG SYN["V.A.MOFFS.Z=%f", V.A.MOFFS.Z]
-> V.A.MOFFS.Z = 80.0
N50 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N60 G101 Z1
N70 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 80.0
N80 G01 Z100 F1000
N90 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 180.0
N100 G102 Z1
N110 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N120 G01 Z100 F1000
N130 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 100.0
N140 M30
Programmierbeispiel
Messen im ACS mit Bezugspunktverschiebung
Messen mit Bezugspunktverschiebung G92.
Annahme: Messtaster spricht bei ACS-Position Z=100 an.
%meas2
N05 #MEAS MODE[1]
N10 G92 Z33
N20 G01 G90 Z200 F2000
N30 G100 Z20 F2000
N40 #MSG SYN["V.A.MESS.Z=%f", V.A.MESS.Z]
-> V.A.MESS.Z = 100.0
N41 #MSG SYN["V.A.MEAS.ACS.VALUE.Z=%f",
V.A.MEAS.ACS.VALUE.Z]
-> V.A.MEAS.ACS.VALUE.Z = 100.0
N42 #MSG SYN["V.A.MEAS.PCS.VALUE.Z=%f",
V.A.MEAS.PCS.VALUE.Z]
-> V.A.MEAS.PCS.VALUE.Z = 67.0
N50 #MSG SYN["V.A.MOFFS.Z=%f",
V.A.MOFFS.Z]
-> V.A.MOFFS.Z = 47.0
N60 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N70 G101 Z1
N80 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 47.0
N90 G01 Z100 F1000
N100 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 180.0
N110 G102 Z1
N120 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N130 G01 Z100 F1000
N140 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 133.0
N150 M30
Programmierbeispiel
Messen mit CS, nur Verschiebung
Messen mit Bearbeitungskoordinatensystem CS, Verschiebung.
Annahme: Messtaster spricht bei ACS-Position Z=100 an.
%meas3
N05 #MEAS MODE[1]
N10 #CS ON[0,0,33,0,0,0]
N20 G01 G90 Z200 F2000
N30 G100 Z20 F2000
N40 #MSG SYN["V.A.MESS.Z=%f", V.A.MESS.Z]
-> V.A.MESS.Z = 67.0
N41 #MSG SYN["V.A.MEAS.ACS.VALUE.Z=%f",
V.A.MEAS.ACS.VALUE.Z]
-> V.A.MEAS.ACS.VALUE.Z = 100.0
N42 #MSG SYN["V.A.MEAS.PCS.VALUE.Z=%f",
V.A.MEAS.PCS.VALUE.Z]
-> V.A.MEAS.PCS.VALUE.Z = 67.0
N50 #MSG SYN["V.A.MOFFS.Z=%f", V.A.MOFFS.Z]
-> V.A.MOFFS.Z = 47.0
N60 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N70 G101 Z1
N80 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 47.0
N90 G01 Z100 F1000
N100 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 147.0
N110 G102 Z1
N120 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N130 G01 Z100 F1000
N140 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 100.0
N150 #CS OFF
N160 M30
Programmierbeispiel
Messen mit CS, Verschiebung und Rotation
Messen mit Bearbeitungskoordinatensystem CS, Verschiebung und Drehung:
Annahme: Der Messtaster spricht bei der Z ACS-Position 55.5mm an.
%meas4
N05 #MEAS MODE[1]
N10 #CS ON[0,0,75,0,15,0]
N20 G01 G90 X150 Z100 F2000
N30 G100 Z-10 F1000
N40 #MSG SYN["V.A.MESS.Z=%f", V.A.MESS.Z]
-> V.A.MESS.Z = 20.0
N41 #MSG SYN["V.A.MEAS.ACS.VALUE.Z=%f",
V.A.MEAS.ACS.VALUE.Z]
-> V.A.MEAS.ACS.VALUE.Z = 55.5
N42 #MSG SYN["V.A.MEAS.PCS.VALUE.Z=%f",
V.A.MEAS.PCS.VALUE.Z]
-> V.A.MEAS.PCS.VALUE.Z = 20.0
N50 #MSG SYN["V.A.MOFFS.Z=%f", V.A.MOFFS.Z]
-> V.A.MOFFS.Z = 30.0
N60 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N70 G101 Z1
N80 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 30.0
N90 G01 Z50 F1000
N100 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 80.0
N110 G102 Z1
N120 #MSG SYN["V.A.MEIN.Z=%f", V.A.MEIN.Z]
-> V.A.MEIN.Z = 0.0
N130 G01 Z50 F1000
N140 #MSG SYN["V.A.ABS.Z=%f", V.A.ABS.Z]
-> V.A.ABS.Z = 50.0
N150 #CS OFF
N160 M30