LAD czy SCL, drabinka czy Structured Text? Najszybciej zrozumiesz różnicę nie z listy cech, tylko z jednego programu zapisanego w obu językach. W tym poradniku bierzemy klasyczny układ START/STOP silnika z podtrzymaniem i zapisujemy go na cztery sposoby: jako szczebel drabinki, jako wyrażenie w Structured Text, jako instrukcję IF / ELSIF i jako SCL w TIA Portal. Potem porównujemy, do czego nadaje się każda wersja, i pokazujemy, gdzie przećwiczyć obie obok siebie w darmowym symulatorze PLC.

Czym jest LAD, a czym SCL?
LAD, czyli język drabinkowy, to graficzny język programowania sterowników PLC. Program rysujesz ze styków i cewek ułożonych w szczeble, tak jak na schemacie elektrycznym przekaźników. Styk przepuszcza sygnał, gdy zmienna ma stan wysoki (logiczne 1) albo niski, a cewka ustawia sygnał wyjściowy. W sterownikach Siemens S7-1200 i S7-1500 LAD jest najczęściej wybieranym językiem na start.
SCL (Structured Control Language) to tekstowy język programowania sterowników Siemens, zgodny ze Structured Text z normy IEC 61131-3. Składnią przypomina Pascala: masz przypisania, instrukcje IF, CASE, pętle FOR i WHILE. Kod programu piszesz jak w zwykłym języku programowania, dlatego SCL dobrze radzi sobie z obliczeniami, tablicami i sekwencjami.
W TIA Portal masz do wyboru jeszcze FBD (bloki funkcyjne), STL (lista instrukcji) i GRAPH. Wszystkie języki możesz mieszać w jednym projekcie, a sterownik PLC wykonuje je w tym samym cyklu.
Zadanie: START/STOP silnika z podtrzymaniem
Silnikiem sterują dwa przyciski chwilowe. Wciśnięcie START uruchamia silnik, a silnik ma pracować dalej po puszczeniu przycisku. Wciśnięcie STOP zatrzymuje silnik, a gdy wciśnięte są oba przyciski, wygrywa STOP. Zielona lampka PRACA pokazuje, że silnik chodzi.
| Zmienna | Kierunek | Urządzenie | Co znaczy TRUE |
|---|---|---|---|
| Start | wejście | przycisk chwilowy NO | START wciśnięty |
| Stop | wejście | przycisk chwilowy NC | STOP puszczony, obwód sprawny |
| Motor | wyjście | stycznik silnika | silnik pracuje |
| RunLamp | wyjście | zielona lampka | lampka PRACA świeci |
Zwróć uwagę na wejście STOP. Przycisk jest podłączony jako normalnie zamknięty, więc wejście ma wartość TRUE, dopóki nikt go nie wciska. Wciśnięcie STOP albo przerwany przewód dają FALSE i zatrzymują silnik. Dlatego w programie STOP występuje jako styk normalnie otwarty: instrukcja sprawdza sygnał, a nie rodzaj fizycznego styku.
Cała logika w jednej linijce algebry Boole'a:
Motor = Stop AND (Start OR Motor)
Wyjście silnika czyta swój poprzedni stan. To sprzężenie zwrotne to właśnie podtrzymanie, nazywane też samopodtrzymaniem.
Wersja 1: drabinka LAD
W drabince ta sama idea wygląda jak układ stycznikowy. START i styk samego silnika są połączone równolegle, a STOP szeregowo z całą równoległą grupą.

// Szczebel 0
Start Stop Motor
--+--[ ]--+----[ ]-----( )--
| Motor |
+--[ ]--+
// Szczebel 1
Motor RunLamp
-----[ ]-----------( )--
W czym drabinka jest tu dobra:
- Czyta się ją jak schemat. Elektryk, który nigdy nie programował PLC, zrozumie ten szczebel.
- Podgląd online jest wizualny. Na pracującym sterowniku widzisz zielony przepływ sygnału i od razu wiesz, który styk blokuje ścieżkę.
- Priorytet STOP widać gołym okiem. STOP stoi szeregowo z obiema gałęziami, więc nic go nie omija.
Więcej przykładów drabinki znajdziesz w artykule Język drabinkowy PLC - programowanie w LAD na przykładach.
Wersja 2: Structured Text jako wyrażenie logiczne
W Structured Text szczebel zamienia się w jedno przypisanie. Nawiasy robią to samo co gałąź równoległa:
(* START/STOP silnika z podtrzymaniem *)
Motor := (Start OR Motor) AND Stop;
RunLamp := Motor;
Zapis jest krótki i precyzyjny, ale zobacz, co tracisz. Gdy silnik nie rusza, widzisz jeden wynik FALSE i musisz policzyć wyrażenie w głowie. Przy dwóch wejściach to proste, przy dwunastu warunkach już nie.
Wersja 3: Structured Text z IF / ELSIF
To samo zachowanie można zapisać jako decyzję. Wielu programistów woli tę wersję, bo priorytet STOP jest w niej wypisany wprost:

(* Stop ma wartość TRUE, gdy przycisk NC jest puszczony. *)
IF NOT Stop THEN
Motor := FALSE;
ELSIF Start THEN
Motor := TRUE;
END_IF;
RunLamp := Motor;
Tu nie ma gałęzi podtrzymania. Jeśli żaden warunek nie jest spełniony, instrukcja IF nie zmienia zmiennej Motor, więc wyjście zachowuje wartość z poprzedniego cyklu. Pamięć siedzi w zmiennej, a nie w styku sprzężenia. Ponieważ STOP jest sprawdzany jako pierwszy, wygrywa, gdy wciśnięte są oba przyciski.
Składnię IF, ELSIF i CASE omawiamy szerzej w artykule Structured Text (ST) - składnia i przykłady.
Wersja 4: SCL w TIA Portal
SCL to implementacja Structured Text z normy IEC 61131-3 w sterownikach Siemens, więc logika jest identyczna. Widoczna różnica w TIA Portal to zapis zmiennych: globalne tagi PLC piszesz w cudzysłowach, a zmienne lokalne bloku poprzedzasz znakiem #.
// Globalne tagi PLC w TIA Portal
"Motor" := ("Start" OR "Motor") AND "Stop";
"RunLamp" := "Motor";
Albo z wypisanym wprost priorytetem STOP:
IF NOT "Stop" THEN
"Motor" := FALSE;
ELSIF "Start" THEN
"Motor" := TRUE;
END_IF;
Jeśli znasz Structured Text z CODESYS albo Connected Components Workbench, SCL przeczytasz od pierwszego dnia. Kolejne przykłady w SCL znajdziesz w serii Programowanie PLC w języku SCL.
Sprzęt Allen-Bradley wykorzystywany w naszych materiałach (sterowniki Micro800, panele operatorskie i akcesoria) dostarcza nasz partner technologiczny Elmark Automatyka, autoryzowany dystrybutor Rockwell Automation w Polsce.
Dodatkowo: wersja z SET i RESET
Jest jeszcze czwarty popularny wzorzec: cewki ustawiające i kasujące. START ustawia silnik, STOP go kasuje.
// Szczebel 0
Start Motor
-----[ ]--------(S)--
// Szczebel 1
Stop Motor
-----[/]--------(R)--
W Structured Text:
IF Start THEN
Motor := TRUE;
END_IF;
IF NOT Stop THEN
Motor := FALSE;
END_IF;
Tutaj liczy się kolejność. Kasowanie wykonuje się po ustawieniu, więc gdy wciśnięte są oba przyciski, ostatni zapis w cyklu należy do RESET i wygrywa STOP. Zamień szczeble miejscami, a wygra START. Instrukcja STOP jest tu normalnie zamknięta, bo kasowanie ma zadziałać, gdy sygnał STOP ma wartość FALSE.
LAD czy SCL: porównanie
| Kryterium | Drabinka (LAD, LD) | Tekst (ST, SCL) |
|---|---|---|
| Czytelność dla elektryków i utrzymania ruchu | bardzo wysoka, wygląda jak schemat | niższa, wymaga obycia z programowaniem |
| Szukanie usterek online | wizualny przepływ sygnału, szybko widać blokujący styk | wartości zmiennych, wolniej przy długich warunkach |
| Blokady i obsługa wejść/wyjść maszyny | naturalne zastosowanie | działa, ale długie wyrażenia są nieczytelne |
| Obliczenia, dane, pętle i tablice | niewygodne | naturalne zastosowanie |
| Sekwencje i automaty stanów | możliwe, dużo szczebli | zwięźle przez CASE |
| Ponowne użycie kodu i kontrola wersji | trudniej porównać | zwykły tekst, łatwo porównać w Git |
W praktyce większość programów maszyn łączy oba języki. Blokady, warunki zezwoleń i mapowanie wejść/wyjść często zostają w drabince, bo utrzymanie ruchu czyta je w nocy przy awarii. Obliczenia, receptury, komunikacja i sekwencje trafiają do Structured Text albo SCL. Szerzej o miejscu drabinki wśród języków PLC piszemy w artykule Ladder Logic - co to jest i jak wypada na tle innych języków.
Czy język wpływa na czas cyklu?
Przy prostej logice, takiej jak ten układ START/STOP, różnica w czasie cyklu między drabinką a Structured Text jest zwykle pomijalna. Oba języki są kompilowane przez środowisko producenta do kodu sterownika, a wynik zależy bardziej od CPU, kompilatora i sposobu napisania programu niż od edytora. Structured Text bywa szybszy przy dużej liczbie obliczeń albo pętlach po tablicach, bo wyraża je bezpośrednio. Jeśli czas naprawdę ma znaczenie, zmierz czas cyklu na docelowym sterowniku zamiast zgadywać.
Inne języki IEC 61131-3 i platformy producentów
Drabinka i Structured Text to dwa z języków zdefiniowanych w normie IEC 61131-3. Pozostałe to język bloków funkcyjnych FBD, sekwencyjny SFC do kroków i przejść oraz starsza lista instrukcji IL, którą norma uznała za przestarzałą. W starszych sterownikach Siemens podobną rolę pełnił tekstowy STL.
Dostępne języki zależą od platformy:
- Siemens TIA Portal: LAD, FBD, SCL, GRAPH (odpowiednik SFC) i STL w S7-1500.
- Rockwell Studio 5000 (ControlLogix, CompactLogix): drabinka, bloki funkcyjne, Structured Text i SFC.
- Rockwell Connected Components Workbench (Micro800): drabinka, bloki funkcyjne i Structured Text.
- CODESYS: wszystkie języki IEC 61131-3, a do tego CFC.
Języki można łączyć w jednym projekcie: procedura w drabince z blokadami może wywoływać blok funkcyjny w Structured Text z obliczeniami. Takie połączenie jest typowe w programach prawdziwych maszyn.
Trzy częste błędy
- STOP tylko w gałęzi START. Wtedy gałąź podtrzymania omija STOP i silnika nie da się zatrzymać. STOP musi stać szeregowo z całą równoległą grupą.
- Styk normalnie zamknięty dla przycisku NC. Podłączenie NC już sprawia, że sygnał ma wartość TRUE po puszczeniu. Ponowne odwrócenie go w programie odwraca logikę.
- Testowanie z wciśniętym START. Brak podtrzymania jest niewidoczny, dopóki trzymasz START. Zawsze testuj krótkie wciśnięcie i puszczenie.
Przećwicz to w symulatorze
Obie wersje napiszesz obok siebie w Virtual PLC Sim, darmowym symulatorze PLC online. Profil Allen-Bradley Micro850 ma arkusze drabinki (LD) i Structured Text, a profil Siemens S7-1200 ma LAD i SCL. Dodaj drugi arkusz, przełączaj się między nimi i obserwuj wartości na żywo, gdy wciskasz START i STOP.
W darmowej piaskownicy zbudujesz tę zasadę na własnych zmiennych. Pełne zadania START/STOP z automatycznymi testami są w ścieżce ćwiczeń kursowych. Publiczny poradnik START/STOP w PLC: podtrzymanie pracy silnika krok po kroku omawia kolejność testów, a przewodnik Virtual PLC Sim: symulator PLC w przeglądarce zawiera listę wszystkich ćwiczeń.
To edukacyjny układ sterowania, a nie projekt wyłączenia awaryjnego. Prawdziwe funkcje zatrzymania awaryjnego wymagają aparatury bezpieczeństwa i oceny ryzyka.
Naucz się drabinki i SCL na kursie
- Kurs programowania PLC Siemens S7-1200/1500 w LAD/FBD - drabinka w TIA Portal od pierwszego szczebla.
- Kurs programowania PLC w CODESYS w języku ST - Structured Text według IEC 61131-3.
- Wszystkie kursy PLC - porównanie według platformy i poziomu.
Najczęstsze pytania
Co jest lepsze: LAD czy SCL?
Żaden język nie jest lepszy ogólnie. Drabinka lepiej sprawdza się w blokadach i przy szukaniu usterek przez utrzymanie ruchu. SCL i Structured Text są lepsze do obliczeń, obsługi danych, pętli i sekwencji. Większość programów używa obu.
Czy LAD i LD to ten sam język?
Tak. LD (Ladder Diagram) to nazwa z normy IEC 61131-3, a LAD to nazwa tego samego języka drabinkowego w środowisku Siemens TIA Portal. Rockwell i CODESYS używają skrótu LD.
Czym jest podtrzymanie w PLC?
Podtrzymanie, czyli samopodtrzymanie, utrzymuje wyjście po puszczeniu przycisku chwilowego. W drabince to styk samego wyjścia połączony równolegle ze stykiem START.
Dlaczego przycisk STOP podłącza się jako NC?
Ze względu na bezpieczeństwo funkcji sterowania. Przy przycisku NC przerwany przewód działa tak samo jak wciśnięcie STOP, więc maszyna się zatrzymuje, zamiast stać się niemożliwa do zatrzymania.
Czy SCL to to samo co Structured Text?
SCL to implementacja Structured Text z normy IEC 61131-3 w sterownikach Siemens. Składnia jest prawie taka sama, różnice dotyczą głównie TIA Portal, na przykład cudzysłowów przy tagach globalnych i znaku # przy zmiennych lokalnych.
Od czego zacząć naukę: od drabinki czy od Structured Text?
Większość osób zaczyna od drabinki, bo pokazuje logikę wizualnie. Potem warto przejść do Structured Text albo SCL, bo bez nich trudno napisać cokolwiek poza prostą logiką wejść i wyjść.


