Podczas realizacji aplikacji do przemysłu często należy liczyć pojawiające się zdarzenia. W przypadku sterownika PLC można to zrealizować na dwa sposoby. Dzisiaj przedstawię Ci dostępne rozwiązania które są dostępnych w przypadku sterownika S7-1200 oraz S7-1500 firmy Siemens.
Liczniki
Zliczanie zdarzeń można zrealizować sprzętowo lub programowo. Poniżej opis każdego z nich
Obsługa sprzętowa
Sprzętowe liczniki są wykorzystywane do zdarzeń, które pojawiają się z częstotliwością do 100 kHz w przypadku wbudowanych wejść cyfrowych w sterowniku oraz 200 kHz w przypadku płytki sygnałowej wkładanej w przedni panel sterownika. Ogólnie mówiąc są to zdarzenia pojawiające się znaczniej częściej, niż wynosi czas cyklu programu. Dzięki temu można odebrać wszystkie informacje z zewnątrz. Możliwe tryby pracy to szybki licznik lub miernik częstotliwości impulsów. Każdy z modeli CPU ma inną liczbę sprzętowych liczników. Konfiguracja trybu pracy oraz przerwań odbywa się w TIA Portal. Każdy licznik sprzętowy można powiązać z dowolnym wejściem cyfrowym w przypadku sterowników z firmwarem V4.0 lub wyższym. Do obsługi wykorzystuje się funkcję CTLR_HSC() znajdującą się w Instruction/Technology/Counting. Przykładowe wywołanie przedstawiono poniżej.
″CTRL_HSC_IDB1″(HSC:=W#16#0, //Identifikator HSC z konfiguracji w TIA Portal (zakladka System constants w PLC tags) DIR:=False, //TRUE =zadanie nowego kierunku CV:=False, //TRUE = zadanie ustalenia nowej wartosci RV:=False, //TRUE = zadanie ustalenia nowej wartosci referencyjnej PERIOD:=False, //tylko tryb pomiaru częstotliwosci (TRUE = zadanie ustalenia nowej wartosci okresu) NEW_DIR:=0, //1 = nowy kierunek w przod; -1 = nowy kierunek wstecz NEW_CV:=L#0, //nowa wartosc zliczen NEW_RV:=L#0, //nowa wartosc referencyjna NEW_PERIOD:=0, //tylko tryb pomiaru czestotliwosci (nowa wartosc okresu w sekundach BUSY=>_bool_out_, //zajety STATUS=>_word_out_); //kod warunkowy wykonania
Do tej funkcji należy przypisać blok danych instance DB. Funkcję CTRL_HSC() umieszcza się zazwyczaj w przerwaniu (Hardware interrupt) powiązanym z danym licznikiem.
Obsługa programowa
Poza sprzętowym sposobem zliczania zdarzeń, które pojawiają się częściej, niż wynosi czas trwania cyklu, są jeszcze programowe liczniki dostarczone wraz ze środowiskiem TIA Portal, które można wykorzystać do zliczania zdarzeń, które pojawiają się rzadziej lub z taką samą częstotliwością, ile wynosi czas trwania cyklu. Dostępne są trzy funkcje realizujące różne sposoby zliczania zdarzeń. Podczas wywołania każdej z nich należy również stworzyć blok danych typu instance DB, gdzie funkcje będą przechowywać dane. Podczas tworzenia kodu można wykorzystać funkcje licznikowe opisane poniżej. Każda z funkcji przyjmuje kilka parametrów. Został utworzony blok danych o nazwie COU_FP, gdzie zostały utworzone odpowiednie parametry do każdej z funkcji licznikowych.
Zliczanie w górę
Funkcja CTU() służy do zliczania pojawiających się zdarzeń w górę. Przykładowe wywołanie przedstawiono poniżej
″IDB8_CTU_Counter″.CTU(CU:=″COU_FP″.CTU_CU_Count, R:=″COU_FP″.CTU_R_Reset, PV:=″COU_FP″.CTU_PV,//ustalona liczba zliczeń Q=>″COU_FP″.CTU_Q_CounterStatus, CV=>″COU_FP″.CTU_CV_CurrentValue);
Podczas wywołania został utworzony blok danych instance DB o nazwie IDB8_CTU_Counter. Zasadę działania tej funkcji można także zaobserwować na poniższym przebiegu czasowym
Zmiana stanu zmiennej przypisanej do parametru CU z niskiego na wysoki (narastające zbocze) powoduje, że funkcja zwiększa liczbę zliczeń o jeden. Jeżeli liczba zliczeń będzie większa lub równa parametrowi PV, to parametr Q przyjmie stan wysoki. Skasowanie aktualnej liczby zliczeń jest realizowane przez zmianę stanu parametru wejściowego R z niskiego na wysoki. Parametr wyjściowy CV zawiera aktualną liczbę zliczeń. W tym wypadku do parametru PV przypisano wartość 3.
Zliczanie w dół
Funkcja CTD() służy do zliczania pojawiających się zdarzeń w dół. Przykładowe wywołanie pokazano poniżej
″IDB9_CTD_Counter″.CTD(CD:=″COU_FP″.CTD_CD_Count, LD:=″COU_FP″.CTD_LD_Load, PV:=″COU_FP″.CTD_PV, Q=>″COU_FP″.CTD_Q_CounterStatus, CV=>″COU_FP″.CTD_CV_CurrentValue);
Podczas wywołania został utworzony blok danych instance DB o nazwie IDB9_CTD_Counter. Przebieg czasowy przestawiający pracę tej funkcji przedstawiono poniżej
Zmiana stanu zmiennej przypisanej do parametru CU z niskiego na wysoki (narastające zbocze) powoduje, że funkcja zmniejsza liczbę zliczeń o jeden. Jeżeli liczba zliczeń będzie równa zero, to parametr Q przyjmie stan wysoki. Wartość parametru wejściowego PV jest wpisywana do licznika, gdy parametr wejściowy LOAD zmieni stan z niskiego na wysoki. Podczas wysokiego stanu parametru LOAD każda zmiana stanu parametru CU nie powoduje zmniejszenia liczby zliczeń. Parametr wyjściowy CV zawiera aktualną liczbę zliczeń.
Zliczanie w górę i w dół
Funkcje opisane wcześniej zostały ze sobą połączone, co spowodowało powstanie funkcji CTUD(). Służy ona do zliczania pojawiających się zdarzeń w górę lub dół. Przykładowe wywołanie pokazano poniżej
″IDB10_CTUD_Counter″.CTUD(CU:=″COU_FP″.CTUD_CU_CountUp, CD:=″COU_FP″.CTUD_CD_CountDown, R:=″COU_FP″.CTUD_R_Reset, LD:=″COU_FP″.CTUD_LD_Load, PV:=″COU_FP″.CTUD_PV, QU=>″COU_FP″.CTUD_QU_CounterUpStatus, QD=>″COU_FP″.CTUD_QD_CounterDownStatus, CV=>″COU_FP″.CTUD_CV_CurrentValue);
Wykres czasowy tej funkcji zamieszczono poniżej
Zmiana stanu zmiennej przypisanej do parametru CU z niskiego na wysoki (narastające zbocze) powoduje, że funkcja zwiększa liczbę zliczeń o jeden. Zmiana stanu parametru CD z niskiego na wysoki (narastające zbocze) powoduje, że funkcja zmniejsza liczbę zliczeń o jeden. Jeżeli liczba zliczeń (parametr CV) będzie większa lub równa parametrowi PV, to parametr wyjściowy QU przyjmie stan wysoki. Jeżeli liczba zliczeń (parametr CV) będzie mniejsza lub równa zero, wówczas parametr wyjściowy QD przyjmie stan wysoki. Wartość parametru wejściowego PV jest wpisywana do licznika, gdy parametr wejściowy LOAD zmieni stan z niskiego na wysoki. Skasowanie aktualnej liczby zliczeń jest realizowane przez zmianę stanu parametru wejściowego R z niskiego na wysoki.
Zadanie
Utwórz nowy projekt w TIA Portal ze sterownikiem S7-1200. Dodaj nowy blok danych o nazwie COU_FP. W bloku należy umieścić odpowiednie zmienne, które pojawiły się w przedstawionych listingach. Następnie wywołaj w bloku OB1 każdą z funkcji licznikowych. Przetestuj ich działanie w praktyce.
Kurs wideo
Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce: