# 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

Abb.: Messen mit einem Messtasterwerkzeug mit 2mm Radius

## 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

Abb.: Messoffset

## 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 Transformation (2,5D) | Mit kartesischer Transformation #CS ON | Mit kinematischer Transformation #TRAFO ON
MESS.X | ACS-Position (beinhaltet alle Verschiebungen) | Umrechnung der ACS-Position inklusive Verschiebungen ins aktive Koordinatensystem (PCS) | Umrechnung der ACS-Position inklusive Verschiebungen ins aktive Koordinatensystem (PCS)
MEAS.ACS.VALUE.X | ACS-Position (beinhaltet alle Verschiebungen) | ACS-Position (beinhaltet alle Verschiebungen) | ACS-Position (beinhaltet alle Verschiebungen)
MEAS.PCS.VALUE.X | PCS Position (ohne Verschiebungen) | Umrechnung der ACS-Position ins aktive Koordinatensystem (PCS) ohne Verschiebungen | Umrechnung der ACS-Position ins aktive Koordinatensystem (PCS) ohne Verschiebungen
MOFFS.X | = V.A.MESS.X – V.A.PROG.X – Zero Shifts – Tool Offset | = V.A.MESS.X – V.A.PROG.X – Zero Shifts – Tool Offset | = V.A.MESS.X – V.A.PROG.X – Zero Shifts

## 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

Abb.: Messen ohne Verschiebungen

## 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

Abb.: Messen mit Bezugspunktverschiebung

## 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

Abb.: Messen mit CS, nur Verschiebung

## 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

Abb.: Messen mit CS, Verschiebung und Rotation