Jest to jedno z pierwszych pytań, które pojawia się podczas poznawania zagadnień automatyki przemysłowej i programowania sterowników PLC.
Automatyka przemysłowa to nie świat IT, a kod programu musi być zarówno dobrze przygotowany, jak i prosty w diagnostyce, gwarantując tym samym możliwie najkrótszy czas na odnalezienie miejsca wystąpienia błędu, jak i przyszłe modernizacje sterowania.
Po pierwsze, wyróżniamy dwa rodzaje języków programowania – graficzne oraz tekstowe. Zadaniem tych pierwszych jest prostota zapisu oraz przejrzystość kodu programu – po latach doświadczeń jasno stwierdzam, że nie ma dla automatyka nic lepszego, niż przejrzyście napisany kod, który łatwo diagnozować i testować. Zadaniem tych drugich jest realizacja złożonych operacji, takich jak przetwarzanie dużych ilości danych, zaawansowane obliczenia czy specjalistyczne algorytmy regulacji. W środowisku Siemens TIA Portal dostępne są następujące graficzne języki programowania:
- język drabinkowy LAD (ang. ladder diagram),
- język bloków funkcyjnych FBD (ang. function block diagram),
- język sekwencyjny GRAPH (ang. sequential function chart, SFC),
oraz tekstowe języki programowania:
- język wysokiego poziomu SCL (ang. structured control language),
- język niskiego poziomu STL (ang. statement list).
Przechodząc do sedna – który z nich jest najpopularniejszy? Spójrzmy na poniższą grafikę.

Powyższy wykres kołowy pochodzi z książki Automatyka przemysłowa dla początkujących i stanowi szacunkowy udział języków programowania w projektach przemysłowych. Należy pamiętać, że w ramach jednego projektu można łączyć różne języki programowania.
Język drabinkowy LAD jest najczęściej i najchętniej stosowanym językiem programowania sterowników PLC. Dlaczego? Ponieważ jego prostota zapisu, przypominająca schematy elektryczne jest przyjazna dla większości, jeżeli nie wszystkich użytkowników. Wprowadzanie zmian oraz prostota podglądu działania kodu są jednymi z kluczowych czynników, z powodu których to właśnie ten język jest na pierwszym miejscu.

Co z pozostałymi językami graficznymi – FBD oraz GRAPH? Zacznijmy od języka FBD – pomimo innej, blokowej metodyki budowania programów jego składnia jest bardzo podobna do języka drabinkowego LAD. W praktyce oznacza to najczęściej, iż umiejętność programowania w jednym z tych języków jest w zupełności wystarczająca, aby pracować z drugim. Naturalnie, pewne elementy języka FBD istotnie różnią się od języka LAD, np. sposób negacji sygnału logicznego czy obecność bramki XOR, niemniej jednak nie sprawia to użytkownikowi większych trudności. Skąd zatem taka dysproporcja w udziale rynkowym? Ciężko stwierdzić, lecz po przeszkoleniu ponad 2000 osób i przejrzeniu setek projektów przemysłowych mam tylko jedną odpowiedź:
Język LAD jest po prostu popularniejszy od FBD
Weźmy teraz pod lupę język GRAPH, ponieważ jego sytuacja jest nieco odmienna. Konstrukcja języka GRAPH bazuje na krokach i przejściach, gdzie użytkownik jasno określa, jakie operacje mają zostać wykonane w konkretnym kroku, a także jaka logika jest niezbędna, aby przejść do następnego. Jest to idealne rozwiązanie do obsługi procesów dyskretnych (otwórz, przesuń, uruchom, zamknij, obróć, itd.), lecz mimo wszystko język ten nie jest tak popularny, jak można by się tego spodziewać. Dlaczego? Z jednej strony, program w języku GRAPH jest rewelacyjny w diagnostyce, ponieważ użytkownik dokładnie widzi, w którym kroku (lub wielu krokach jednocześnie) znajduje się program. Z drugiej strony, konstrukcja programu jest specyficzna dla tego języka i nie przypomina omawianych wcześniej języków LAD czy FBD (co prawda w przejściach sekwencji GRAPH używa się LAD/FBD). Innymi słowy, próg wejścia jest znacznie wyższy w porównaniu do języków LAD i FBD. Moim zdaniem? Szkoda, że GRAPH nie jest stosowany częściej.
SCL czy STL?
Tutaj odpowiedź jest bardzo prosta i krótka – wybieramy język SCL. W czasach integracji systemów IT z OT, skryptowania w JavaScript czy Python, a nawet vibe codingu stawiamy na język wysokiego poziomu. SCL, jako język programowania PLC, swoją składnią przypomina język Pascal. Tak czy inaczej, jak każdy język wysokiego poziomu oferuje gotowe konstrukcje, takie jak instrukcje warunkowe IF..ELSE, pętle FOR czy WHILE czy funkcję CASE. W przemyśle zdarza się, że cały kod maszyny czy linii jest oprogramowany wyłącznie w języku SCL – jest to rozwiązanie dobre tylko dla jednej ze stron, a mianowicie autorów oprogramowania.

Języki tekstowe z założenia są trudniejsze w diagnostyce i potwierdzi to każdy człowiek pracujący ze sterownikami PLC. Między innymi dlatego kod programu odpowiedzialny za:
- obsługę logiki (tryby pracy, pozwolenia, alarmy),
- wywołania innych bloków programowych,
- kontrolę sekwencji procesu
powinien być pisany w językach graficznych. Środowisko przemysłowe, w przeciwieństwie do świata IT nie składa się wyłącznie z doświadczonych programistów – często za obsługę awarii, diagnostykę kodu i wprowadzanie niewielkich zmian w programie odpowiedzialni są technicy utrzymania ruchu czy automatycy, którzy nie są programistami. W każdym województwie, w każdym mieście i w każdej firmie panuje inny zakres obowiązków dla pozornie tego samego stanowiska i to właśnie tutaj języki graficzne LAD, FBD i GRAPH znajdują szerokie uznanie.

Wracając do języka SCL – umiejętność programowania w tym języku jest bardzo ważna, ponieważ sterowniki PLC to już nie tylko sterowanie procesami technologicznymi czy maszynami. To także integracja z systemami informatycznymi (SAP, ERP, MES), usługami IT (bazy danych SQL, brokery MQTT) i przetwarzanie danych pochodzących z bardziej wyrafinowanych urządzeń, takich jak systemy wizyjne, czytniki RFID czy dedykowane kontrolery. Do takich zastosowań język SCL będzie idealny – algorytmy, procesowanie danych strukturalnych, obsługa zmiennych tekstowych.
A co z ominiętym językiem STL? Języki niskiego poziomy odchodzą w zapomnienie (chciałbym powiedzieć, że już odeszły, ale jak zapewne sam(a) się przekonasz to nie do końca prawda). W nowych aplikacjach liczy się czas i jakość wytworzonego oprogramowania, a sam język STL po prostu się do tego nie nadaje w nowych urządzeniach. Owszem, w czasach świetności sterowników S7-300 oraz S7-400 był to najpotężniejszy język programowania PLC, oferujący takie narzędzia jak adresacja pośrednia i rejestry wskaźnikowe, lecz wraz z rozwojem technologii wiele z tych operacji można zastąpić nawet językiem drabinkowym LAD, a jeżeli ten (podkreślam, graficzny) nie da rady, to z pewnością zrobi to język SCL.
Kolejność nauki języków programowania
Tutaj krótko.
- Język drabinkowy LAD – jest najpopularniejszy, prosty w obsłudze, stanowi fundament programowania PLC.
- Język tekstowy SCL – konieczność po opanowaniu języka LAD, udział tego języka w nadchodzących latach będzie się tylko zwiększał.
- Język sekwencyjny GRAPH – znakomite uzupełnienie pierwszych dwóch języków. Sekwencje można tworzyć w każdym języku, lecz to GRAPH oferuje najlepszą perspektywę ich tworzenia, monitorowania i diagnostyki.
- Język tekstowy STL – niby nieużywany, ale nie wolno o nim zapominać. Po pierwsze – na rynku wciąż królują sterowniki starszych generacji S7-300/S7-400, w których kod jest pisany w STL. Nawet jeżeli pracujemy w działach integratorskich (gdzie z założenia pracujemy z najnowszymi technologiami), to prędzej czy później pojawi się konieczność integracji ze starszą częścią procesu. A jeżeli nie integracja, to migracja oprogramowania do najnowszej platformy.
- Język graficzny FBD – umieszczam go na końcu, ponieważ zawsze jest dobry moment, aby z nim popracować (warto wiedzieć, że w TIA Portal jedyna dozwolona konwersja dla S7-1500/S7-1200 to LAD <–> FBD). Nie jest tak popularny, ale od czasu do czasu można napotkać jakiś fragment kodu właśnie w tym języku.
Na koniec dodam złoty środek na wytwarzanie oprogramowania sterowników PLC:
LAD + SCL + GRAPH
Język LAD do obsługi pozwoleń, rozkazów, trybów – prostota zapisu i diagnostyki.
Język SCL do przetwarzania danych, ich agregacji i złożonych algorytmów.
Język GRAPH do obsługi sekwencji maszyn i linii produkcyjnych.
Pamiętaj – języki PLC można ze sobą łączyć. Absolutnie nic nie stoi na przeszkodzie, aby stworzyć sekwencję w języku GRAPH, a wewnątrz wywoływać bloki w języku LAD i SCL, w zależności od potrzeb i wymagań projektowych.
