Convertire dati di coordinata in radianti
Questa istruzione FP restituisce l'angolo j delle coordinate cartesiane (x,y) entro l'intervallo compreso tra -π e +π.
Ingresso
Coordinata y cartesiana
Coordinata x cartesiana
Uscita
Risultato in radianti
Ogni posizione P delle coordinate bidimensionali può essere definita da coordinate cartesiane P(x,y) o da coordinate polari P(r,j) (r = raggio, j = angolo).
Definite FP_ATAN2 come segue:
ATAN2_YX(y,x) |
x |
y |
---|---|---|
x > 0 |
||
x < 0 |
y ³ 0 |
|
y < 0 |
||
x = 0 |
y > 0 |
|
y < 0 |
||
Errore di funzionamento |
y = 0 |
se si specifica un numero non reale per s1_y (coordinata y) o s2_x (coordinata x)
se si specifica 0,0 per s1_y (coordinata y) e 0,0 per s2_x (coordinata x)
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
bStart: BOOL:=FALSE;
(*activates the instruction*)
rPhi1Rad: REAL:=0.0;
rPhi1Degree: REAL:=0.0;
END_VAR
VAR CONSTANT
DEGR_OF_RAD: REAL:=57.295779513082320876798154814105;
END_VAR
VAR
END_VAR
Quando la variabile bStart è impostata su TRUE, la funzione viene eseguita.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,FP_ATAN2!,,10,1,16,6,,?DEN?Ds1_y?Ds2_x?AENO?Cd);
B(B_VARIN,,10.0,8,3,10,5,);
B(B_VARIN,,-10.0,8,4,10,6,);
B(B_VAROUT,,rPhi1Rad,16,3,18,5,);
B(B_CONTACT,,bStart,3,2,5,4,);
L(1,3,3,3);
L(5,3,10,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,@MUL-2!,,11,1,16,4,,?D?D?C);
B(B_VARIN,,rPhi1Rad,9,1,11,3,);
B(B_VARIN,,DEGR_OF_RAD,9,2,11,4,);
B(B_VAROUT,,rPhi1Degree,16,1,18,3,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
rPhi1Rad:=ATAN2_YX(y := 10.0, x := -10.0); (* Result: 2.3561947 *)
rPhi1Degree := rPhi1Rad * DEGR_OF_RAD; (* Result: 135.00002 *)