FP_ATAN2

Conversion des coordonnées en radians

Cette instruction FP renvoie l’angle j des coordonnées cartésiennes (x,y) dans l’intervalle de -π à +π.

Paramètres

Entrée

s1_y (ANY_REAL)

Coordonnée y cartésienne

s2_x (ANY_REAL)

Coordonnée x cartésienne

Sortie

d (REAL)

Résultat en radians

Remarques

Chaque position P des coordonnées à deux dimensions peut être définie par des coordonnées cartésiennes P(x,y) ou par des coordonnées polaires P(r,j) (r = rayon, j = angle).

Définissez FP_ATAN2 de la manière suivante :

ATAN2_YX(y,x)

x

y

x > 0

x < 0

y ³ 0

y < 0

x = 0

y > 0

y < 0

Erreur d’opération

y = 0

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
  • Si la valeur spécifiée pour s1_y (coordonnée  y) ou s2_x (coordonnée x) n’est pas un nombre réel

  • Si 0,0 est spécifié pour s1_y (coordonnée y) et 0,0 pour s2_x (coordonnée x)

Exemple

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.

	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

Corps en LD

La fonction est exécutée lorsque la variable bStart est définie sur TRUE.

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

Corps en ST

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

Modifié le : 2024-03-19Commentaires sur cette pageAssistance téléphonique