W poprzednim wydaniu „Pod kontrolą” rozpoczęliśmy cykl szkoleń dotyczących programowania sterowników PLC marki TECO. W pierwszej odsłonie została przedstawiona charakterystyka oraz możliwości funkcjonalne przekaźnika programowalnego SG2 wraz z opisem podstawowych funkcji logicznych oferowanych przez dedykowane środowisko programistyczne SG2client. Dodatkowo stworzone oraz scharakteryzowane zostały pierwsze programy wykorzystujące opisane instrukcje. O ile realizacja wielu prostych projektów może opierać się o podstawową funkcjonalność programową sterownika, to bardziej zaawansowane aplikacje mogą wymagać wykorzystania dodatkowych funkcji, które zdecydowanie rozszerzają możliwości urządzenia. Postarajmy się przybliżyć nieomawiane jeszcze instrukcje oraz ich praktyczne zastosowanie.
CHARAKTERYSTYKA INSTRUKCJI LICZNIKOWYCH
Licznik jest typem instrukcji wyjściowej, realizującej zliczanie ilości impulsów pojawiających się na powiązanej z nim cewce inicjującej (może to być zarówno styk wejściowy jak i cewka wewnętrzna). Za każdym razem gdy binarny sygnał inicjujący zmieni wartość w sposób kierunkowy (OFF › ON), licznik zostaje zwiększony o jeden. Bardzo ważnym elementem takiej instrukcji jest wewnętrzne zabezpieczenie chroniące przed niechcianą inkrementacją, czyli zwiększaniem wartości licznika związanym z cyklem skanowania programu. Cewka licznikowa musi „pamiętać” poprzedni stan styku inicjującego, gdyż w przeciwnym wypadku przy każdym skanowaniu następowałaby modyfikacja licznika. Zabezpieczenie to realizowane jest przez zastosowanie omawianej w poprzednim wydaniu wewnętrznej funkcji wykrywania zbocza narastającego, która zezwala na propagację sygnału inicjującego tylko raz, w momencie zmiany sygnału.
Istnieje kilka typów funkcji licznikowych, różniących się szczegółową funkcjonalnością. W zależności od specyfikacji problemu programistycznego, użytkownik musi dokonać wyboru odpowiedniego licznika. Różnice dotyczą takich cech jak zatrzymanie lub kontynuowanie inkrementacji po osiągnięciu wartości zadanej oraz podtrzymanie aktualnej wartości licznika po zaniku zasilania.
Na ilustracji obok przedstawione zostało okno konfiguracyjne instrukcji licznikowej.
W pierwszej kolejności wybieramy numer licznika (do dyspozycji mamy 32 sztuki) oraz jeden z ośmiu typów, przy czym najczęściej stosowany jest typ nr 1 (licznik z zatrzymaniem inkrementacji bez podtrzymania wartości zadanej). Użytkownik powinien także zdefiniować źródło wartości zadanej tzw. preset, który może być dynamicznie przepisywany np. z wejścia analogowego lub zdefiniowany w sposób statyczny. Umieszczanie instrukcji na schemacie kończy się w momencie wyboru kierunku zliczania oraz sposobu resetowania licznika. Brak zdefiniowania obu styków oznacza wybór licznika zliczającego impulsy w górę, bez możliwości resetowania jego aktualnej wartości. Sytuacja taka zdecydowanie ogranicza funkcjonalność instrukcji, dlatego też istotne jest aby wejście resetujące zostało odpowiednio skonfigurowane przez użytkownika. Na ilustracji poniżej przedstawiona została skonfigurowana instrukcja licznikowa wraz z cewką inicjującą M01 (jest to wewnętrzny znacznik bitowy, sterowany przez użytkownika lub program).
Pojedyncze kliknięcie na wyjście licznikowe spowoduje pojawienie się bloku zawierającego dane dotyczące konfiguracji licznika C01. Z informacji widocznych na ilustracji wynika, iż wartość zadana wynosi 5, natomiast aktualna wartość akumulatora (ilość zliczeń) jest równa 0. Kierunek zliczania określa znacznik M02 a bit M03 jest odpowiedzialny za resetowanie. Każdorazowa inicjacja styku M01 skutkuje zwiększeniem licznika o jeden. W momencie osiągnięcia przez licznik wartości zadanej, aktywowana zostaje cewka C01 i dalsze zliczanie jest zablokowane (co wynika bezpośrednio z typu wybranego licznika). Wykorzystanie stanu instrukcji licznikowej w programie, odbywa się poprzez adresację odpowiedniego styku wejściowego nazwą danego licznika, w tym wypadku C01.
CHARAKTERYSTYKA INSTRUKCJI CZASOWYCH (TIMERÓW)
W sytuacji, w której problem programistyczny sprowadza się do cyklicznego wykonywania pewnej operacji lub do realizacji zadania po upływie określonego czasu, z pomocą przychodzi nam wyjściowa instrukcja czasowa, czyli tzw. timer.
W momencie pojawienia się sygnału na linii inicjującej działanie timera, rozpoczyna się odliczanie czasu. Sposób i moment aktywacji cewki przekaźnika czasowego determinowany jest przez ustawienia konfiguracyjne oraz typ wybranego urządzenia. Podobnie jak w przypadku liczników, programista ma do dyspozycji do 32 timerów pracujących w jednym z poniższych trybów:
- opóźnienie załączenia,
- opóźnienie wyłączenia,
- flash timer.
Każdy z powyższych, głównych trybów posiada także różne realizacje podrzędne, jednak główna idea działania w obrębie danej grupy jest podobna. Działanie timera opóźniającego, zarówno załączenie i wyłączanie, polega na blokowaniu propagacji sygnału inicjującego przez czas określony w konfiguracji instrukcji. W przypadku pierwszego typu, rejestrowana jest kierunkowa zmiana stanu styku inicjującego OFF › ON, natomiast w drugiej sytuacji jest to zmiana ON › OFF. Od chwili aktywacji, po upłynięciu sprecyzowanego czasu, sygnał inicjujący jest przykazywany na cewkę timera. Jako przykład zastosowania pierwszych dwóch trybów możemy podać sytuację otwierania drzwi w pomieszczeniu z zainstalowanym systemem alarmowym. Procedura dezaktywacji alarmu, ze względu na zastosowane środki bezpieczeństwa może wymagać odczekania określonej ilości czasu, zanim możliwe będzie otwarcie drzwi. Wejście do pomieszczenia zanim alarm zostanie całkowicie wyłączony, może skutkować jego aktywacją i wezwaniem ochrony. Opóźnienie czasowe blokujące natychmiastowe otwarcie drzwi zabezpiecza system przed niewłaściwym działaniem.
Ostatni z głównych trybów, czyli tzw. tryb flash stosowany jest w aplikacjach, w których wymagane jest cykliczne wykonywanie określonych działań. Inicjacja takiej cewki stałym sygnałem wymuszającym, spowoduje okresowe załączanie oraz wyłączanie wyjścia o okresie zależnym od konfiguracji timera.
Na ilustracji umieszczonej poniżej przedstawione zostało okno konfiguracyjne instrukcji czasowej. Programista dokonuje wyboru numeru timera oraz definiuje tryb pracy. Niezależnie od wybranego typu, konieczne jest określenie podstawy czasowej obliczeń, a także źródła definiowania czasu docelowego (preset).
Podobnie jak w przypadku liczników, wartość zadana może być określana dynamicznie z wykorzystaniem zewnętrznych wejść analogowych, oraz statycznie. Należy pamiętać, iż wybór podstawy czasowej odpowiednio dobranej do danej aplikacji jest bardzo ważny, gdyż z założenia ogranicza on możliwości konfiguracyjne wartości zadanej czasu tylko do jej całkowitych wielokrotności. Ostatnim ustawieniem konfiguracyjnym jest typ oraz numer styku resetującego liczenie czasu. Jest to ustawienie opcjonalne, gdyż niektóre z trybów pracy kasują aktualny czas tylko w momencie dezaktywacji styku inicjującego. W pozostałych przypadkach kasowanie odbywa się w momencie aktywacji odpowiedniego styku wewnętrznego (Mxx) lub zewnętrznego (Ixx). Na poniższej ilustracji przedstawiona została instrukcja czasowa umieszczona na schemacie drabinkowym.
Przedstawiony licznik skonfigurowany jest w trybie opóźnionego załączenia z zewnętrznym wejściem kasującym w postaci markera M02. Podstawa czasowa wynosi 10 ms, a wartość zadana 1 s. Po aktywacji sygnału inicjującego M01, timer rozpoczyna odliczanie. Po upłynięciu sekundy, aktywowana jest cewka wyjściowa T01.
Jeśli sygnał M01 zostanie zdezaktywowany przed momentem odliczenia całego czasu zadanego, zegar timera zatrzymuje się. Jeżeli nie zostało aktywowane wejście resetujące M02, w momencie ponownej aktywacji M01 odliczanie czasu kontynuowane jest od poprzedniej wartości. Podobnie jak w przypadku licznika, wykorzystanie cewki timera odbywa się poprzez odpowiednią adresację wykorzystywanego styku.
WYKORZYSTANIE LICZNIKÓW ORAZ TIMERÓW W PRAKTYCE.
Podsumowując drugą część szkolenia dotyczącego samodzielnego programowania sterowników SG2, postarajmy się stworzyć prosty program obrazujący wykorzystanie zarówno liczników, jak i instrukcji czasowych.
PROGRAM 1
Problem do rozwiązania: Identyfikacja elementów wytworzonych na linii produkcyjnej w oparciu o optoelektroniczny czujnik położenia.
Program powinien sumować produkty końcowe i łączyć je w większe pakiety o określonej liczbie elementów składowych. Dodatkowo należy podsumować ilość pakietów po zakończeniu pracy danej zmiany pracowników. Jako przykład tego typu realizacji możemy podać system zliczania wyprodukowanych butelek oraz skrzynek napoju w browarze. Na ilustracji poniżej pokazano zrzut ekranu, przedstawiający stworzony program w środowisku SG2client.
Analizę rozpoczynamy od linii 003. W momencie, w którym produkowany element znajdzie się w zasięgu działania czujnika, na wejściu I01 pojawia się binarny sygnał elektryczny. Każdorazowa aktywacja tego wejścia powoduje zwiększenie licznika C01. Wartość zadana w omawianym przykładzie została ustawiona na 5 sztuk, dlatego też po odliczeniu takiej ilości elementów, aktywowana jest cewka C01. Wracając do linii 001, impuls ten powoduje inkrementację drugiego z liczników C02 oraz kasowanie pierwszego (poprzez znacznik M01).
Odliczanie pojedynczych sztuk zaczyna się od nowa. Licznik C02 skonfigurowany jest w taki sposób, że osiągnięcie wartości zadanej nie zatrzymuje inkrementacji. Zamiana kolejności linii kodu spowodowana jest powtórnym wykorzystaniem markera M01 w dalszej części programu. Jego późniejsza modyfikacja nie może mieć wpływu na działanie instrukcji resetującej, dlatego też instrukcja ta znajduje się tuż przed instrukcja licznikową. Linia 008 odpowiedzialna jest za odliczanie czasu, w którym dokonujemy analizy wyprodukowanych dóbr. Po upłynięciu odpowiedniego przedziału czasu (przykładowo 8 godzin dla jednej zmiany), aktywowana jest cewka T01, która inicjuje działania dotyczące linii 004 – 007. Pierwsza z nich realizuje przepisanie aktualnej ilości zliczonych pakietów (skrzynek) do wewnętrznego rejestru sterownika DR01, na podstawie odczytu z licznika C02.
Pozostałe trzy linie odpowiedzialne są za kasowanie wszystkich liczników oraz timera (poprzez markery M01, M02, M03). Dodatkowo, dla bezpieczeństwa zastosowane zostały cewki wykrywające zbocze narastające, które zapewniają jednorazowe wykonanie instrukcji przepisania oraz resetowania.
autor:
Dominik Szewczyk
dszewczyk@introl.pl