Rechercher des données 32 bits dans un tableau
La fonction recherche la valeur spécifiée en entrée s1 dans un bloc de zones de 32 bits indiquées par la zone de départ s2_Start et la zone finale s3_End.
Entrée
Zone de 32 bits ou constante équivalente de sauvegarde de la valeur recherchée
Zone de départ de 32 bits du bloc
Zone finale de 32 bits du bloc
Le nombre de données qui correspond à s1 est sauvegardé dans le registre spécial de données DT90037 (sys_iNumberOfFoundMatches).
La position relative des premières données correspondantes, à partir de la zone de départ de 32 bits s2_Start, est sauvegardée dans le registre spécial de données DT90038 (sys_iPositionOfFirstMatch).
Les adresses des variables en entrées s2_Start et s3_End doivent être du même type d’adresse.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si s2_Start>s3_End
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si s2_Start>s3_End
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;
data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
number_matches: INT:=0;
position_1match: INT:=0;
END_VAR
La fonction est exécutée lorsque la variable start est sur TRUE.
Au lieu d’utiliser une variable d’entrée dans cet exemple, une constante (-44) est affectée à l’entrée s1. Le résultat (result) est sauvegardé dans les registres spéciaux de données DT90037 et DT90038. Les deux fonctions E_MOVE copient les résultats dans les deux variables number_matches et position_1match.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,F97_DSRC!,Instance,8,0,15,6,,?DEN?Ds1?Ds2_Start?Ds3_End?AENO);
B(B_VARIN,,start,6,1,8,3,);
B(B_VARIN,,-44,6,2,8,4,);
B(B_VARIN,,data_table[0],6,3,8,5,);
B(B_VARIN,,data_table[3],6,4,8,6,);
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,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,number_matches,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90037,6,3,8,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,position_1match,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90038,6,3,8,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F97_DSRC( s1:= -44 ,
s2_Start:= data_table[0] ,
s3_End:= data_table[3] );
number_matches:=DT90037;
position1_match:=DT90038;
END_IF;