F97_DSRC

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.

Paramètres

Entrée

s1 (DWORD, DINT, UDINT, DATE, TOD, DT)

Zone de 32 bits ou constante équivalente de sauvegarde de la valeur recherchée

s2_Start (DWORD, DINT, UDINT, DATE, TOD, DT)

Zone de départ de 32 bits du bloc

s3_End (DWORD, DINT, UDINT, DATE, TOD, DT)

Zone finale de 32 bits du bloc

Remarques

  1.  (1) Valeur recherchée
  2.  (2) Données du tableau de 32 bits
  • 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.

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 s2_Start>s3_End

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si s2_Start>s3_End

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
		start: BOOL:=FALSE;
		data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
		number_matches: INT:=0;
		position_1match: INT:=0;
	END_VAR

Corps du POU

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.

Corps en LD

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

Corps en ST

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;

Corps en IL

Modifié le : 2024-12-18Commentaires sur cette pageAssistance téléphonique