Fin conditionnelle
Cette instruction arrête la scrutation en cours du code programme à la position du programme en cours.
Entrée
Si TRUE, l’instruction est exécutée.
Sortie
Devient TRUE, si l’instruction a été exécutée avec succès.
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)
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
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
FP_INC(d := iCounterExecuted);
If (bEndCurrentScan) then
FP_END_SCAN();
End_if;
FP_INC(d := iCounterNotExecuted);