Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2020/03/simatic-s7-1500-t-cpu.jpg

Koncepcje programowania sekwencyjnego w sterownikach PLC

autor: Kamil Leś.

W dobie internetu i łatwości pozyskiwania informacji łatwo odnaleźć wiele interesujących materiałów dotyczących sterowników PLC. Zaczynając naukę programowania lub też chcąc poszerzyć swoją wiedzę można skorzystać z wielu bardzo dobrych książek, instrukcji producentów i innych publikacji pozwalających dość dogłębnie poznać zasadę działania i funkcjonalność sterowników programowalnych. Moją uwagę zwrócił fakt, że znaczna część literatury, z którą się do tej pory spotkałem, skupia się głównie na wytłumaczeniu działania poszczególnych funkcji lub przedstawia rozwiązania dla bardzo uproszczonych przypadków i zagadnień. Oczywiście jest to ogromna część wiedzy, którą można zdobyć szczególnie na początku swojej przygody z programowaniem. Warto jednak zagłębić się również w samą algorytmikę i koncepcję programowania. W tym artykule zostanie przedstawiona koncepcja programowania sekwencyjnego, a także sposoby jej realizacji w różnych językach programowania.


Podstawą koncepcji programowania sekwencyjnego jest pojęcie maszyny stanów (ang. state machine). W dużym uproszczeniu jest to system, w którym istnieje określona liczba stanów, a przejścia między stanami są możliwe po spełnieniu określonych warunków. Wyjścia układu nie zależą tylko od stanów wejść ale także od aktualnego stanu maszyny. Bardzo dobrze obrazuje to rysunek 1

lll

Rys. 1. Uproszczona koncepcja maszyny stanów

Przy stanie 0 musi zostać spełniony warunek 0 aby możliwe było przejście do stanu 1. W tym wypadku nie ma możliwości przejścia ze stanu 0 do stanu 2 z pominięciem stanu 1. Jeżeli stany połączymy z wykonaniem konkretnej akcji, to umożliwione zostanie działanie sekwencyjne oparte na stanach.

W tym miejscu należałoby zadać pytanie: czy to jest nam potrzebne? Jeśli potrzebujemy zrealizować prostą logikę, to cała ta koncepcja wydaje się bezużyteczna. Problem pojawia się gdy nasza aplikacja zaczyna rosnąć, a my chcemy dalej zachować nad nią kontrolę. Przy bardziej złożonych aplikacjach przemysłowych, które wymagają działania sekwencyjnego, taka realizacja algorytmu sterowania staje się wręcz koniecznością.

Istnieje wiele możliwości zbudowania układu sekwencyjnego na sterownikach PLC. Wiele zależy też od języków programowania jaki oferuje nam producent sterownika. Tutaj zostaną przedstawione trzy przykłady opracowane na sterownikach firmy Siemens i oprogramowaniu TIA Portal. Zostaną wykorzystane następujące języki programowania (w nawiasie nazwy zgodnie z IEC 61131-3) :

  • GRAPH (SFC)
  • LAD (LD)
  • SCL (ST)

GRAPH (SFC)

Jest język stworzony z myślą o programowaniu sekwencyjnym. Bazuje się tutaj na 3 podstawowych pojęciach: krok (ang. step), tranzycja (ang. trans) i kwalifikator (ang. qualifier). Pierwsze dwa pojęcia wydają się oczywiste. Kwalifikator jest to natomiast nic innego jak akcja jaką chcemy wykonać (np.: set, reset, delay, itd.) w danym stanie (kroku), w którym aktualnie się znajdujemy. Przykład został przedstawiony na rysunku 2.

Rys. 2. Maszyna stanów w języku GRAPH

W przedstawionym przykładzie po inicjalizacji znajdujemy się w kroku 1 (Step 1). Wyjścia lampki czerwonej i zielonej zostają zresetowane. Aby umożliwić przejście do kroku 2 konieczne jest spełnienie pierwszego warunku (trans 1). Należy więc nacisnąć zielony przycisk. Spowoduje to przejście do kroku 2, w którym zostaje wykonana akcja setowania wyjścia lampki zielonej. Będąc w kroku 2 maszyna oczekuję na przycisk czerwony. Naciśnięcie przycisku czerwonego gdy maszyna stanów jest w drugim kroku pozwala na przejście do 3 kroku i zaświecenie lampki czerwonej.

Warto zauważyć najważniejszą zaletę tego systemu. Gdy jesteśmy w kroku 1 to naciśnięcie przycisku czerwonego nie powoduje wykonania akcji. Nie musimy dodawać żadnych dodatkowych warunków, cyklem wyjść zarządza nasza maszyna stanów. Jest to bardzo prosty przykład i w tym wypadku wydaje się być swego rodzaju przerostem formy nad treścią. Trzeba jednak zastanowić się co jeśli zamiast 2 przycisków i 2 lampek mamy 30 czujników i 10 siłowników. Ten prosty algorytm nie ma na celu opisu rozwiązanego już problemu, lecz ma pozwolić na  zrozumienie idei.

LAD (LD)

Często spotykamy się jednak z sytuacją, że z jakiegoś powodu nie możemy zastosować języka GRAPH. Są to przyczyny sprzętowe (np. S7-1200 nie obsługują tego języka) ale również wymagania klienta, który nie zawsze zgadza się na program w danym języku. Jak zrealizować maszynę stanów w języku drabinkowym przedstawia rysunek 3.

Rys. 3. Maszyna stanów w języku LAD

Na początku trzeba stworzyć zmienną typu Integer, która będzie przechowywać aktualny stan maszyny. W tym przypadku jest to zmienna „krok” w bloku danych DB o nazwie „Sekwencja” ( „Sekwencja”.Krok). Każda linia stanowi osobny krok (stan), w której porównujemy obecną wartość kroku z wartością naszego kroku, a następnie jeśli spełniony jest warunek przejścia do następnego kroku to wpisujemy do naszej zmiennej „krok” nową wartość. Dla przykładu w networku 1 sprawdzamy czy wartość kroku jest równa 0. Jeśli warunek jest spełniony i naciśniemy przycisk zielony to wpisujemy za pomocą instrukcji MOVE do zmiennej „krok” wartość 10. Następnie komparator w networku 1 nie będzie spełniał już warunku, bo wartość kroku wynosi 10. Spełniony jest warunek dla kroku 10, czyli w networku 2. Gdy jesteśmy więc w kroku 10 to setujemy lampkę zieloną. Cała sekwencja działa dokładnie tak samo jak w przypadku języku GRAPH.

Warto zwrócić uwagę na zapis. Z kroku 0 przechodzimy do 10 z 10 do 20. Nasuwa się pytanie dlaczego nie z kroku 1 do 2, z 2 do 3 itd. Odpowiedź jest prosta. W aplikacjach przemysłowych ze względu na zmiany zaistniałe w procesie tworzenia i uruchomienia oprogramowania często potrzebujemy coś dodać między dwoma akcjami. W tym wypadku staje się to bardzo proste, bo zamiast przesuwać wszystkie kroki w górę, wystarczy tylko dodać krok pośredni (np. krok 5).

SCL (ST)

Inaczej pod względem zapisu kodu, lecz opierając się na na tej samej koncepcji maszyny stanów możemy wykorzystać język strukturalny SCL. Najbardziej naturalne jest zastosowanie instrukcji CASE. Postępujemy podobnie jak dla języka LAD. Tworzymy odpowiednią zmienną, która będzie przechowywać aktualną wartość maszyny stanów. Zapis tej samej sekwencji, która została przedstawiona dla jezyka GRAPH i LAD został zaprezentowany na rysunku 4 dla języka SCL.

Rys. 4. Maszyna stanów w języku SCL

Instrukcją CASE przełącza nas do odpowiedniego kroku, gdzie przy pomocy instrukcji warunkowej IF  definiujemy warunek przejścia do następnego kroku.

Podsumowanie

W powyższym opisie zostały pominięte kwestie związane z interfejsem użytkownika. Celem było przedstawienie ogólnej i stosunkowo uniwersalnej idei realizacji sterowania sekwencyjnego. Przykłady stanowią swego rodzaju minimalizację zagadnienia i są przedstawione w dużym uproszczeniu. Istnieje również kilka innych, nie opisanych tutaj metod, które pozwolą uzyskać podobne efekty. Przedstawione tutaj informacje stanowią jednak podstawę, która pozwoli w łatwy sposób zrealizować i zrozumieć inne przypadki. Są to narzędzia umożliwiające pisanie przejrzystych, skalowalnych i łatwo zarządzanych sekwencji. Należy jednak pamiętać, że nie wszystkie aplikacje przemysłowe wymagają sekwencyjnego działania, szczególnie aplikacje procesowe.

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Marzec 2020. Nagrodę  Voucher na szkolenie + zestaw gadżetów dostarcza ambasador konkursu, firma EMT-SYSTEMS.



Utworzono: / Kategoria: , ,

Reklama

Newsletter

Zapisz się i jako pierwszy otrzymuj nowości!



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY
  • Sterowniki kompaktowe, modułowe i zintegrowane, CODESYS V3 (programowanie, wizualizacja, komunikacja), Krótkie cykle czasowe, EtherCAT, BACnet (opcjonalnie), Modbus, CANopen, Porty szeregowe: RS232, RS485, 2 konfigurowalne karty Ethernet, W...
  • Ekonomiczne monitorowanie i sterowanie, teraz także dzięki panelom 2 generacji. Dzięki odpowiedniemu doborowi funkcji HMI, panele Basic 2 generacji stanowią doskonałe rozwiązanie przy produkcji maszyn lub w małych aplikacjach przemysłowych....
  • Systemy RFID są ekonomiczne, uniwersalne i zapewniają niezawodność procesów, np. w intralogistyce. Zadania związane z identyfikacją stały się teraz łatwiejsze, szczególnie gdy potrzebna jest duża liczba punktów identyfikacji, dzięki  głowic...
  • Selektor napędów Panasonic umożliwia przeglądanie napędów z serii MINAS, wyszukiwanie ich w prosty sposób, a nawet porównywanie ze sobą. Dzięki wyszukiwaniu po słowach kluczowych i przy użyciu funkcji filtrowania, potrzeba zaledwie sekund a...
  • Zaprojektowane, aby zwiększyć wydajność Sterowniki FX5U/FX5UC zapewniają rodzinie FX wyższą wydajność oraz dodają nowe cechy, które wyznaczają standardy w klasie kompaktowych sterowników PLC. Pozwala to użytkownikom na tworzenie bardziej zł...
  • Zapraszam Cię na kurs tworzenia wizualizacji HMI z wykorzystaniem panelu XV102 od firmy EATON. Kurs stworzyłem z myślą o każdym, kto chce zacząć przygodę z tworzeniem wizualizacji HMI przy użyciu programu Galileo. Stworzyłem kurs bazujący n...