Skip to main content

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:

  1. Załączenie podajnika — styk przycisku Start sterujący cewką wyjścia podajnika.
  2. Start/Stop z podtrzymaniem — przerzutnik RS (z biblioteki standardowej IEC 61131-3), gdzie reset jest dominujący.
  3. Wykrywanie zbocza — styk z funkcją detekcji zbocza opadającego sygnału z czujnika zbliżeniowego (wyzwala impuls, gdy paczka schodzi z wiązki).
  4. 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:

O autorze

Kamil Biedulski

Author Kamil Biedulski

Automatyk i programista, CTO w ControlByte

Więcej postów tego autora Kamil Biedulski