Szkolenie PLC cz. 15 – Przegląd niestandardowych funkcji sterownika TP03 – część pierwsza


Dzisiejsze szkolenie, podobnie jak następne, poświęcone zostanie zagadnieniu przeglądu i opisu funkcji, które nie zostały przedstawione i wykorzystane do tej pory. Ze względu na fabryczne możliwości sterownika, istnieje ogromna ilość predefiniowanych funkcji oraz mechanizmów ułatwiających pracę programistom. Postaram się przybliżyć zastosowanie kilku z nich.

 

 

FUNKCJA RMIO – STEROWNIK JAKO MODUŁ WEJŚĆ/WYJŚĆ

Konstrukcja procesów technologicznych wymusza na systemach sterowania pewne ograniczenia dotyczące zarówno zastosowanych elementów, jak i ich rozmieszczenia na obiekcie. Bardzo często okazuje się, że nie wystarczy przewidzieć jednego, globalnego sterownika PLC dla całego układu. Rozpiętość przestrzenna projektowanej instalacji wymagałaby zastosowania ogromnej ilości kabli i przewodów w celu połączenia sensorów i elementów wykonawczych znajdujących się w odległych miejscach instalacji z centralną szafą sterowniczą i sterownikiem. Istnieje możliwość wykorzystania lokalnych sterowników z indywidualnymi programami sterującymi, jednakże rozwiązanie to może utrudnić pracę programistom w momencie gdy system zaczyna się rozrastać.

Dodatkowo, niewykluczone jest, że sygnały pomiarowe z jednego końca instalacji będą potrzebne do wysterowania elementów wykonawczych na drugim jej końcu. W takiej sytuacji najlepiej zastosować tzw. zdalne moduły wejść/wyjść. Mogą to być zarówno wejścia/wyjścia cyfrowe, jak i analogowe.

Można o nich myśleć jak o modułach rozszerzających, które jednocześnie nie są ograniczane tylko do miejsca instalacji jednostki centralnej. Schemat takiego systemu w oparciu o sterownik TP03, przedstawiony został na rysunku nr 1.

 

Wykorzystanie sterownika TP03, jako zdalnego modułu wejść/wyjść.

Rysunek 1. Wykorzystanie sterownika TP03, jako zdalnego modułu wejść/wyjść.

 

Jak widać, jednostki centralne połączone są ze sobą magistralą komunikacyjną. Nie rozróżniamy sterowników i zdalnych modułów, gdyż każdy sterownik może pracować jako taki moduł. Z punktu widzenia sprzętu mogą to być dokładnie takie same urządzenia. Wykorzystywanym interfejsem komunikacyjnym jest w tym wypadku RS485, natomiast protokół wymiany danych został zaprojektowany przez producenta i, jak przekonamy się za moment, jego specyfikacja nie jest istotna aby poprawnie uruchomić wymianę danych. Każdy ze sterowników posiada sprzętowe zasoby wejść/wyjść. Możemy podłączyć maksymalnie pięć urządzeń – jednostkę nadrzędną oraz cztery jednostki podrzędne. Naszym celem jest szybkie i bezobsługowe przekazanie informacji o zmianach dokonujących się w ich obrębie do sterownika nadrzędnego. Aby zestawić bezobsługową wymianę tych danych, należy w sterowniku głównym umieścić kawałek kodu widoczny na rysunku nr 2.

 

Kod realizujący wymianę danych pomiędzy urządzeniami

Rysunek 2. Kod realizujący wymianę danych pomiędzy urządzeniami

 

Może się wydawać, że sprawa jest banalnie prosta, jednakże nie są to wszystkie czynności jakie należy wykonać aby zaszła poprawna wymiana danych. Powyższy fragment kodu jest jedynie poleceniem rozpoczęcia komunikacji, która musi odbyć się według pewnych ustalonych arbitralnie reguł (K0 oznacza zerowy zasób sprzętowy, czyli wbudowany port RS485). W najprostszym przypadku programista musi ustalić, który sterownik będzie pełnił rolę nadrzędnego i przydzielić mu adres 0 oraz przydzielić pozostałe adresy urządzeniom podrzędnym.

Bardzo istotna jest także parametryzacja sprzętowa wykorzystywanego portu komunikacyjnego (prędkość transmisji, parzystość itd.). Wymienione wyżej parametry, określane są w rejestrach widocznych w tabeli 1:

 

Rejestry konfiguracyjne RMIO

Tabela 1. Rejestry konfiguracyjne RMIO

 

Istnieje szereg dodatkowych rejestrów, głównie tych do odczytu, dokładnie opisanych w dokumentacji sterownika, które także mogą zostać wykorzystane do dokładniejszej obsługi wymiany danych. Nie są jednak istotne z punktu widzenia idei mechanizmu. Należy dokładnie przemyśleć ile będzie wykorzystywanych urządzeń podrzędnych, gdyż wraz ze zmniejszeniem ich ilości, wzrasta częstotliwość odświeżania pozostałych modułów. Jeżeli potrzebujemy tylko jednego modułu zdalnego, wpisujemy do rejestru D8377 wartość jeden i w ten sposób przyspieszamy możliwości odświeżania czterokrotnie.

Na rysunku nr 3 przedstawiony został fragment kodu sterownika nadrzędnego wraz ze wszystkimi koniecznymi ustawieniami parametryzacyjnymi.

 

Kod urządzenia nadrzędnego realizujący cykliczną wymianę danych

Rysunek 3. Kod urządzenia nadrzędnego realizujący cykliczną wymianę danych

 

W pierwszej linii odbywa się parametryzacja portu szeregowego, w drugiej określenie adresu urządzenia (0 jako sterownik nadrzędny), w trzeciej definiowana jest ilość urządzeń podrzędnych a w czwartej czas oczekiwania na odpowiedź z każdego urządzenia (wartość 100 oznacza 100*10 ms=1000 ms). Ostatnie polecenie wywoływane jest co sekundę i realizuje faktyczną wymianę danych. Otrzymane dane dostępne są w rejestrach wewnętrznych urządzenia, zgodnie z poniższą tabelą:

 

szkolenie5

 

FUNKCJA ZNACZNIKÓW – PRZERWANIA SPRZĘTOWE

Istnieją dwa główne sposoby wykonywania instrukcji warunkowych. Pierwszy z nich polega na sprawdzaniu danego warunku przy każdym skanowaniu kodu programu. Jest to prostsza metoda, jednakże sprawdza się tylko w sytuacji gdy niewymagana jest natychmiastowa reakcja na zdarzenie. Jeżeli jest odwrotnie, a kod programu jest obszerny (skanowanie trwa więcej niż wymagana szybkość reakcji) konieczne jest zastosowanie mechanizmu zapewniającego natychmiastowe działanie w przypadku zajścia warunku. Mechanizm taki nosi nazwę przerwania i może być z powodzeniem stosowany również w sterowniku TP03, poprzez zastosowanie odpowiednich znaczników. Istnieją 3 podstawowe typy przerwań: wejściowe, czasowe i licznikowe. Pierwsze z nich generowane jest w momencie zmiany sygnału na jednym z wejść cyfrowych, drugie inicjowane jest w momencie upłynięcia określonego czasu, a trzecie gdy licznik osiągnie wartość zadaną.

Poniżej przedstawione zostaną wyżej wymienione przerwania wraz z przykładowymi kodami źródłowymi. Przerwanie wejściowe jest generowane w momencie wykrycia zbocza narastającego lub opadającego na jednym z wejść cyfrowych. Funkcjonalność przerwania określana jest w jego numerze i może być zmieniona tylko poprzez ponowne załadowanie programu do sterownika. Każda definicja przerwania rozpoczyna się od litery „I” a następnie trzech cyfr określających jego charakter. Dla przerwania wejściowego, pierwsza cyfra oznacza numer wejścia (x0-x5), druga zawsze jest zerem, a trzecia definiuje czy przerwanie ma zajść w momencie wykrycia zbocza opadającego lub narastającego (0 – zbocze opadające, 1 – zbocze narastające). Przykładowe zadanie zadanie jakie sterownik ma wykonać w momencie zajścia zdarzenia polega na skasowaniu akumulatora czasomierza T0. Fragment kodu na rysunku nr 4.

 

Realizacja przykładowego przerwania wejściowego

Rysunek 4. Realizacja przykładowego przerwania wejściowego

 

W pierwszej linii aktywujemy funkcję przerwań wejściowych (EI), a poniżej znajduje się główny kod programu. Na rysunku 4 składa się on z aktywacji czasomierza T0. Kod główny kończy się funkcją FEND. Następne linie kodu dotyczą obsługi samego przerwania. W momencie wykrycia zbocza opadającego na wejściu X1, czasomierz T0 jest kasowany.

Funkcja IRET jest konieczna ze względu na wskazanie, w którym miejscu kończy się obsługa przerwania. Bardzo istotną kwestia jest odblokowanie przerwań dotyczących konkretnych wejść cyfrowych, które odbywa się poprzez skasowanie odpowiedniego markera systemowego (domyślnie przerwania są zablokowane). Dla wejść X0-X5 są to markery odpowiednio M8050-M8054.

Przerwanie czasowe jest wyzwalane w momencie odmierzenia zadanego czasu z wykorzystaniem czasomierza programowego. Podobnie jak poprzednio, jego charakter określony jest poprzez odpowiednią numerację znacznika przerwania. Pierwsza cyfra dotyczy numeru przerwania (mamy dostępne trzy przerwania czasowe, oznaczane 6-8), a dwie następne interwał przerwania (10-99 ms).

 

Realizacja przykładowego przerwania czasowego

Rysunek 5. Realizacja przykładowego przerwania czasowego

 

Na rysunku nr 5 znajduje się przykładowy kod. Przerwanie I699 jest przerwaniem czasowym o numerze 6 i interwałem wywołania równym 99 ms. Oznacza to, iż obsługa przerwania będzie realizowana za każdym razem gdy układ liczący odmierzy 99 ms. W przytoczonym przykładzie każdorazowo inkrementujemy wartość rejestru D0. Podobnie jak w przypadku przerwania wejściowego, każde z nich musi zostać odblokowane. W tym przypadku markerami zezwalającymi są markery M8056-M8058.

Przerwanie licznikowe aktywowane jest gdy określony licznik osiągnie swoją wartość zadaną. Jedynym parametrem wpisywanym do znacznika przerwania jest jego numer (druga cyfra, zakres 1-6). Dodatkowym elementem jest funkcja definiująca do którego znacznika przerwania ma przenosić odliczenie zadanej ilości impulsów przez konkretny licznik.

 

Rysunek 6. Realizacja przykładowego przerwania licznikowego

Realizacja przykładowego przerwania licznikowego

 

Na rysunku nr 6 przedstawiony został przykładowy kod programu.

Przerwanie I010 aktywowane jest w chwili odliczenia wartości 100 przez licznik C235 (jest to licznik zliczający impulsy na wejściu X0). Na początku kodu ustawiamy marker M8059, który odblokowuje wszystkie przerwania licznikowe. Istotne jest także aby w kodzie głównym programu znalazła się instrukcja aktywacji licznika oraz niezwykle ważna funkcja DHSCS, która informuje sterownik przy jakiej aktualnej wartości

autor:
Dominik Szewczyk
dszewczyk@introl.pl