Gdy trzeba szybko zrozumieć, dlaczego maszyna nie startuje, dobrze napisany program drabinkowy potrafi być czytelniejszy niż klasyczny kod tekstowy. Język LAD, znany też jako Ladder Diagram lub język drabinkowy, służy do programowania sterowników PLC odpowiedzialnych za logikę i sterowanie w automatyce przemysłowej. Pokażę, jak czytać jego podstawowe elementy, gdzie sprawdza się najlepiej, jak zbudować prosty układ start-stop oraz kiedy lepiej sięgnąć po FBD albo Structured Text.
Najważniejsze informacje o programowaniu LAD w sterownikach PLC
- LAD to graficzny język programowania PLC przypominający schemat przekaźnikowy.
- Podstawą programu są styki, cewki, bloki funkcyjne i sieci logiczne.
- Najlepiej sprawdza się przy logice binarnej, blokadach, alarmach i układach start-stop.
- Program sterownika jest wykonywany cyklicznie, dlatego kolejność sieci może wpływać na działanie maszyny.
- Do rozbudowanych obliczeń i operacji na danych często lepszy jest ST lub SCL.

Czym naprawdę jest język drabinkowy LAD
LAD to graficzny sposób zapisywania programu dla sterownika PLC. Jego wygląd nawiązuje do dawnych układów przekaźnikowych, dlatego elektryk może odczytać podstawową logikę bez znajomości klasycznych języków programowania. W praktyce zamiast pisać instrukcję „jeżeli wejście ma stan 1, włącz wyjście”, układa się symbole na kolejnych szczeblach drabinki.
Po lewej stronie znajduje się umowna szyna zasilania, po prawej stronie efekt działania, najczęściej cewka sterująca wyjściem lub zmienną. Pomiędzy nimi umieszcza się warunki. Każdy szczebel opisuje konkretną zależność logiczną, na przykład zgodę na uruchomienie silnika po naciśnięciu przycisku i spełnieniu warunków bezpieczeństwa.
W dokumentacji można spotkać oznaczenia LAD i LD. Najczęściej oznaczają ten sam język, choć konkretna nazwa zależy od producenta środowiska programistycznego. Siemens używa przede wszystkim określenia LAD, natomiast norma IEC 61131-3 posługuje się nazwą Ladder Diagram, skracaną do LD.
Wydanie normy IEC 61131-3 z 2025 roku opisuje między innymi języki LD, FBD i ST oraz elementy służące do organizacji programów sterowników PLC. Norma porządkuje składnię i znaczenie konstrukcji, ale nie sprawia, że program napisany dla jednego producenta zawsze da się bez zmian przenieść do innego sterownika.
Jak czytać styki, cewki i sieci logiczne
Najłatwiej zacząć od dwóch podstawowych symboli. Styk normalnie otwarty przewodzi logicznie wtedy, gdy przypisana zmienna ma wartość 1. Styk normalnie zamknięty działa odwrotnie, czyli przepuszcza warunek, gdy zmienna ma wartość 0.
Na końcu sieci znajduje się zwykle cewka. Może sterować wyjściem fizycznym, na przykład stycznikiem silnika, albo ustawiać bit pomocniczy wykorzystywany w dalszej części programu. Trzeba pamiętać, że symbol cewki w programie nie jest fizycznym przekaźnikiem. To instrukcja, która w danym cyklu ustala stan konkretnej zmiennej.
| Element | Znaczenie | Typowe zastosowanie |
|---|---|---|
| Styk NO | Warunek spełniony, gdy zmienna ma stan 1 | Przycisk Start, czujnik pozycji, zgoda na pracę |
| Styk NC | Warunek spełniony, gdy zmienna ma stan 0 | Przycisk Stop, alarm, blokada |
| Cewka | Ustawia stan wyjścia lub zmiennej | Silnik, zawór, lampka, bit pomocniczy |
| Timer TON | Opóźnia włączenie sygnału o określony czas | Rozruch wentylatora, zwłoka zaworu |
| Licznik CTU | Zwiększa wartość po wykryciu impulsów | Liczenie sztuk, cykli i produktów |
Połączenie szeregowe oznacza logiczne „i”. Wszystkie warunki muszą być spełnione, aby cewka otrzymała sygnał. Połączenie równoległe oznacza logiczne „lub”, ponieważ wystarczy spełnienie jednej z kilku gałęzi.
Ważny jest również cykl pracy PLC. Sterownik odczytuje wejścia, wykonuje program od góry do dołu, a potem aktualizuje wyjścia. Z tego powodu ta sama zmienna zapisana w kilku miejscach może prowadzić do trudnych do znalezienia błędów. Ostatnia instrukcja wykonana w cyklu może nadpisać wcześniejszy wynik.
Prosty przykład start-stop z blokadą
Klasyczny układ start-stop dobrze pokazuje sposób myślenia w LAD. Załóżmy, że silnik ma się uruchomić po naciśnięciu przycisku Start, zatrzymać po naciśnięciu Stop i nie wystartować, gdy zadziała zabezpieczenie termiczne.
|----[/ Stop ]----[/ Termik ]----+----[ Start ]----( Silnik )
| |
| +----[ Silnik ]---|
Styk Stop i styk Termik są tu pokazane jako normalnie zamknięte. Oznacza to, że w stanie prawidłowym przepuszczają sygnał, a po naciśnięciu Stop lub zadziałaniu zabezpieczenia przerywają obwód. Równoległy styk Silnik pełni funkcję podtrzymania, dzięki czemu po zwolnieniu przycisku Start silnik nadal pracuje.
W prawdziwym projekcie nazwy mogą wyglądać na przykład tak jak I_Start, I_Stop_OK, I_Termik_OK oraz Q_Silnik. Sam wybór nazw ma duże znaczenie podczas diagnostyki. Po kilku miesiącach łatwiej zrozumieć zmienną Termik_OK niż adres wejścia zapisany jako I0.3.
Przeczytaj również: Ramka Modbus - RTU, ASCII, TCP - Jak unikać błędów?
Dodanie opóźnienia czasowego
Jeżeli wentylator ma uruchomić się pięć sekund po włączeniu pompy, można wykorzystać timer TON. Warunkiem wejściowym timera jest sygnał pracy pompy, nastawa wynosi 5 sekund, a wyjście timera steruje wentylatorem.
|----[ Pompa ]----------------[ TON T_Wentylator, PT = 5 s ]
|----[ T_Wentylator.Q ]-------( Wentylator )
Timer TON zaczyna odmierzać czas, gdy jego wejście ma stan 1. Dopiero po upływie nastawy wyjście Q zostaje aktywne. Przy zaniku sygnału wejściowego odliczanie zwykle się zeruje, choć szczegóły mogą zależeć od użytego sterownika i konkretnego bloku.
Gdzie LAD sprawdza się najlepiej, a gdzie ma granice
Język drabinkowy jest mocny tam, gdzie program opisuje zależności typu „jeżeli to i to, włącz tamto”. Z tego powodu dobrze pasuje do maszyn, przenośników, układów pompowych, prostych stacji montażowych, sygnalizacji i blokad technologicznych.
Jego największą zaletą jest szybka diagnostyka online. W większości środowisk programista może obserwować, które styki są aktywne i na którym warunku zatrzymuje się przepływ logiczny. Dla utrzymania ruchu taka informacja bywa cenniejsza niż elegancki, ale trudniejszy do śledzenia kod tekstowy.
| Język | Najlepsze zastosowanie | Mocna strona | Ograniczenie |
|---|---|---|---|
| LAD lub LD | Logika binarna, blokady, start-stop | Czytelność dla elektryków i automatyków | Duże programy mogą zajmować wiele ekranów |
| FBD | Regulatory, funkcje analogowe, gotowe bloki | Wygodne łączenie bloków funkcyjnych | Mniej naturalny dla osób myślących schematem przekaźnikowym |
| ST lub SCL | Obliczenia, tablice, receptury, operacje na danych | Zwięzły zapis złożonych algorytmów | Trudniejsza diagnoza dla osób bez doświadczenia programistycznego |
| SFC lub GRAPH | Sekwencje krokowe i procesy wieloetapowe | Jasne pokazanie stanów procesu | Nie każdy sterownik i projekt obsługuje ten język w takim samym zakresie |
Jak pisać program LAD, który da się utrzymać
Pierwsza zasada brzmi prosto, ale często jest pomijana. Jedna sieć powinna odpowiadać jednej funkcji. Jeśli w jednym szczeblu znajdują się jednocześnie warunki uruchomienia, alarmy, reset, timer i kilka wyjść, znalezienie usterki będzie niepotrzebnie trudne.
Stosuję nazwy, które opisują znaczenie sygnału, a nie tylko jego adres. Dobrze działają krótkie prefiksy, na przykład I_ dla wejść, Q_ dla wyjść, M_ dla bitów pomocniczych i DB_ dla danych. Jeszcze ważniejsze są komentarze przy timerach, licznikach i nietypowych blokadach.
- Rozdzielaj logikę sterowania, alarmy, tryb ręczny i automatyczny.
- Nie zapisuj jednego wyjścia w wielu odległych sieciach bez wyraźnego powodu.
- Opisuj jednostki i zakresy wartości analogowych.
- Testuj reakcję na brak czujnika, restart PLC i powrót zasilania.
- Monitoruj program w trybie online, ale nie wymuszaj sygnałów na pracującej maszynie bez oceny ryzyka.
Osobno traktuję tryb ręczny i automatyczny. Operator może chcieć załączyć zawór ręcznie, ale nie powinien omijać blokady poziomu, ciśnienia czy otwartej osłony. Przejrzyste rozdzielenie tych warunków pozwala uniknąć sytuacji, w której „ręczne sterowanie” staje się przypadkowym obejściem zabezpieczeń technologicznych.
Przed uruchomieniem sprawdzam także zachowanie po zaniku zasilania. Czy silnik ma pozostać wyłączony? Czy zawór ma wrócić do pozycji bezpiecznej? Czy licznik ma zachować wartość? Odpowiedzi powinny wynikać z technologii, a nie z przypadkowego ustawienia retencji zmiennych.
Najczęstsze błędy przy nauce programowania drabinkowego
Początkujący często utożsamiają nazwę styku z fizycznym przyciskiem. Tymczasem styk w LAD może odczytywać bit z pamięci, sygnał z timera albo wynik innej funkcji. Dlatego trzeba rozróżniać adres sprzętowy, zmienną procesową i warunek logiczny użyty w programie.
Drugim problemem jest mylenie symbolu normalnie zamkniętego z fizycznym stykiem NC. W programie oznacza on negację warunku, a nie gwarancję, że urządzenie w szafie ma fizycznie zestyk normalnie zamknięty. To dwa różne poziomy opisu i ich pomieszanie potrafi odwrócić działanie blokady.
Błędy pojawiają się także przy podtrzymaniu. Gdy kilka sieci ustawia i kasuje ten sam bit, wynik zależy od kolejności wykonania. Przy bardziej złożonych procesach lepiej zaprojektować wyraźne stany maszyny niż mnożyć cewki SET i RESET w wielu miejscach.
Nie warto też testować programu wyłącznie na „idealnym” przebiegu. Sprawdzam krótkie impulsy, jednoczesne sygnały, odbicie styków, przerwany przewód, przekroczenie zakresu analogowego i restart sterownika. Program, który działa tylko w normalnych warunkach, nie jest jeszcze gotowym programem przemysłowym.
Jak podejść do nauki LAD i pierwszego projektu
Najrozsądniej zacząć od małego sterownika lub symulatora, a nie od skomplikowanej linii produkcyjnej. Pierwsze ćwiczenia powinny obejmować lampkę sterowaną przyciskiem, podtrzymanie start-stop, timer, licznik oraz prostą blokadę dwóch napędów.
Do nauki potrzebne są trzy rzeczy. Po pierwsze, znajomość podstaw logiki boolowskiej, czyli operacji „i”, „lub” oraz negacji. Po drugie, rozumienie cyklu skanowania PLC. Po trzecie, umiejętność czytania schematów elektrycznych, bo sama znajomość symboli LAD nie wystarczy do bezpiecznego uruchomienia maszyny.
Na początku nie skupiałbym się na zapamiętywaniu wszystkich instrukcji producenta. Więcej daje zbudowanie jednego małego programu, jego symulacja i obserwowanie każdego warunku online. Dopiero później warto dodawać receptury, komunikację, diagnostykę i obsługę wartości analogowych.
Jeżeli projekt ma pracować na konkretnej maszynie, trzeba sprawdzić dokumentację sterownika, dostępne bloki oraz sposób adresowania wejść i wyjść. LAD jest standardem zapisu, ale szczegóły implementacji pozostają zależne od producenta, dlatego program dla Siemens TIA Portal, Rockwell Studio 5000, Codesys czy sterownika Mitsubishi może wyglądać podobnie, lecz nie będzie identyczny.
Drabinka działa najlepiej wtedy, gdy każdy szczebel coś wyjaśnia
Język drabinkowy nadal ma mocną pozycję w automatyce, ponieważ łączy logikę sterowania z formą zrozumiałą dla osób pracujących przy elektryce i utrzymaniu ruchu. Wybieram go przede wszystkim do blokad, sekwencji prostych operacji, alarmów i sterowania sygnałami binarnymi.
Największą różnicę robi nie liczba użytych instrukcji, lecz czytelna struktura, dobre nazwy i przewidywalne zachowanie po błędzie. Gdy program zaczyna przypominać plątaninę połączeń, warto podzielić go na funkcje albo przenieść obliczenia do ST, zamiast dokładać kolejne szczeble. Dzięki temu diagnostyka pozostaje szybka, a modyfikacja maszyny nie zamienia się w zgadywanie.