funkcje czasowe – odmierzanie

plc-siemens-pomiar-czasu

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

dostepne-funkcje-czasowe-siemens

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

Generator-impulsu

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

opoznienie-zalaczenia

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

opoznienie-wylaczenia

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

opoznienie-zalaczenia

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-CZPP

Więcej w kursie wideo: Chcę zostać programistą PLC

Nagrania są dostępne w wersji online jak również na płytach DVD. Napisz mailem, jaką wersje wybierasz.

Podziel się tym wpisem na:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Wykop

Komentarz

  1. Sebastian

    Bardzo rzeczowe kompendium wiedzy.
    Pozdrawiam i czekam na kolejne wpisy ! :)

    Powtórz
  2. Andrzej

    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 &nbsp

    Powtórz
    1. Tomasz Gilewski (Autor postu)

      Witam,
      Edytor znaki zamienił. Teraz już jest ok. „Q” to parametr wyjściowy więc powinno być Q=>″TIM_FP″.TONR_Q

      Powtórz

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>