Données à virgule flottante -> données INTEGER de 16 bits (INTEGER la plus élevée inférieure ou égale à la valeur à virgule flottante)
La fonction convertit des données à virgule flottante en entrée s dans l’intervalle de -32767.99 à 32767.99 en données de type INTEGER (avec signe +/-). Le résultat de la fonction est renvoyé en sortie d.
Entrée
Données sources de type REAL (2 mots)
Sortie
Destination de sauvegarde des données converties
La valeur de type entier convertie en sortie d est toujours inférieure ou égale à la valeur à virgule flottante en entrée s :
Lorsqu’une valeur à virgule flottante est positive en entrée, la valeur positive précédant la virgule est renvoyée en sortie.
Lorsqu’une valeur à virgule flottante est négative en entrée, la valeur inférieure suivante qui précède la virgule est renvoyée en sortie.
Si la valeur à virgule flottante est suivie uniquement de zéros après la virgule, la valeur précédant la virgule est renvoyée.
Si la valeur en entrée s n’est pas un nombre de type REAL ou le résultat de la conversion excède la zone de 16 bits en sortie d.
Si la valeur en entrée s n’est pas un nombre de type REAL ou le résultat de la conversion excède la zone de 16 bits en sortie d.
Si le résultat calculé est 0.
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
start: BOOL:=FALSE;
(*activates the function*)
input_value: REAL:=-1.234;
output_value: INT:=0;
(*result after a 0->1 leading
edge from start: 32*)
END_VAR
Dans cet exemple, la variable d’entrée input_value est déclarée. Vous pouvez aussi entrer directement une constante au contact d’entrée de la fonction.
La fonction est exécutée lorsque la variable start est sur TRUE. Elle convertit la valeur à virgule flottante -1,234 en un nombre entier -2 qui est transféré vers la variable output_value en sortie. Puisque le nombre entier ne peut pas être supérieur à la valeur à virgule flottante, la valeur est arrondie au nombre entier inférieur.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,output,7,1,9,3,);
B(B_VARIN,,input_value,7,2,9,4,);
B(B_VAROUT,,output_value,17,2,19,4,);
B(B_F,F327_INT,,9,0,17,4,,?DEN?D@'s'?AENO?Cd);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start THEN
F327_INT(input_value, output_value);
END_IF;