PLC Siemens

LAD czy SCL? Ten sam program START/STOP w drabince, Structured Text i SCL

Szymon Adamek 10 min czytania

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.

Ten sam program START/STOP w drabince LAD i w Structured Text, obok siebie w Virtual PLC Sim
Ten sam program START/STOP: po lewej drabinka, po prawej Structured Text.

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.

ZmiennaKierunekUrządzenieCo znaczy TRUE
Startwejścieprzycisk chwilowy NOSTART wciśnięty
Stopwejścieprzycisk chwilowy NCSTOP puszczony, obwód sprawny
Motorwyjściestycznik silnikasilnik pracuje
RunLampwyjściezielona lampkalampka 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 drabinki START/STOP z podtrzymaniem w Virtual PLC Sim: Start i Motor równolegle, Stop szeregowo
Szczebel 0: START równolegle ze stykiem Motor, szeregowo STOP. Szczebel 1: lampka PRACA powtarza stan silnika.
// 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:

Program START/STOP w Structured Text z IF NOT Stop THEN i ELSIF Start THEN w Virtual PLC Sim
Wersja z IF / ELSIF uruchomiona w symulatorze, z wartościami na żywo przy każdej zmiennej.
(* 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.

Elmark Automatyka

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

KryteriumDrabinka (LAD, LD)Tekst (ST, SCL)
Czytelność dla elektryków i utrzymania ruchubardzo wysoka, wygląda jak schematniższa, wymaga obycia z programowaniem
Szukanie usterek onlinewizualny przepływ sygnału, szybko widać blokujący stykwartości zmiennych, wolniej przy długich warunkach
Blokady i obsługa wejść/wyjść maszynynaturalne zastosowaniedziała, ale długie wyrażenia są nieczytelne
Obliczenia, dane, pętle i tabliceniewygodnenaturalne zastosowanie
Sekwencje i automaty stanówmożliwe, dużo szczeblizwięźle przez CASE
Ponowne użycie kodu i kontrola wersjitrudniej 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

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ść.

Autor Szymon Adamek

Dyrektor w ControlByte, automatyk. Autor kursu Predykcyjne utrzymanie ruchu i analiza danych w Pythonie. Prowadzi projekty szkoleniowe dla firm i szkół.

Kursy online

Chcesz programować PLC w praktyce?

Kursy Siemens, CODESYS, komunikacji i safety z certyfikatem i wsparciem instruktora. Zacznij od bezpłatnego minikursu.

Zobacz kursy