FP_ATAN2

Convertire dati di coordinata in radianti

Questa istruzione FP restituisce l'angolo j delle coordinate cartesiane (x,y) entro l'intervallo compreso tra -π e +π.

Parametri

Ingresso

s1_y (ANY_REAL)

Coordinata y cartesiana

s2_x (ANY_REAL)

Coordinata x cartesiana

Uscita

d (REAL)

Risultato in radianti

Note

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

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.
  • 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)

Esempio

Intestazione del POU

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

Corpo LD

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

Corpo ST

rPhi1Rad:=ATAN2_YX(y := 10.0, x := -10.0); (* Result: 2.3561947 *)
rPhi1Degree := rPhi1Rad * DEGR_OF_RAD;     (* Result: 135.00002 *)

L'ultima revisione: 2024-03-19Feedback su questa paginaPanasonic hotline