Programowanie obiektowe kontra drabinkowe

Fot. 2. PLC Productivity2000 firmy AutomationDirect to sprzęt będący platformą przemysłową wykorzystującą metodę programowania drabinkowego. Źródło: AutomationDirect

Wielu młodych automatyków chętnie wybiera programowanie obiektowe, jednak należy pamiętać o tym, że programowanie drabinkowe wciąż pozostaje standardem w zastosowaniach automatyki przemysłowej.

Wielu młodych naukowców, inżynierów, technologów i matematyków (STEM), biorących udział w programie FIRST oraz innych programach dla szkół wyższych, używało lub programowało kiedyś Raspberry Pi, Arduino lub inny mikrokontroler. Większość uczniów w sposób domyślny uczy się programowania obiektowego, dlatego właśnie ten rodzaj programowania jest przez nich najczęściej wybierany.

Jednak rozwiązania automatyki przemysłowej wykorzystują programowanie drabinkowe (ang. ladder diagram). Od prawie 50 lat programiści z wieloletnim doświadczeniem z sympatią podchodzą do tego sposobu programowania. Trzeba jednak mieć świadomość, że ludzie ci nie pozostaną z nami na zawsze, a przemysł ciągle zatrudnia nowych pracowników, którzy są w większości zaznajomieni z programowaniem obiektowym. W jaki sposób możemy ich zachęcić do zapoznania się z programowaniem drabinkowym?

Pojęcie programowania obiektowego

Programowanie obiektowe ma dłuższą historię od programowania drabinkowego. Pojawiło się w latach 60. XX wieku, a nawet wcześniej. Dostępny współcześnie na rynku sprzęt i programy przyczyniły się do radykalnego wzrostu popularności tej metody. Wiodące mikrokontrolery, takie jak Arduino i Raspberry Pi, są tego przykładem (fot. 1).

Mikrokontrolery Arduino zwykle programuje się, korzystając z podstawowej formy języka C. Środowisko mikrokomputerów Raspberry Pi zbudowane jest w oparciu o system Linux, wykorzystujący wiele platform programowania obiektowego, takich jak Python i Java. Te niedrogie mikrokontrolery oraz platforma Microsoft .NET sprawiają, że programowanie obiektowe stało się dostępne dla tych wszystkich, którzy chcą go używać.

Fot. 1. Mikrokontrolery Arduino są zwykle programowane za pomocą programowania obiektowego, którego podstawową formą jest język C. Źródło: AutomationDirect

Zalety programowania obiektowego

W porównaniu do projektowania drabinkowego projektowanie obiektowe ma takie zalety, jak:

→ poręczny kod łatwy do ponownego użycia;

→ możliwość implementacji równań matematycznych, pętli itp.;

→ jest elementem niemal wszystkich kursów programowania;

→ kod może być uruchomiony na wielu platformach sprzętowych.

Programowanie obiektowe wykorzystuje obiekty. Aby pojąć ideę programowania obiektowego, bardzo ważne jest zrozumienie konceptu obiektów i ich wykorzystania. Jeśli tworzymy obiekt lub klasę, w łatwy sposób możemy ich ponownie użyć i dokonywać wielokrotnych ich wywołań. Np. obiekt tworzony na potrzeby sterowania silnikiem elektrycznym obsługuje wejścia-wyjścia oraz błędy. Ten jeden obiekt może być użyty wiele razy jako instancja (pojedyncze wywołanie), w przypadku gdy potrzebujemy sterować wieloma silnikami naraz. Jest wywoływany za każdym razem, gdy tworzona jest nowa instancja.

Każda instancja dla każdego silnika wykorzystuje swoje własne zmienne, takie jak wyłączenie silnika, stan pracy silnika, jego obroty, przeciążenie itd. Znaczna część pracy włożonej w programowanie ma miejsce na początku, gdy powstaje obiekt. Jest to zupełnie inne podejście niż w przypadku programowania drabinkowego. Jest też znacznie skuteczniejsze, ponieważ jeśli już obiekt zostanie stworzony, to łatwo go użyć ponownie.

Programowanie obiektowe pozwala również na łatwe wykorzystanie zależności matematycznych, pracę w pętli, tworzenie macierzy i podprogramów. Tego typu programowania uczy się niemal na każdym kursie programowania w liceum, na studiach oraz kursach online. Kod jest tworzony tak, by mógł być przenoszony i implementowany na różnych platformach sprzętowych.

Wady programowania obiektowego

W odróżnieniu od projektowania drabinkowego wadami projektowania obiektowego są:

→ ogólne skomplikowanie;

→ język trudny do nauczenia;

→ trudność w rozwiązywaniu problemów przez personel obsługujący;

→ zwykle kod musi być kompilowany, więc źródło kodu musi być wgrane do procesora.

Programowanie obiektowe potrzebuje więcej zasobów niż programowanie drabinkowe, ponieważ zużywa więcej pamięci i mocy obliczeniowej. Jest trudniejsze do nauczenia. Aby skutecznie pojąć ideę tego programowania, należy poświęcić więcej czasu, ćwiczeń i testów na kursach czy przedmiotach informatycznych w szkole.

W przypadku programowania obiektowego większą uwagę trzeba zwrócić na zrozumienie kodu, aby we właściwy sposób zajmować się usuwaniem błędów lub jego modyfikacją. W przypadku tak zaawansowanego programowania problemem może być monitorowanie działania kodu w czasie rzeczywistym.

Źródło kodu musi zostać skompilowane, zanim zostanie wgrane do mikrokontrolera. Zwykle źródło kodu nie znajduje się w pamięci procesora. Oznacza to, że powinniśmy przechowywać kopię zapasową kodu, ponieważ edycja skompilowanego kodu jest zwykle praktycznie niemożliwa. W przypadku programowania obiektowego biblioteki muszą zostać połączone z zasobami podczas kompilacji. Jeśli połączenia i zasoby nie są właściwie rozumiane, możemy mieć problem z uruchomieniem programu.

Nauka programowania drabinkowego

Programowanie drabinkowe to uproszczona i przejrzysta metoda programowania. Niektórzy twierdzą nawet, że nie jest to właściwie język programowania. Metoda ta ma format graficzny, drabinkowy, przypominający schematy elektryczne stosowane w systemach sterowania wykorzystujących przekaźniki, dlatego większość użytkowników bardzo szybko się go uczy.

Przez ostatnie dziesięciolecia był to w zasadzie jedyny stosowany w przemyśle język programowania i wciąż jest jednym z głównych języków programowania używanych w aplikacjach automatyki przemysłowej (fot. 2).

Z czasem, gdy osoby zajmujące się różnymi dziedzinami i z różnymi doświadczeniami wkroczyły do świata przemysłu, w automatyce przemysłowej zaczęły być wykorzystywane inne języki. Są nimi schematy blokowe, programowanie tekstowe, state programming oraz język sekwencyjny. Cztery języki programowania oraz programowanie drabinkowe zostały opisane w standardzie IEC 61131-3, stworzonym przez Międzynarodową Komisję Elektrotechniczną (IEC), który jest podstawą na kursach akademickich.

Idea przyświecająca stworzeniu tego standardu jest taka, że jeśli każdy dostawca będzie uwzględniał standard, choćby do pewnego stopnia, to każdy, kto nauczy się tych pięciu języków, będzie mógł swobodnie zmieniać platformy pochodzące od różnych dostawców. Niestety rzeczywistość jest nieco inna.

Podstawowe zasady programowania drabinkowego, podobnie jak w przypadku sterowania przekaźnikami i cewkami, są takie same, lecz interfejs użytkownika i pewne szczegóły dotyczące programowania danej platformy różnią się w zależności od jej producenta.

Mimo braku standaryzacji programowanie drabinkowe jest pod pewnymi względami lepsze od programowania obiektowego, ponieważ:

→ doskonale nadaje się zarówno do sterowania maszyną, jak i procesem,

→ jest łatwe do zrozumienia i przejrzyste,

→ pozwala w prosty sposób rozwiązywać problemy,

→ umożliwia usuwanie błędów (debugowanie),

→ kod źródłowy może być przechowywany w samym procesorze.

Programowanie drabinkowe nadaje się doskonale do sterowania maszyną oraz procesem, zwłaszcza w przypadku systemu automatyki z dyskretnymi sygnałami wejścia/wyjścia. Programowanie drabinkowe przez lata funkcjonowania na rynku zostało przystosowane do obsługi analogowych wejść i wyjść, co sprawia, że jest doskonałe w przypadku sterowania wieloma rodzajami procesów, które zwykle charakteryzują się większą liczbą analogowych wejść/wyjść w porównaniu do sterowania maszyną.

Wielu wyszkolonych technicznie pracowników może bardzo szybko się nauczyć programowania drabinkowego, ponieważ jest ono znacznie łatwiejsze niż programowanie obiektowe. Logika tego typu programowania jest systematyczna i uporządkowana, co sprawia, że łatwo zrozumieć jej przejrzystą naturę. W każdej linii kodu musi zajść warunek prawdy, aby mogła być uruchomiona. Jeżeli obsługujemy 5 silników, to zwykle programujemy 5 linii kodu. Zapewnia to wysoki poziom uproszczenia.

Fot. 3. Ekran główny oprogramowania AutomationDirect Productivity Suite przedstawia intuicyjną postać programowania drabinkowego, łatwą do zrozumienia nawet przez osoby z niewielkim doświadczeniem w programowaniu. Źródło: AutomationDirect

Łatwiejszy do nauczenia

Programowanie drabinkowe jest intuicyjne dla inżynierów elektryków oraz personelu zajmującego się utrzymaniem ruchu. Wymaga innego podejścia niż programowanie obiektowe, ale można się go szybko nauczyć. Mniej czasu zajmuje również zrozumienie kodu napisanego przez innych. Od razu wiadomo, kiedy zachodzi warunek prawdy, a kiedy fałsz. Przełączniki włącz/wyłącz, porównanie zmiennych i popularne funkcje matematyczne są łatwe do prześledzenia, nawet przez kogoś z niewielkim doświadczeniem w programowaniu (fot. 3).

Łatwość użycia pomaga również uprościć rozwiązywanie problemów i znajdowanie błędów. W bezpośredni i prosty sposób możemy zobaczyć, jak działa program, monitorując działania logiczne.

Doświadczenie w programowaniu lub wyższe studia informatyczne nie są wymagane do obsługi tego typu programowania. W przypadku programowania drabinkowego personel utrzymania ruchu i inżynierowie mogą z łatwością śledzić logikę procesu i rozumieć zasady jej działania. Projektowanie drabinkowe można kojarzyć z tabelą prawdy. Jeżeli pytanie logiczne po lewej stronie jest prawdą, to uruchamiane jest działanie logiczne po prawej stronie.

Kod źródłowy programu drabinkowego jest często przechowywany w samym kontrolerze. Pozwala to wyeliminować frustrację programisty, gdy ma on trudności ze zrozumieniem działania skompilowanego programu ze względu na brak dostępu do kodu źródłowego, co jest częstym przypadkiem przy programowaniu obiektowym. Niestety w porównaniu do projektowania obiektowego projektowanie drabinkowe może:

→ być obce dla programistów komputerowych i specjalistów z branży IT,

→ sprawiać trudności przy wykonywaniu zadań matematycznych, wpisywaniu tekstu oraz obróbce danych,

→ być niezależne od cykli pracy sterowników PLC,

→ wymagać specjalistycznego sprzętu do uruchamiania programów w takich urządzeniach jak programowalne jednostki sterujące PLC.

Programowanie drabinkowe to pełny symboli język programowania, który może być nieznany programistom komputerowym i specjalistom IT, ponieważ nie uczy się go w szkole. Wykonywanie zadań matematycznych, zmiennych tekstowych oraz obróbki danych w ramach programowania drabinkowego może sprawiać trudności, ponieważ programowanie to nie jest dedykowane do wykonywania takich zadań.

Zależność od cyklu

Programowanie drabinkowe jest niezależne od cyklu pracy sterownika. Większe programy zajmują sterownikowi więcej czasu do przejścia pełnego cyklu i rozwiązania zadań logicznych. W przypadku programowania drabinkowego sygnały wejściowe są czytane, logika jest rozwiązywana, tabela danych i wyjścia są odświeżane, wykonywana jest również komunikacja z zewnętrznymi urządzeniami, a następnie cykl się powtarza. Funkcje, takie jak przerwania i inne techniki, także mogą być implementowane, by upewnić się, że niektóre działania wykonywane są szybciej.

Jednakże sterowniki PLC z oprogramowaniem wykorzystującym programowanie drabinkowe mogą być obsługiwane na platformie komputerów PC, a sam sterownik PLC jako sprzęt jest dopasowany do konkretnego środowiska programowania kupionego u tego samego dostawcy. Zapewnia to kompatybilność, ale utrudnia zmianę dostawcy.

Ponadto, oprócz rozważań na temat zalet i wad programowania drabinkowego i obiektowego, użytkownicy powinni wziąć pod uwagę środowisko, do którego zamierzają wprowadzić dany język programowania. Jeżeli fabryka lub placówka korzysta już w standardzie z programowania drabinkowego, wówczas użycie programowania obiektowego będzie niekorzystne, nawet jeśli jest ono lepsze do konkretnej aplikacji. Projektowanie obiektowe zyskuje na popularności, jednak uważa się, że będzie współistnieć z programowaniem drabinkowym jeszcze przez dziesięciolecia. Zatem obiecujący, profesjonalny automatyk powinien znać oba te języki.


Jerry Reaves jest menedżerem produktu w firmie AutomationDIrect.