Język drabinkowy LD. Kurs programowania w Codesys odc. 3
Po zapoznaniu się z podstawami tworzenia programu i komunikacji ze sterownikiem PLC, przyjrzyj się bliżej językom programowania, jakie oferuje Codesys. W tym odcinku poznasz język drabinkowy. Dowiesz się, jak tworzyć program przy jego pomocy, a także jakie ma możliwości. Zaczynajmy!
Kurs programowania w Codesys
Część I – Podstawowe funkcjonalności środowiska Codesys
- 1. Pierwsze kroki w Codesys. Jak stworzyć program? | Kurs programowania w Codesys odc. 1
- 2. Pierwsze podłączenie i przygotowanie Codesys do pracy ze sterownikiem PLC | Kurs programowania w Codesys odc. 2
- 3. Język drabinkowy (LD) | Kurs programowania w Codesys odc. 3
- 4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia | Kurs programowania w Codesys odc. 4
- 5. Język schematów blokowych (FBD) | Kurs programowania w Codesys odc. 5
- 6. Tworzenie podstawowej wizualizacji HMI | Kurs programowania w Codesys odc. 6
- 7. Język strukturalny (ST) | Kurs programowania w Codesys odc. 7
- 8. Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika? | Kurs programowania w Codesys odc. 8
- 9. Język bloków funkcyjnych (CFC) | Kurs programowania w Codesys odc. 9
- 10. Funkcja, blok funkcyjny, program – zmodyfikuj program w Codesys dla lepszej funkcjonalności | Kurs programowania w Codesys odc. 10
Część II – Zaawansowane funkcje i możliwości środowiska Codesys
-
- 11. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja | Kurs programowania w Codesys odc. 11
- 12. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC| Kurs programowania w Codesys odc. 12
- 13. Komunikacja Modbus RTU i TCP/IP – jak skonfigurować najpopularniejszy protokół komunikacyjny w Codesys? | Kurs programowania w Codesys odc. 13
- 14. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety | Kurs programowania w Codesys odc. 14
- 15. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code | Kurs programowania w Codesys odc. 15
- 16. Integracja sterownika PLC z systemem SCADA w Codesys| Kurs programowania w Codesys odc. 16
-
17. Połączenie i skomunikowanie sterownika PLC z robotem Kawasaki w Codesys| Kurs programowania w Codesys odc. 17
Język drabinkowy – LD
Na początek trochę teorii. Język drabinkowy, często określany skrótem LD z ang. Ladder Diagram, jest jednym z pierwszych języków szeroko stosowanych w sterownikach PLC. Z tego też powodu aktualnie wciąż jest jednym z najpopularniejszych. Ma on postać zbliżoną do schematów elektrycznych, w których obwody zamykają się pomiędzy dwiema liniami zasilania, tworząc szczeble od których wziął swoją nazwę.
Skąd taka forma? Początki sterowników PLC są mocno związane z elektryką. Dawniej automatyka realizowana była przez pokaźne szafy sterownicze, w których można było znaleźć gąszcz przekaźników, cewek, styczników i innych prostych elementów elektryki. Wprowadzenie sterowników programowalnych zrewolucjonizowało podejście do automatyki, zastępując całe szafy jednym niewielkim urządzeniem. Problem był jednak taki, że za podłączanie i automatyzację wciąż byli odpowiedzialni elektrycy, którzy jeszcze niedawno montowali tuziny przekaźników zgodnie ze schematami. W związku z tym o programowaniu nowo wprowadzonych sterowników nie było wręcz mowy.
Producenci PLC, mając na uwadze fakt, że muszą przekonać elektryków do korzystania ze sterownika, postanowili wyjść im naprzeciw i stworzyć specjalny graficzny język programowania, który będzie przypominał schematy elektryczne, a jego logika będzie wprost nawiązywała do działania obwodów elektrycznych.
W taki sposób powstał właśnie język drabinkowy, który pogodził potrzebę programowania, z łatwym i przystępnym interfejsem dla elektryków. Z czasem język ten stał się światowym standardem i jest jasno określony w normie IEC 61131-3.
Język LD w Codesys
Tyle z ogólnej teorii, przejdźmy już do samego oprogramowania. Dowiesz się, jakie możliwości daje Ci Codesys jeżeli chodzi o wykorzystanie języka drabinkowego. Przykład zrealizujesz na symulatorze.
Chcesz dowiedzieć się, jak szybko i prosto przekonwertować program z symulatora na fizyczny sterownik? Sprawdź sekcję Tips&Tricks przeznaczoną dla subskrybentów kursu.
Jeżeli uważnie śledzisz kurs, to zapewne wiesz już, jak przygotować program do pracy w oparciu o język drabinkowy. Jeżeli natomiast przegapiłeś/aś wcześniejsze odcinki, zapoznaj się z podstawami w odcinku 1, gdyż dzisiaj rozpoczniesz pracę na w pełni przygotowanym i skonfigurowanym środowisku.
Po utworzeniu projektu otwórz segment przeznaczony do pisania programu, a więc PLC_PRG.
Poznasz teraz elementy języka drabinkowego, a także bloki funkcyjne, które oferuje Codesys. Po otwarciu PLC_PRG po lewej stronie zobaczysz okno ToolBox. Jeżeli nie widzisz takiego okienka, kliknij w prawym górnym rogu w głównym menu opcję View, a następnie wybierz ToolBox.
Segment ten to Twój przybornik. Znajdziesz w nim wszystkie elementy wykorzystywane podczas programowania. Codesys jest bardzo elastycznym środowiskiem, dlatego też oprócz klasycznych elementów języka drabinkowego, znajdują się tam niektóre bloki funkcyjne wykorzystywane w innych językach graficznych. Bloki wpasowują się w charakter języka drabinkowego, a dodatkowo zaoszczędzają wiele szczebli programu. Zacznijmy w takim razie analizę.
Jak zapewne zdążyłeś/aś zauważyć, elementy programu posegregowane są na kategorie. Pierwszą z nich jest General. W tej grupie znajdziesz najczęściej stosowane elementy, które zostaną omówione przy okazji kolejnych grup.
Następna grupa to Boolean Operators. W tej sekcji znajdziesz bloczki realizujące podstawowe zadania logiczne na zmiennych Boolowych, a więc 0/1.
AND wystawi stan wysoki na wyjściu tylko i wyłącznie wtedy, gdy na wejściu dwie lub trzy zmienne, w zależności od opcji, są w stanie wysokim.
OR na wyjściu poda stan wysoki w przypadku, gdy na którymkolwiek z wejść pojawi się stan wysoki.
XOR to specjalny wariant OR, w który poda na wyjściu stan wysoki tylko i wyłącznie wtedy, gdy którekolwiek z wejść poda logiczną jedynkę, przy zastrzeżeniu, że nie mogą oba wejścia jednocześnie być w stanie wysokim.
W grupie Math Operators zawarte są bloczki związane z operacjami matematycznymi. Warto pamiętać, że bloczki te operują na zmiennych rzeczywistych. W związku z tym podanie 1 lub 0 na wejście nie zostanie odczytane jako prawda lub fałsz, a zwyczajnie jako pełnoprawna liczba do obliczeń.
W tej sekcji są dwa typy bloczków: obliczeniowe, a więc ADD, SUB, MUL, DIV, czyli odpowiednio Dodaj, Odejmij, Pomnóż, Podziel, a także porównawcze, EQ, NE, LT, LE, GT, GE, odpowiednio, Równy, Nierówny, Mniejszy, Mniejszy bądź równy, Większy, Większy bądź równy.
Pamiętaj, że o ile bloczki obliczeniowe dają na wyjściu konkretne wyniki, o tyle bloczki porównawcze zwracają wartości logiczne prawda/fałsz czyli 1/0.
Przejdźmy teraz do pierwszej grupy bloków funkcyjnych, a więc Other Operators. Jak sama nazwa mówi, są to specjalne bloczki, które kryją w sobie funkcję działania, a więc często robią więcej niż tylko porównywanie czy dodawania wartości.
Pierwszym bloczkiem jest SEL, który można określić Selektorem. Posiada on trzy wejścia i działa na takiej zasadzie, że jeżeli na wejściu G pojawi się sygnał wysoki, to na wyjście bloczka przekazywany jest sygnał z wejścia IN1, jeżeli na G pojawi się stan niski, analogicznie odwrotnie.
Następnym bloczkiem jest MUX, który określa się mianem Multipleksu. Działa bardzo podobnie do bloczka SEL, z tym zastrzeżeniem, że na wejście K podaje się liczby całkowite od 0 w górę. Jeżeli na wejściu K pojawi się 0, to na wyjściu bloczka przekazywany jest sygnał z IN0, jeżeli 1 to IN1 i tak dalej.
Limit to bloczek, który ogranicza nam wartość podaną na wejściu IN. Można zdefiniować minimalną i maksymalną granicę wartości. Bloczek MOVE przenosi wartość z jednej zmiennej do drugiej, a bloczek Conversion zmieni typ zmiennej.
Przedostatnia grupa, Function Blocks, stanowi rozwinięcie bloków funkcyjnych. R_TRIG to bloczek reagujący na zbocze narastające, a F_TRIG na zbocze opadające.
Zbocze to określenie na moment przejścia sygnału w inny stan. Ze zboczem opadającym mamy do czynienia w momencie przejścia ze stanu wysokiego w niski, w przypadku narastającego – analogicznie odwrotnie. W związku z tym jest to sygnał impulsowy.
Przy pomocy bloczka SR wystawisz zmienną na stałe w stan wysoki, a dzięki bloczkowi RS zresetujesz tę zmienną ponownie do stanu niskiego.
TON to klasyczny timer dający możliwość opóźnienia załączenia zmiennej w stan wysoki. TOF działa odwrotnie do TON, gdyż po upływie zdefiniowanego czasu wystawi zmienną w stan niski.
Ostatnimi elementami w tym segmencie są liczniki. Liczniki zliczają każde jedno wejście zmiennej w stan wysoki. W przypadku CTU licznik zlicza w górę, natomiast w przypadku CTD – w dół.
Ostatnia grupa, Ladder Elements, to podstawowe elementy używane w języku drabinkowym.
Przy pomocy Network możesz rozbudować drabinkę o kolejny pusty szczebel.
Contact to klasyczny styk. Styk w języku drabinkowym podaje sygnał dalej, jeżeli zmienna przypisana do styku jest w stanie wysokim – tym samym zezwala na pracę dalszej części programu. W przeciwnym przypadku dalsza część programu za stykiem nie jest realizowana.
Negated contact to styk zanegowany, a więc działa identycznie jak klasyczny styk, z tym, że przekaże sygnał dalej w momencie, gdy zmienna do niego przypisana jest w stanie niskim, a więc odwrotnie do zwykłego styku. Przy pomocy Parallel contact i Parallel negated contact możesz podłączyć dodatkowy styk równolegle do linii (stworzyć warunek LUB). Coil to element wysterowywany przez linie w języku drabinkowym.
Zmienna przypisana do Coil, tłumaczonej na język polski jako Cewka, zmienia swój stan w zależności od tego, czy sygnał dotarł do cewki, czy też nie. Jeżeli dotarł – zmienna zmieni wartość na stan wysoki, jeżeli nie, będzie w stanie niskim. Przy pomocy Set Coil możesz ustawić zmienną w stan wysoki na stałe, tak więc wystarczy, że sygnał dotrze do cewki tylko raz i zmienna pozostanie już w logicznej 1, niezależnie czy sygnał nadal dociera, czy też nie. Taką zmienną można przywrócić do stanu niskiego wyłącznie przy pomocy Reset Coil.
Jump i Return to specjalne funkcje umożliwiające przeskakiwanie pomiędzy różnymi częściami kodu. Więcej na ich temat dowiesz się w przyszłych odcinkach kursu.
Wybierając Branch stworzysz nowy, równoległy szczebel, a przy pomocy Branch Start/END zakończysz dany szczebel lub rozpoczniesz nowy, niezależny.
Tworzenie programu w języku drabinkowym
Tworzenie programów w językach graficznych w Codesys ma wspólną i bardzo prostą mechanikę na zasadzie przeciągnij i upuść. Łapiąc za dowolny element, zaraz zobaczysz w oknie roboczym miejsca, w których można go podłączyć.
Zacznij od początku, a więc od stworzenia linii. Wybierz z ToolBox -> Ladder Elements element do tworzenia nowego segmentu sieci, a więc Network i przeciągnij go w puste pole robocze. W ten sposób tworzysz nowe pola pod linie kodu.
Następnie złap za styk, czyli blok Contact i przeciągnij w pole robocze. W tym momencie masz do wyboru kilka opcji. Przeciągając na Start here rozpoczniesz linię. Styk jest elementem, który zawsze musi zostać umieszczony na początku linii. W przypadku wybrania strzałki w górę lub w dół, automatycznie utworzy się nowa gałąź powyżej lub poniżej ze stykiem.
Zobacz pełną wersję artykułu na Poradniku Automatyka
źródło: ASTOR
Słowa kluczowe
ASTOR, automatyka, CODESYS, Język drabinkowy LD, programowanie plc