Fine condizionale
Termina la scansione corrente del codice del programma nella posizione corrente del programma.
Ingresso
se TRUE, l'istruzione viene eseguita.
Uscita
impostata su TRUE, se l'istruzione è stata elaborata correttamente
Quando la condizione di esecuzione passa a TRUE, il programma termina la scansione corrente e inizia l'elaborazione I/O. Il programma ritorna poi al primo indirizzo.
Questa istruzione non può essere eseguita in sottoprogrammi come programmi di subroutine o programmi di interrupt. L'istruzione FP_END_SCAN deve essere utilizzata esclusivamente nell'area del programma principale.
All'interno del programma principale possono essere utilizzate due o più istruzioni FP_END_SCAN.
È necessario prestare attenzione durante l'utilizzo di una delle istruzioni elencate di seguito, le quali vengono eseguite rilevando il fronte di salita di una condizione di esecuzione (trigger).
DF (differenziale fronte di salita)
Conteggio ingresso per CT (contatore)
Conteggio ingresso per F118_UDC (contatore su/giù)
Spostamento ingresso per SR (registro spostamento)
Spostamento ingresso per F119_LRSR (registro spostamento sinistra/destra)
Esecuzione differenziale di istruzioni P (specificata da P e un numero, p.es. P20_ADD)
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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);