Compter le nombre de fronts montants pour chaque bit
Cette instruction FP compte le nombre de fronts montants de chaque bit dans la zone de données spécifiée par l’adresse de départ s1_Start et le nombre de bits n_Bits. Les résultats des comptages sont enregistrés en n_Bits éléments du type de données DINT ou UDINT à partir de d_Start.
Entrée
Adresse de départ de la zone de données des bits à évaluer.
Utilisez la formule suivante pour déterminer la taille minimale de cette zone de données :
Toutes les positions décimales du résultat de cette division de nombres entiers doivent être supprimées.
n_Bits de 1–16 => la taille est de 1 mot.
n_Bits de 17–32 => la taille est de 2 mots...
Adresse de départ de la zone de travail. Sa taille doit être identique à celle de s1_Start.
Nombre de bits (intervalle autorisé : 1–65535)
Sortie
Adresse de départ de la zone de données dans laquelle les résultats des comptages sont enregistrés. Ces résultats se composent d’un nombre minimum de n_Bits éléments de type de données DINT ou UDINT. Utilisez les instructions Adr_Of_Var_I (LD/FBD) ou Adr_Of_Var (ST) pour affecter cette zone de données aux résultats.
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;
iTestIndex: INT:=0;
iWorkAreaCount: INT:=0;
arrCountEvents: ARRAY [0..5] of dint:=[6(0)];
END_VAR
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_EVENTS_COUNT!,,12,0,22,6,,?DEN?Ds1_Start?Ds2_WorkArea?Dn_Bits?AENO?Cd_Start);
B(B_VARIN,,iTestIndex,10,2,12,4,);
B(B_VARIN,,iWorkAreaCount,10,3,12,5,);
B(B_VARIN,,6,10,4,12,6,);
B(B_VAROUT,,arrCountEvents[0],33,2,35,4,);
B(B_CONTACT,,bStart,3,1,5,3,);
B(B_F,Adr_Of_Var_O!,,25,2,33,4,,?D?C);
L(1,2,3,2);
L(5,2,12,2);
L(22,3,25,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (bStart) then
FP_EVENTS_COUNT(s1_Start := iTestIndex,
s2_WorkArea := iWorkAreaCount,
n_Bits := 6,
d_Start => Adr_Of_Var(arrCountEvents[0]));
END_IF;