Wszystkie timery posiadają dwa wejścia i dwa wyjścia:
- wejście IN : BOOL
- wejście PT : TIME
- wyjście Q : BOOL
- wejście ET : TIME
TON
To chyba najczęściej wykorzystywany bloczek. Kiedy na wejściu IN pojawi się zbocze narastające, wtedy po upłynięciu PT czasu na wyjściu Q pojawi się TRUE. Z kolei FALSE na wejściu IN skutkuje FALSE na wyjściu Q natychmiastowo. Wyjście ET odmierza natomiast czas.
Dla przykładu kawałek kodu, który zgłasza alarm, jeśli pomiar jest wyższy od poziomu alarmowego przez 5 sekund.
VAR_INPUT pomiar : REAL; poziomAlarmowy : REAL; END_VAR VAR_OUTPUT alarm : BOOL; END_VAR VAR timerAlarmowy : TON; END_VAR
timerAlarmowy(IN := pomiar > poziomAlarmowy, PT := T#5s, Q => alarm);
Drugi często spotykany przykład, grupa instukcji wykonywana co 1 sekundę.
timer(IN := TRUE, PT := T#1s); IF timer.Q THEN timer(IN := FALSE); instrukcje wykonywane co 1 sekundę END_IF
TOF
Bloczek podobny to poprzedniego. Można powiedzieć, że działa odwrotnie. Tym razem TRUE na wyjściu Q pojawia się natychmiastowo po pojawieniu się TRUE na wejściu IN. Zbocze opadające na wejściu IN spowoduje natomiast wystawienie FALSE na wyjściu Q dopiero, kiedy mienie PT czasu.
Analogiczny przykład z alarmem, tym razem napisany z użyciem TOF.
VAR_INPUT pomiar : REAL; poziomAlarmowy : REAL; END_VAR VAR_OUTPUT alarm : BOOL; END_VAR VAR timerAlarmowy : TOF; END_VAR
timerAlarmowy(IN := pomiar <= poziomAlarmowy, PT := T#5s); alarm := NOT timerAlarmowy.Q;
TP
Bloczek trochę inny niż dwa pozostałe. Wystawia TRUE na wyjściu Q natychmiastowo po pojawieniu się zbocza narastającego na wejściu IN, ale po upłynięciu czasu PT zmienia stan wyjścia Q na FALSE niezależnie od tego co działo się przez ten czas z wejściem Q. Od tego momentu znowu oczekuje na zbocze narastające.
Przykład, fragment kodu, który uruchamia trwające minutę czyszczenie, kiedy otrzyma sygnał o zabrudzeniu.
VAR_INPUT zabrudzenie : BOOL; END_VAR VAR_OUTPUT czyszczenie : BOOL; END_VAR VAR timerCzyszczenia : TP; END_VAR
timerCzyszczenia(IN := zabrudzenie, PT := T#1m, Q => czyszczenie);