niedziela, 17 stycznia 2016

Podstawy ST - timery

Odliczanie czasu to w programowaniu PLC to rzecz bardzo powszechna, w przeciwieństwie do programów desktopowych czy webowych. Tam czynności najczęściej wykonujemy najszybciej jak to możliwe. Fizyczne urządzenie natomiast nie reaguje natychmiastowo. Może na przykład być uszkodzone, a w nieskończoność czekać nie można.

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);

Brak komentarzy:

Prześlij komentarz