# Drehreihenfolge

Bei vollständigen Transformationen kann die Reihenfolge der ausgeführten Rotationen um die 3 Drehachsen beliebig festgelegt werden (s. P-CHAN-00112). Falls dies gewünscht ist, muss dies auch die TcCOM-Transformation berücksichtigen. Die aktuelle Einstellung wird der Transformation daher im Parameter p->actual_orientation_mode übergeben. Die in der Transformation unterstützten Drehsequenzen können der CNC im Datum p->supported_orientation_modes bei Aufruf der Funktion TrafoSupported() mitgeteilt werden. Bei angewählter Transformation prüft die CNC die Einstellung in P-CHAN-00112 auf Plausibilität und generiert die Fehlermeldung P-ERR-292045 falls die gewählte Rotationsreihenfolge von der Transformation nicht unterstützt wird.

## CNC --> TcCOM-Transformation:

p->actual_orientation_mode | Bedeutung
EcCncTrafoOri_None | Keine Rotation
EcCncTrafoOri_YPR | Yaw-Pitch-Roll Rotationsreihenfolge: 1. Drehung um Z, 2. Drehung negativ um Y, 3. Drehung um X
EcCncTrafoOri_CBC1 | Euler Rotationsreihenfolge: 1. Drehung um Z, 2. Drehung um Y, 3. Drehung um Z‘
EcCncTrafoOri_CBA | 1. Drehung im Z, 2. Drehung um Y, 3. Drehung um X
EcCncTrafoOri_CAB | 1. Drehung um Z, 2. Drehung um X, 3. Drehung um Y
EcCncTrafoOri_AB | 1. Drehung um X, 2. Drehung um Y
EcCncTrafoOri_BA | 1. Drehung um Y, 2. Drehung um X

## TcCOM-Transformation --> CNC:

p->supported_orientation_modes | Bedeutung
.f_YPR | = TRUE, Trafo unterstützt Drehreihenfolge YPR
.f_CBC1 | = TRUE, Trafo unterstützt Drehreihenfolge CBC‘
.f_CBA | = TRUE, Trafo unterstützt Drehreihenfolge CBA
.f_CAB | = TRUE, Trafo unterstützt Drehreihenfolge CAB
.f_AB | = TRUE, Trafo unterstützt Drehreihenfolge AB
.f_BA | = TRUE, Trafo unterstützt Drehreihenfolge BA

Standardmäßig verwendet die CNC die Einstellung EcCncTrafoOri_YPR (Yaw->Pitch->Roll), entsprechend ist das Datum p->supported_orientation_mode.f_YPR standardmäßig auf den Wert TRUE gesetzt.

## Beispiel

HRESULT <UserTrafo>::TrafoSupported(PTcCncTrafoParameter p, bool fwd)

{

...

/* Transformation unterstuetzt YPR und Euler Drehreihenfolge. */

p->supported_orientation_modes.f_YPR = TRUE;

p->supported_orientaiton_modes.f_CBC1 = TRUE;

...

return S_OK;

}

HRESULT <UserTrafo>::Backward(PTcCncTrafoParameter p)

{

…

if (EcCncTrafoOri_CBC1 == p->actual_orientation_mode)

{

/* Drehreihenfolge nach Euler aktiv */

}

else

{

...

}

return S_OK;

}