Temporizzatore con periodo definito
Il Function Block TP vi permette di programmare un temporizzatore a impulsi con un periodo di clock definito.
Ingresso
generatore clock
se viene rilevato un fronte di salita in IN, viene generato un clock con il periodo definito in PT
periodo di clock
valore a 16 bit: 0–327.27s
valore a 32 bit: 0–21,474,836.47s (valore a 32 bit non è disponibile per FP3, FPC, FP5, FP10/10S)
risoluzione 10ms ciascuno
un temporizzatore con periodo PT viene prodotto per ciascun fronte di salita in IN. Un nuovo fronte di salita rilevato in IN all'interno del periodo di impulso non produce un nuovo temporizzatore.
Uscita
uscita segnale
viene impostata per il periodo di PT non appena viene rilevato un fronte di salita in IN
tempo trascorso
contiene il periodo trascorso del temporizzatore. Se PT = ET, Q verrà resettato
Il valore può essere cambiato durante il conteggio scrivendo sulla variabile dall’editore di programmazione.
FP2, FP2SH e FP10SH usare un valore a 32 bit per PT.
Indipendentemente dal periodo di attivazione del segnale IN, viene generato un clock all'uscita Q con una lunghezza definita da PT. Il Function Block TP viene attivato se viene rilevato un fronte di salita all'ingresso IN.
Un fronte di salita all'ingresso IN non ha alcuna influenza durante l'elaborazione di PT.
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
copy_name: TP;
start: BOOL:=FALSE;
set_value: TIME:=T#0s;
signal_output: BOOL:=FALSE;
current_value: TIME:=T#0s;
END_VAR
Se start viene impostato (stato = TRUE), il clock viene emesso in signal_output fino a quando il set_value per il periodo di clock viene raggiunto.
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_CONTACT,,start,3,2,5,4,);
B(B_VARIN,,set_value,7,3,9,5,);
B(B_VAROUT,,current_value,14,3,16,5,);
B(B_COIL,,signal_output,21,2,23,4,);
B(B_FB,TP!,copy_name,9,1,14,5,,?BIN?BPT?AQ?AET);
L(1,3,3,3);
L(1,0,1,6);
L(5,3,9,3);
L(14,3,21,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
copy_name( IN:= start ,
PT:= set_value ,
Q=> signal_output ,
ET=> current_value );
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
TP1: TP;
bIN: BOOL:=FALSE;
tPT: TIME:=T#30s;
tET: TIME:=T#0s;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
Dopo un fronte di salita su IN, il timer inizia a contare e Q viene impostato su TRUE. Quando bEmergencyStop è impostato su TRUE prima che il periodo del clock sia trascorso, il conteggio si arresta e l'uscita Q viene reimpostata immediatamente. In questo esempio il timer viene inizializzato con il periodo clock PT di 30 s.
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,E_MOVE!,,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,tPT,14,2,16,4,);
B(B_VAROUT,,TP1.ET,22,2,24,4,);
B(B_CONTACT,,TP1.Q,12,1,14,3,);
B(B_CONTACT,,bEmergencyStop,7,1,9,3,);
L(14,2,16,2);
L(1,2,7,2);
L(9,2,12,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,7,2,9,4,);
B(B_COIL,,bQ,33,2,35,4,);
B(B_FB,TP!,TP1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(1,3,7,3);
L(9,3,16,3);
L(29,3,33,3);
L(21,3,27,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND TP1.Q) then
TP1.ET:=tPT;
end_if;
TP1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TP1.Q;