Programowanie w języku LAD (drabinkowym) to najszybsza droga do pierwszego działającego programu PLC. W tym wpisie pokażę, jak uczyć się go w praktyce bez fizycznego sterownika: uruchomimy symulator PLCnext, połączymy go z wirtualną fabryką Factory IO przez Modbus TCP i napiszemy program sterujący paletyzatorem.
To trzecia część serii o programowaniu sterowników Phoenix Contact. Wcześniej omówiliśmy jak zacząć z PLCnext oraz konfigurację sterownika AXC F 2152.
Cyfrowy bliźniak — po co symulacja w nauce PLC?
Factory IO to wirtualna fabryka 3D, która działa jako cyfrowy bliźniak rzeczywistej maszyny. Piszesz program, łączysz go ze sterownikiem (lub jego symulatorem) i testujesz działanie linii — bez ryzyka uszkodzenia sprzętu i bez kosztów. To idealne środowisko do nauki: widzisz efekt swojej logiki od razu na ekranie. Jeśli chcesz poznać sam program, zajrzyj do artykułu Factory IO — wirtualna fabryka do nauki programowania PLC.
Instalacja Factory IO i scena paletyzatora
Na start pobierasz Factory IO oraz gotowy plik projektu ze sceną paletyzatora. Po otwarciu zobaczysz linię z dwoma podajnikami wejściowymi, podajnikiem palet i podajnikiem rolkowym wyjściowym — to ją będziemy sterować. Cały proces instalacji pokazuję na wideo:
Uruchomienie symulatora PLCnext
PLCnext Engineer pozwala uruchomić wirtualny sterownik, więc do nauki nie potrzebujesz fizycznego AXC. W zakładce Cockpit wybierasz tryb Simulation i klikasz Connect to the controller. Po chwili (2–3 minuty) wirtualny PLC startuje — logujesz się danymi admin / plcnext. Od tego momentu pracujesz tak samo jak na realnym sterowniku: tryb online, debugowanie zmiennych, restart runtime czy całego systemu Linux.
Połączenie PLCnext z Factory IO przez Modbus TCP
Symulator i Factory IO komunikują się protokołem Modbus TCP. Po stronie sterownika uruchamiamy blok serwera Modbus TCP, a w Factory IO w zakładce Drivers wybieramy Modbus TCP/IP Client. Kluczowy szczegół: symulator startuje z adresem IP 192.168.1.2 (inny niż realny sterownik 192.168.1.10), port 502. Gdy w PLCnext Engineer zmienna połączenia pokaże xConnected = true, a w Factory IO zaświeci zielona ikona — komunikacja działa i widzisz sygnały z czujników na żywo.
Struktura projektu — worksheety, taski, zmienne
Kod PLCnext organizujemy w programie (np. PRG_Palletizer), który może zawierać kilka arkuszy (worksheetów) w różnych językach:
- Variables — deklaracja zmiennych lokalnych i globalnych (m.in. wymienianych z Factory IO przez Modbus).
- FBD — blok obsługujący komunikację Modbus TCP.
- ST — przepisanie sygnałów z Modbus na zmienne programu.
- LAD — nasz program drabinkowy (tu zaczynamy pisać).
- Blok funkcyjny paletyzatora — gotowa logika maszyny.
Sam program to nie wszystko — trzeba przypisać go do tasku w CPU. W projekcie jest task cykliczny wykonywany co 20 ms, który wywołuje instancję PRG_Palletizer. Dopiero wtedy sterownik realizuje kod.
Programowanie w języku LAD — podajniki i siłownik
Teraz najważniejsze — piszemy logikę w języku drabinkowym. Tworzymy nowy worksheet w trybie NOLD (Network Oriented Ladder Logic) i budujemy program krok po kroku:
- Załączenie podajnika — styk przycisku Start sterujący cewką wyjścia podajnika.
- Start/Stop z podtrzymaniem — przerzutnik RS (z biblioteki standardowej IEC 61131-3), gdzie reset jest dominujący.
- Wykrywanie zbocza — styk z funkcją detekcji zbocza opadającego sygnału z czujnika zbliżeniowego (wyzwala impuls, gdy paczka schodzi z wiązki).
- Czasówka — Timer Pulse, który podtrzymuje wysuw siłownika pneumatycznego przez zadany czas (np. 1,5 s).
Po drodze poznasz przydatne narzędzie — refactoring, czyli zmianę nazwy zmiennej w całym projekcie jednym ruchem. To podstawa utrzymania czytelnego kodu.
Integracja z blokiem funkcyjnym paletyzatora
Na koniec łączymy nasz kod z gotowym blokiem funkcyjnym paletyzatora. Zamiast powielać obsługę przycisków, wykorzystujemy zmienną statusową xStateStart z instancji paletyzatora — przyciski Start, Stop i Reset są już w nim zaimplementowane. Po aktywacji bloku i przejściu w tryb Auto cały paletyzator rusza razem z podajnikiem wejściowym i siłownikiem. Twoja aplikacja działa — w całości na komputerze, w symulatorze.
Symulator a prawdziwy sterownik — o czym pamiętać
Symulator PLCnext zachowuje się niemal identycznie jak fizyczny sterownik, ale warto znać kilka różnic:
- Adres IP — symulator startuje z 192.168.1.2, a realny sterownik domyślnie z 192.168.1.10. Ustaw właściwy adres w driverze Factory IO.
- Determinizm — na realnym sterowniku cykl jest twardo deterministyczny; w symulatorze czasy reakcji zależą od mocy komputera.
- Komunikacja — przy sterowaniu czasowym (np. czasówka siłownika) drobne opóźnienia wymiany danych z Factory IO mogą wpływać na efekt. Na produkcji warto oprzeć się na czujnikach krańcowych zamiast czasówki.
- Źródło sygnałów — w symulacji wejścia/wyjścia pochodzą z Factory IO, a nie z fizycznych modułów Axioline.
Najczęstsze problemy (i jak je rozwiązać)
- Factory IO nie łączy się — sprawdź, czy symulator jest aktywny oraz czy w driverze host to 192.168.1.2, port 502.
- xConnected = false — uruchom blok serwera Modbus TCP w programie (ustaw wejście Activate w stan wysoki).
- Siłownik nie wysuwa się — upewnij się, że wykrywasz właściwe zbocze sygnału z czujnika i że czasówka ma sensowny czas.
- Auto Connect bywa zawodny — w razie problemów połącz Factory IO ręcznie przyciskiem Connect.
Najczęstsze pytania (FAQ)
Czy mogę programować PLCnext bez fizycznego sterownika?
Tak. Wystarczy symulator PLCnext (tryb Simulation) i Factory IO jako cyfrowy bliźniak — potrzebujesz tylko komputera.
Jaki protokół łączy PLCnext z Factory IO?
Modbus TCP. Sterownik pełni rolę serwera, a Factory IO klienta (Modbus TCP/IP Client).
Jakie IP ma symulator PLCnext?
192.168.1.2 — uwaga, to inny adres niż domyślny realnego sterownika (192.168.1.10).
Czym jest język LAD?
Język drabinkowy (Ladder Diagram) z normy IEC 61131-3 — najbardziej intuicyjny język PLC, idealny do logiki binarnej i układów Start/Stop.
Podsumowanie
Programowanie w języku LAD na PLCnext możesz ćwiczyć w pełni wirtualnie: symulator sterownika + Factory IO połączone przez Modbus TCP dają realistyczne środowisko bez żadnego sprzętu. Od prostego załączenia podajnika, przez przerzutnik RS, wykrywanie zbocza i czasówkę, po integrację z blokiem paletyzatora — to komplet podstaw, które wykorzystasz w prawdziwych aplikacjach.
W ostatnim wpisie serii pokażę, jak udostępnić dane z paletyzatora na zewnątrz: OPC UA, MQTT, Node-RED i raporty PDF w Pythonie. Tymczasem obejrzyj lekcje wideo i spróbuj sam:









