Temporizzatore con ritardo all'accensione
Il Function Block TON vi permette di programmare un temporizzatore con ritardo all'accensione.
Ingresso
temporizzatore attivo
un temporizzatore interno viene avviato per ciascun fronte di salita rilevato in IN
ritardo all'accensione (PT = tempo preimpostato)
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
Uscita
uscita segnale
impostata su TRUE se PT = ET
tempo trascorso
indica il valore attuale del tempo trascorso
Il valore può essere cambiato durante il conteggio scrivendo sulla variabile dall’editore di programmazione.
Q viene impostato in ritardo con il tempo definito in PT. Il reset avviene senza ritardo.
Se l'ingresso IN viene impostato solo per il periodo del tempo di ritardo PT o addirittura per un periodo più breve (t3 - t2 < PT), Q non verrà impostato.
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: TON;
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 segnale di ingresso viene trasferito a signal_output con un ritardo pari al periodo di tempo set_value.
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,TON!,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 );
Se desiderate chiamare il Function Block in una lista istruzioni, inserite quanto segue:
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
TOF1: TOF;
tPT: TIME:=T#10s;
tET: TIME:=T#0s;
bIN: BOOL:=FALSE;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
Dopo un fronte di discesa su bIN, il timer inizia a contare e Q viene impostato su TRUE. Quando bEmergencyStop è impostato su TRUE prima che il valore del timer sia trascorso, il conteggio si arresta e l'uscita Q viene reimpostata immediatamente. In questo esempio il timer viene inizializzato con l'ora preimpostata PT di 10 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,,TOF1.ET,22,2,24,4,);
B(B_CONTACT,,bIN,11,1,13,3,N);
B(B_CONTACT,,bEmergencyStop,6,1,8,3,);
L(1,2,6,2);
L(13,2,16,2);
L(8,2,11,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_FB,TOF!,TOF1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,6,2,8,4,);
B(B_COIL,,bQ,34,2,36,4,);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(21,3,27,3);
L(29,3,34,3);
L(8,3,16,3);
L(1,3,6,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND NOT bIN) then
TOF1.ET:=tPT;
end_if;
TOF1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TOF1.Q;