Änderung der effektiven Transformation T und ihre Auswirkungen

Die meisten G-Codes definieren nur den Zielpunkt einer Bewegung. Daher behält der Interpreter die aktuelle Position des Werkzeugs bei. Dieser Punkt kann in MCS-Koordinaten (Maschinenkoordinatensystem) und PCS-Koordinaten (Programmkoordinatensystem) dargestellt werden, wobei die Gleichung CurrentPointMCS = T * CurrentPointPCS gilt. Im Gegensatz zur bisherigen Umsetzung gilt diese Transformationsgleichung auch nach einer Änderung von T. Dieses Verhalten wird durch die Anpassung von CurrentPointPCS erreicht. Der MCS-Punkt (Maschinenkoordinatensystem) wird nicht angepasst, da dies die Maschine beeinträchtigen würde. Dieses Verhalten lässt sich grob wie folgt zusammenfassen: Wenn die aktive Transformation geändert wird, wird der aktuelle PCS-Punkt (Programmkoordinatensystem) so angepasst, dass die Änderung keine Auswirkungen hat.

Beispiel:

Nach N10 lauten die Koordinaten des aktuellen PCS- (Programmkoordinatensystem) und MCS-Punktes (Maschinenkoordinatensystem) [20,10,80], da keine Transformation aktiv ist. Durch die Translation wird der aktuelle PCS-Punkt (Programmkoordinatensystem) auf [28,7,84] geändert. Die Anwendung der Translation auf diesen Punkt ergibt den unveränderten MCS-Punkt (Maschinenkoordinatensystem) [20,10,80]. Die Translation zeigt also keine Wirkung, obwohl sie aktiv ist. Der Satz N20 programmiert eine Bewegung zum PCS-Punkt (Programmkoordinatensystem) [25,7,10], der auf die MCS-Koordinate (Maschinenkoordinatensystem) [17,10,6] abgebildet wird. Nach dem Aufruf von transPop() wird der aktuelle PCS-Punkt (Programmkoordinatensystem) auf den aktuellen MCS-Punkt (Maschinenkoordinatensystem) gesetzt.

N10 G01 X20 Y10 Z80 F6000
!transTranslate(-8,3,-4);
N20 G01 X25 Z10
!transPop();
M02

Beispiel:

Wenn der Benutzer möchte, dass der PCS-Punkt (Programmkoordinatensystem) unverändert bleibt, muss er ihn abrufen und programmieren, wie im folgenden Code gezeigt. Der Wunsch nach einem unveränderten PCS-Punkt (Programmkoordinatensystem) deutet jedoch in der Regel auf einen schlechten Programmierstil hin. Eigentlich sollte der folgende Code nicht erforderlich sein.

{
VAR
    pcsX, pcsY, pcsZ : LREAL;
END_VAR

// … G-Code …

frameGet(x=>pcsX,y=>pcsY,z=>pcsZ);
// … modify transformations …
!G01 x=pcsX y=pcsY z=pcsZ F6000
}