Dzisiaj zajmiemy się od odmierzaniem czasu, czyli timerami. Jeżeli programowałeś kiedyś mikrokontrolery, to używałeś przerwań do odliczania czasu. W sterownikach PLC też jest taka możliwość, jednak jest też inne rozwiązanie. Programiści firmy Siemens przygotowali specjalne funkcje do programowego odmierzania czasu, które realizują swoje zadania w sposób bardzo dokładny.
Funkcje czasowe – Programowe odmierzanie czasu
Podczas tworzenia kodu można wykorzystać funkcje czasomierzy dostępnych w Instructions/Basic instruction/Timer operations, co przedstawia poniższy rysunek
Dostępne są cztery funkcje realizujące różne sposoby zliczania czasu. Podczas wywołania każdej z nich należy również stworzyć blok danych typu instance DB, gdzie funkcje będą przechowywać dane. Wykorzystanie wbudowanych funkcji uniezależnia odmierzanie czasu od trwania cyklu programu. W większości przypadków funkcje spełniają oczekiwania (zakres odmierzanego czasu) i nie ma konieczności pisania własnych.
Funkcje podstawowe
TP – Generator impulsu (Generate pulse)
Funkcja pozwala na generowanie impulsu sygnału o określonym czasie trwania. Przykładowe wywołanie przedstawiono na poniższym listingu
″IDB3_TP_Timer″.TP(IN:=″TIM_FP″.TP_IN_Start, PT:=″TIM_FP″.TP_PT_Duration, //czas trwania Q=>″TIM_FP″.TP_Q, //wyjscie ET=>″TIM_FP″.TP_ET_CurrentTime); //aktualny czas
Przykładowy przebieg czasowy znajduje się na poniższym rysunku
Funkcja rozpoczyna odmierzanie czasu, gdy zmienna przypisana do parametru wejściowego IN zmieni stan z niskiego na wysoki (narastające zbocze). Parametr wejściowy PT typu Time określa długość stanu wysokiego parametru wyjściowego Q. W trakcie odmierzania czasu zmiany stanu parametru IN nie wpływają na stan parametru Q. Kolejne odmierzanie czasu może być rozpoczęte, gdy parametr Q przyjmie stan niski. Istnieje możliwość odczytania aktualnej wartości odmierzonego czasu przez wykorzystanie parametru wyjściowego ET typu Time.
TON – Opóźnienie załączenia (Generate on-delay)
Funkcja służy do opóźnienia zmiany stanu sygnału wyjściowego. Przykładowe wywołanie przedstawiono na poniższym listingu
″IDB5_TON_Timer″.TON(IN:=″TIM_FP″.TON_IN_Start, PT:=″TIM_FP″.TON_PT_Duration, //czas trwania Q=>″TIM_FP″.TON_Q, //wyjscie ET=>″TIM_FP″.TON_ET_CurrentTime); //aktualny czas
Przykładowy przebieg czasowy znajduje się na poniższym rysunku
Funkcja rozpoczyna odmierzanie czasu, gdy zmienna przypisana do parametru wejściowego IN zmieni stan z niskiego na wysoki (narastające zbocze). Parametr wejściowy PT typu Time określa długość opóźnienia, po którym parametr wyjściowy Q zmieni stan na wysoki. Parametr Q utrzymuje tak długo stan wysoki, jak parametr IN. Następna zmiana parametru IN rozpocznie kolejne odmierzanie czasu opóźnienia. Istnieje możliwość odczytania aktualnej wartości odmierzonego czasu z wykorzystaniem parametru wyjściowego ET typu Time.
TOF – Opóźnienie wyłączenia (Generate off-delay)
Funkcja służy do opóźnienia zmiany stanu sygnału wyjściowego. Przykładowe wywołanie przedstawia poniższy kod
″IDB6_TOFF_Timer″.TOF(IN:=″TIM_FP″.TOF_IN_Start, PT:=″TIM_FP″.TOF_PT_Duration, Q=>″TIM_FP″.TOF_Q, ET=>″TIM_FPr″.TOF_ET_CurrentTime);
Przykładowy przebieg czasowy znajduje się na poniższym rysunku
Zmiana stanu zmiennej przypisanej do parametru IN z niskiego na wysoki (narastające zbocze) powoduje, że parametr wyjściowy Q przyjmuje stan wysoki. Funkcja rozpoczyna odmierzanie czasu, gdy parametr wejściowy IN zmieni stan z wysokiego na niski (opadające zbocze). Parametr wejściowy PT typu Time określa długość opóźnienia, po którym parametr wyjściowy Q zmieni stan na niski. W trakcie odmierzania czasu zmiany stanu parametru IN nie wpływają na stan parametru Q. Kolejne odmierzanie czasu może być rozpoczęte, gdy parametr Q przyjmie stan niski.
TONR – opóźnienie załączenia – Time accumulator
Zmiana stanu zmiennej przypisanej do parametru IN z niskiego na wysoki (narastające zbocze) powoduje rozpoczęcie odmierzania opóźnienia. Zmiana stanu parametru IN z wysokiego na niski (narastające/opadające) powoduje zatrzymanie odmierzania opóźnienia. Kolejna zmiana stanu parametru IN z niskiego na wysoki (narastające zbocze) powoduje ponowne rozpoczęcie odmierzania czasu opóźnienia od wartości poprzednio odmierzonego czasu. Dzięki temu wartość jest ciągle zwiększana. Gdy odmierzony czas przekroczy wartość zadaną parametrem wejściowym PT, wówczas nastąpi zmiana stanu na wysoki parametru Q. Przykładowe wywołanie przedstawiono na poniższym listingu
″IDB7_TONR_Timer″.TONR(IN:=″TIM_FP″.TONR_IN_Start, R:=″TIM_FP″.TONR_R_Reset, PT:=″TIM_FP″.TONR_PT_Duration, Q=>″TIM_FP″.TONR_Q, ET=>″TIM_FP″.TONR_ET_CurrentTime);
Przykładowy przebieg czasowy znajduje się na poniższym rysunku
Zbocze narastające parametru wejściowego R powoduje skasowanie odmierzonego czasu oraz ustawienie stanu parametru Q na niski.
Funkcje dodatkowe
Dostępne są jeszcze dwie funkcje wspomagające pracę z czasomierzami. Gdy powyższe funkcje rozpoczną już odmierzanie czasu, nie ma innego sposobu na zatrzymanie odmierzania czasu lub zmianę wartości tego czasu, jak tylko użycie funkcji opisanych poniżej.
Reset timer
funkcja umożliwia skasowanie całego bloku danych instance DB powiązanych z timerem. Przykładowe wywołanie funkcji przedstawiono na poniższym listingu
RESET_TIMER(TIMER := ″IDB3_TP_Timer″);
Po wywołaniu tej funkcji już w trakcie odmierzania czasu nastąpi jego zatrzymanie.
Present timer
Funkcja umożliwia wpisanie nowego czasu do odmierzenia (parametr PT) do bloku danych instance DB powiązanego z timerem. Przykładowe wywołanie funkcji można przeanalizować na poniższym kodzie
PRESET_TIMER(PT := T#1M, TIMER := ″IDB3_TP_Timer″);
Funkcja zmiany czasu do odmierzenia musi być wywołana w trakcie jego odmierzania, aby parametr PT danego czasomierza został uaktualniony. Po wywołaniu tej funkcji Timer TP odmierzy czas jednej minuty.
Podsumowanie
Każdy funkcja timerowa potrzebuje bloku danych, który zajmuje 16 bajtów, co powoduje, że jedynie rozmiar pamięci ogranicza liczbę możliwych do użycia funkcji odmierzających czas. Należy pamiętać, że parametry wyjściowe każdej z funkcji są modyfikowane tylko w trakcie wywołania funkcji podczas każdego cyklu programu. Dlatego zaleca się umieszczanie funkcji na samym początku bloku, gdzie funkcja jest wywoływana. Podkreślić należy także, że dopiero wykorzystanie w kodzie programu któregoś z parametrów wyjściowych funkcji, pozwoli na aktualizację tych parametrów.
Kurs wideo
Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce:
Bardzo rzeczowe kompendium wiedzy.
Pozdrawiam i czekam na kolejne wpisy !
Proszę o wytłumaczenia zapisów parametrów:
Q=>″TIM_FP″.TONR_Q
PT:=″TIM_FP″.TON_PT_Duration,
Chodzi mi o część związąną z:> oraz  
Witam,
Edytor znaki zamienił. Teraz już jest ok. „Q” to parametr wyjściowy więc powinno być Q=>″TIM_FP″.TONR_Q