Przyszłość programowania drabinkowego

Programowanie drabinkowe jest najczęściej wybieranym językiem przez producentów wytwarzających produkty jednostkowe (discrete manufacturing). Jego przydatność w porównaniu do innych języków programowania opisanych w standardzie IEC 61131-3 zależy jednak m.in. od stopnia zaawansowania aplikacji.

Programowanie drabinkowe, pozostające wciąż wiodącym językiem programowania sterowników PLC, jest proste i graficznie przypomina schemat przekaźników i cewek. Czy logika drabinkowa jest najlepszym rozwiązaniem w przypadku sterowania obecnymi oraz przyszłymi skomplikowanymi systemami automatyki oraz jak wypada w porównaniu z innymi językami programowania? Okazuje się, że odpowiedź na te pytania nie jest taka prosta.

programowanie drabinkowe

Początki programowania drabinkowego

Automatyka istniała przed pojawieniem się sterowników PLC – często wykorzystywała sieć przekaźników sterujących daną aplikacją. Zasadniczo więc programowanie takie jak znamy we współczesnej formie w zasadzie nie było potrzebne. Inżynier projektował obwód, a jego instalację wykonał elektryk. Obwód mógł zostać zapisany jako schemat przypominający drabinkę, stąd nazwa programowania drabinkowego (rys. 1).

Gdy pojawiły się sterowniki PLC, były one wówczas rozwiązaniem obiecującym dla automatyki, ale nikt nie wiedział, w jaki sposób je zaprogramować. Wówczas ktoś wpadł na pomysł programowania sterowników PLC za pomocą schematu drabinkowego, na wzór popularnych schematów drabinkowych, co pozwoliło na przewartościowanie ówczesnych umiejętności programowania. Inżynierowie i elektrycy mogli czytać i rozumieć program, a projekty z zakresu automatyki mogły być realizowane w podobny sposób jak układy przekaźnikowe.

Przed erą PLC przekaźniki zajmowały sporo przestrzeni w szafie sterowniczej, były kosztowne i wymagały długiego czasu instalacji. Ograniczała je również dwustanowa natura ich działania. Brak możliwości obsługi sygnałów analogowych, wykonywania obliczeń, zbierania danych (nie licząc ograniczonych funkcji liczących i mierzących czas w przypadku przekaźników specjalnie do tego przeznaczonych). Nawet największe i najbardziej skomplikowane systemy były ograniczone możliwościami technicznymi przekaźników, więc język programowania drabinkowego nie musiał być skomplikowany.

Obecnie mikrokontroler znajdujący się w urządzeniu PLC ma znacznie większe możliwości niż przekaźniki, a jego atutami są dodatkowo niższy koszt, mniejsza ilość zajmowanej przestrzeni i krótszy czas implementacji. W rezultacie języki programowania PLC dostosowały się do możliwości, które stwarzają te urządzenia. Logika drabinkowa oferuje więc dzisiaj znacznie więcej niż dawniej. Sterowniki PLC są szeroko używane w sterowaniu sygnałami analogowymi, śledzeniu danych z obiektów (kody kreskowe, wyniki testów, kalibracja), sterowaniu ruchem oraz w wielu innych zadaniach, a programowanie drabinkowe jest wciąż najbardziej rozpowszechnionym językiem programowania.

Wraz z rozwojem języków programowania i stopniem skomplikowania automatyki programowanie sterowników PLC stało się osobną dziedziną specjalizacji. Programowanie drabinkowe nie jest już językiem dostępnym dla elektryków, a umiejętność tworzenia programów w tym języku nie jest już popularną umiejętnością wśród pracowników.

Inne języki programowania PLC

Programowanie w przemyśle kształtują dwa czynniki: standard IEC 611311-3, przemysłowy standard programowania stworzony przez międzynarodową komisję elektrotechniczną IEC, oraz języki programowania pochodzące z komputerów osobistych. Języki te częściej wzajemnie się uzupełniają, niż stanowią swoje przeciwieństwo.

IEC 61131-3

Wraz z rosnącą popularnością sterowników PLC w przemyśle powstała potrzeba opracowania standardu wspomagającego programowanie. Komitet IEC rozwiązał ten problem za pomocą standardu języków programowania IEC 61131, zwłaszcza w części trzeciej dokumentu IEC61131-3.

Zdefiniowano cztery języki programowania, które mogą być stosowane zamiennie: język drabinkowy, diagramy bloków funkcjonalnych, język strukturalny, programowanie za pomocą listy instrukcji oraz język schematów sekwencyjnych.

Każdy język ma mocne i słabe strony. Różne języki programowania mogą zostać wykorzystane przy tworzeniu jednego programu, aby w jak najlepszy sposób wykorzystać jego różne funkcje. Opinie na temat tego, jaki język jest najlepszy do określonego zadania, mogą być podzielone (rys. 2). Ogólnie mówiąc, proces może być dyskretny lub ciągły. Trendem w automatyce jest również wykorzystanie w danym procesie jednego rodzaju sygnałów – albo w większości cyfrowych, albo w większości analogowych.

programowanie drabinkowe
Rys. 2. Przedstawienie języków programowania standardu IEC 61131-3 wraz z najlepszym ich zastosowaniem pod kątem łatwości tworzenia kodu i jego przejrzystości.

Języki programowania pochodzące z komputerów osobistych

Języki programowania pochodzące ze świata komputerów osobistych wykorzystuje się w automatyce do specjalnych zadań i sterowania urządzeniami peryferyjnymi. Ich zastosowaniami są np. obróbka baz danych lub programowanie sprzętów automatyki peryferyjnej, takich jak kamery i roboty. Programowanie za pomocą języka strukturalnego, opisane w standardzie IEC 61131, jest podobne do języka programowania Pascal, który był popularnym językiem programowania komputerów osobistych, podczas gdy tworzono standard IEC. Od tamtego czasu Pascal nie jest już tak często stosowany, ale jest doskonałym przykładem na to, w jaki sposób branża automatyki zapożyczyła rozwiązania z komputerów osobistych. Obecnie przykładami języków programowania komputerów osobistych stosowanych w automatyce są język C++, Java oraz C#. Języki te mają ogromne możliwości, ale nie znalazły stałego miejsca w automatyce.

Trzy pytania dotyczące programowania

Zanim porównamy programowanie drabinkowe do innych języków programowania ważne jest, aby zrozumieć, co program tak naprawdę musi zrobić. Program powinien sterować procesem automatyki, co jest możliwe wirtualnie w przypadku każdego języka programowania. Jednak w świecie rzeczywistym istnieją również inne wymagania. W dużej mierze sprowadza się to do łatwości odczytu języka. Zanim wybierzemy odpowiedni język programowania, warto odpowiedzieć na trzy ważne pytania:

→ Czy programista lub technik utrzymania jest w stanie zrozumieć kod?

→ Czy możemy łatwo znaleźć problemy i zminimalizować przestój maszyny?

→ Czy potrafimy w prosty sposób dodać nową funkcję do kodu?

Istnieją pewne cechy języków programowania, które wpływają na umiejętność pisania przejrzystego kodu przez programistę. Na wybór języka programowania największy wpływ ma 9 poniższych czynników:

Ogólna wiedza

Logika drabinkowa jest powszechnie stosowana, więc z łatwością możemy znaleźć osobę, która będzie w stanie odczytać kod. Inne języki programowania opisane w standardzie IEC 61131 mogą lepiej sprawować się w przypadku pewnych gałęzi przemysłu, ale nie są tak powszechnie stosowane i rozumiane, jak język drabinkowy. Języki programowania pochodzące ze świata komputerów osobistych, stosowane w automatyce, zaczynają być bardzo popularne oraz oferują obszerne wsparcie techniczne. Nie jest to jednak zawsze prawda w środowisku przemysłowym, gdzie ich potencjalne zalety nie wydają się już tak istotne.

Dokumentacja wewnętrzna

Każdy język programowania ma swój własny sposób opisywania zawartości programu za pomocą języka potocznego. W przypadku programowania drabinkowego jest to dodawanie komentarzy. Działa to dobrze na jednym szczeblu drabinki kodu, ale może być mniej pomocne w przypadku bardziej skomplikowanego programu lub wykonywania działań matematycznych.

Języki opisane w standardzie IEC różnią się od siebie, lecz ogólnie można w przystępny sposób opisywać i komentować te funkcje, do których zostały stworzone, np. w przypadku programowania strukturalnego możemy w wygodny sposób dokumentować działania matematyczne i pętle.

Języki programowania komputerów osobistych mają więcej dostępnych funkcji z wieloma opcjami na wewnętrzne opisywanie działania kodu, a czasem nawet automatycznie generują dokumentację z kodu źródłowego, która dostarcza informacji programiście lub technikowi, co pozwala szybko zrozumieć kod.

Struktury decyzyjne i pętle

Proste działania programowania sprowadzają się do zależności: „Jeśli coś się stanie, to wykonaj daną czynność”. Jest to struktura decyzyjna zwana if then. Jest ona łatwa w użyciu i zrozumieniu we wszystkich opisywanych w artykule językach. Co jednak, jeśli programista chce rozszerzyć funkcje programu i wywołać dane działanie więcej niż raz? Taka struktura nie może być łatwo zbudowana za pomocą programowania drabinkowego, a jej tworzenie zwykle skutkuje powstaniem nieczytelnego kodu. Programowanie strukturalne i języki programowania komputerów osobistych nadają się znacznie lepiej do tworzenia struktur decyzyjnych i pętli.

Działania matematyczne

Dodawanie i odejmowanie to proste działania, które można poprawnie wykonywać w każdym języku programowania. Co jednak w przypadku implementowania skomplikowanych działań matematycznych? Logika drabinkowa wspiera arytmetykę i kilka podstawowych funkcji, takich jak wartość absolutna lub pierwiastki, lecz obliczenia zawierające więcej składowych mogą być mniej czytelne. Komentarze są często odseparowane graficznie od funkcji, które opisują, a wykonując tę samą formułę matematyczną więcej niż raz, wprowadzamy zamieszanie, ponieważ pętle wyglądają nieprzejrzyście. Programowanie strukturalne i języki programowania pochodzące z komputerów osobistych są lepszym rozwiązaniem w przypadku rozszerzonych funkcji matematycznych. Języki programowania PC oferują również możliwość stosowania zaawansowanych funkcji matematycznych do każdego zastosowania i cechują się łatwością użycia.

Przejrzystość

Czytanie nieznanego programu jest jak czytanie powieści przygodowej przez rolkę kartonu. Musisz kartkować w przód i w tył pomiędzy różnymi częściami książki, dostrzegając jedynie mały fragment strony na raz. Ilość kodu, która mieści się na ekranie, może wpływać na zdolność programisty do zrozumienia zasady działania programu. Logika drabinkowa jest zwykle wyświetlana w postaci pięciu szczebli drabinki kodu na ekranie w jednym momencie. Forma graficzna sprawia, że informacja jest rozproszona, a programiście jest ciężko ujrzeć pełen obraz. Programowanie sekwencyjne oraz graficzne eliminują ten problem dzięki zwartej i zaawansowanej formie kodu, przypominającej krótką książkę ze spisem treści. Języki, które wykorzystują zapis tekstowy (programowanie strukturalne i języki PC) są bardziej skondensowane, a na ekranie jednocześnie widzimy 30 do 50 linii kodu.

Hermetyzacja i ponowne wykorzystanie kodu

Jaka jest metoda na rosnące skomplikowanie kodu? Abstrahowanie. Gdy jedziemy samochodem, kierowca nie myśli o kącie wyprzedzenia zapłonu, działaniu kontroli trakcji i sposobie chłodzenia silnika. Wszystkie te procesy działają osobno, samoistnie i samodzielnie. W programowaniu taki proces nazywamy abstrahowaniem, a jego stosowanie oznacza nie tylko prostszy kod, ale również możliwość jego ponownego użycia. Jeśli kod jest napisany w celu obliczania ogólnej sprawności sprzętu (OEE) w ciągu każdej godziny w ciągu dnia, to program może liczyć sprawność raz, a następnie możemy go używać co godzinę. Języki programowania IEC 61131 oraz programowanie drabinkowe dobrze się do tego nadają. Języki programowania pochodzące z komputerów PC wykorzystują funkcje obiektowe, co sprawia, że cechują je jeszcze większe możliwości. Języki programowania standardu IEC 61131 mają możliwość stosowania funkcji obiektowych, ale nie zawsze narzędzia te są implementowane przez producentów PLC, co oznacza, że programiści często nie mogą z nich korzystać.

Biblioteki

Biblioteki pozwalają na ponowne użycie kodu jeszcze efektywniej przez dodanie czyjegoś kodu do programu jako abstrahowanej i przetestowanej części naszego kodu. Tak samo jak w przypadku samochodu, użytkownik nie musi wiedzieć, w jaki sposób działa silnik, aby z niego korzystać. Programowanie drabinkowe i języki IEC mają ograniczone wsparcie dla tego typu funkcji.

Języki programowania komputerowego mają obszerne wsparcie bibliotek, często za darmo. Celem tych narzędzi nie jest zastąpienie funkcji programowania drabinkowego, ale często rozwiązania te stosuje się w obszarach, gdzie programowanie drabinkowe jest mniej przydatne – takich jak wykonywanie obliczeń, inspekcja wizyjna oraz obróbka danych.

Analogowe vs. cyfrowe

W wielu przypadkach problem „analogowy kontra cyfrowy” przypomina rozwiązywanie równania matematycznego. Logika drabinkowa dobrze radzi sobie z cyfrowymi sygnałami i informacją, ale jest nieużyteczna w przypadku sygnałów analogowych. Programowanie za pomocą bloków funkcyjnych, czyli jeden z języków IEC, bardzo dobrze obsługuje sygnały analogowe, lecz gorzej radzi sobie z obsługą sygnałów cyfrowych. Programowanie strukturalne oraz języki programowania komputerów osobistych zwykle dobrze sobie radzą z oboma rodzajami sygnałów, jednak z powodu ich większej uniwersalności istnieje potrzeba, aby programista lepiej organizował kod w celu zapewnienia większej czytelności.

Determinizm

Zwykle w automatyce bardzo ważne jest, aby sterownik (PLC, PC) odczytywał sygnały, wykonywał program i sterował wyjściami w powtarzalnej ramie czasowej (np. 15 ms). Taki proces zwany jest determinizmem czasowym. Programowanie drabinkowe oraz wszystkie języki standardu IEC to języki deterministyczne. Języki programowania komputerów osobistych działają na innej zasadzie, np. język C++ może być deterministyczny, ale bardziej zaawansowane języki, takie jak Java i C#, nie są językami deterministycznymi.

Która z opcji jest najlepsza?

Jak więc programowanie drabinkowe wypada na tle innych języków? Okazuje się, że jest ono najczęściej stosowanym językiem programowania w automatyce przemysłu jednostkowego, gdzie najczęściej używa się cyfrowych wejść oraz wyjść. Z drugiej strony w przemyśle przetwórczym, gdzie popularne są wejścia i wyjścia typu analogowego, dobrze sprawdza się wykorzystanie języka bloków funkcyjnych.

Oczywiście preferencje danej branży przemysłu zależą w głównej mierze od jednego czynnika – wsparcia technicznego. Dostępne wsparcie zależy głównie od norm stworzonych w przeszłości, ponieważ wpływają one na doświadczenie dzisiejszych pracowników z danym językiem. Ponieważ logika drabinkowa istnieje już bardzo długo, to wykorzystanie nagle innego języka mogłoby wydawać się złym posunięciem.

Nowi pracownicy posiadają doświadczenie z tekstowymi językami programowania, a nie z logiką drabinkową. Wraz ze zmianą pokolenia siły pracowniczej preferencje przemysłu będą zmierzać w kierunku tekstowych języków programowania, ze względu na istnienie lepszego wsparcia. W końcu w automatyce będą wykorzystywane różne języki programowania, a trzymanie się wyłącznie jednego języka może być przeszkodą w osiągnięciu celu.

Sterowniki PLC pozwolą na wykorzystanie jednego lub więcej języków, podobnie jak w przypadku urządzeń peryferyjnych. Dlatego ważne jest, aby programista wiedział, jakie języki programowania są dostępne i do czego należy je stosować oraz w jaki sposób używać ich w celu opracowania czytelnego kodu, z odpowiednim wsparciem technicznym.


Jon Breen jest założycielem i właścicielem firmy Breen Machine Automation Services.