FP_END_SCAN

Fin conditionnelle

Cette instruction arrête la scrutation en cours du code programme à la position du programme en cours.

Paramètres

Entrée

EN (BOOL)

Si TRUE, l’instruction est exécutée.

Sortie

ENO (BOOL)

Devient TRUE, si l’instruction a été exécutée avec succès.

Remarques

  • Lorsque la condition d’exécution devient TRUE, le programme termine la scrutation en cours et commence le traitement des E/S. Puis, le programme revient à la première adresse.

  • Cette instruction ne peut pas être exécutée dans des sous-programmes tels que des sous-routines ou des programmes d’interruption. Utilisez l’instruction FP_END_SCAN uniquement dans des programmes principaux.

  • Plusieurs instructions FP_END_SCAN peuvent être utilisées dans un programme principal.

  • Vous devez être prudent lorsque vous utilisez une des instructions indiquées ci-dessous. Ces instructions sont exécutées lors de la détection d’un front montant d’une condition d’exécution (déclencheur).

    • DFDF (front montant différentiel)

    • Entrée comptage pour CT (compteur)

    • Entrée comptage pour F118_UDC (compteur croissant/décroissant)

    • Entrée décalage pour SR (registre à décalage)

    • Entrée décalage pour F119_LRSR (registre à décalage droite/gauche)

    • Exécution différentielle des instructions P (spécifiées par P et un nombre, par ex. P20_ADD)

Exemple

Gestionnaire des tâches

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
		bEndCurrentScan: BOOL:=FALSE;
		iCounterExecuted: INT:=0;
		iCounterNotExecuted: INT:=0;
	END_VAR

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 := 4 ;
        NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_F,FP_END_SCAN!,,19,0,27,3,,?DEN?AENO);
B(B_CONTACT,,bEndCurrentScan,6,1,8,3,);
L(1,2,6,2);
L(8,2,19,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterNotExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Exemple Program_2

Corps en ST

FP_INC(d := iCounterExecuted);
If (bEndCurrentScan) then
    FP_END_SCAN();
End_if;
FP_INC(d := iCounterNotExecuted);

Modifié le : 2023-03-10Commentaires sur cette pageAssistance téléphonique