Norma IEC 61131-3 definiuje pojęcia podstawowe, zasady ogólne, model programowy i model komunikacyjny (wymiana danych między elementami oprogramowania) oraz podstawowe typy i struktury danych. Określono w niej dwie grupy języków programowania: języki tekstowe i graficzne.
Do grupy języków graficznych należą:
Język schematów drabinkowych LAD (Ladder Diagram)
Język schematów blokowych FBD (Function Block Diagram)
W grupie języków tekstowych zdefiniowane zostały następujące języki:
Język listy instrukcji IL (Instruction List)
Język strukturalny ST (Structured Text)
Wybór właściwego języka
Mając do dyspozycji kilka różnych języków programowania, przed wyborem konkretnego z nich należałoby odpowiedzieć sobie na kilka kluczowych pytań. Oczywiście naszą naturalną tendencją jest pozostawanie przy tym, który znamy. Jednak zawsze warto wziąć pod uwagę umieszczoną poniżej listę cech poszczególnych języków:
powszechność i akceptacja języka: LAD
znajomość i akceptacja w Europie: IL lub ST
prędkość wykonywania przez PLC: IL lub ST
aplikacje wykorzystujące głównie cyfrowe We/Wy oraz prosta regulacja ciągła: LAD lub FBD
łatwość dokonywania zmian w kodzie: LAD
łatwość i umiejętność obsługi przez młodych inżynierów: ST
łatwość w implementacji skomplikowanych operacji matematycznych: ST
Ponieważ nie wszyscy dostawcy sterowników PLC dostarczają programy narzędziowe w pełni zgodne z normą IEC 61131-3, na wybór języka programowania może również wpłynąć wykorzystywana w projekcie platforma sprzętowa. W rzeczywistości większość pozaeuropejskich dostawców nie oferuje tej funkcjonalności lub posiada bardzo ograniczone spektrum opcji, np. oferując jedynie język drabinkowy. W przypadku małych sterowników – „mikro” PLC – kwestią kluczową z punktu widzenia różnorodności języków programowania może być również brak wystarczającej ilości pamięci oraz zbyt mała prędkość procesora.
Wielu programistów skazanych jest na pracę z konkretnym sprzętem. Jeśli jednak programista ma wpływ na wybór platformy sprzętowej, powinien dobrać najbardziej odpowiedni dla danej aplikacji język lub grupę języków.
Język LAD:
Język drabinkowy (LD lub po prostu drabinka) jest prawdopodobnie najpowszechniej stosowanym językiem programowania sterowników. Wynaleziony, aby w układach sterowania sprzętowego zastąpić łączenie przekaźników, jest obecnie wykorzystywany w prawie 95% wszystkich aplikacji przemysłowych. Drabinka jest tak powszechnie przyjętym językiem programowania, że niemal każdy programista, bez względu na kraj i gałąź przemysłu, potrafi zrozumieć i napisać w niej program. Ponieważ swoim formatem przypomina obwody elektryczne, w sytuacji wystąpienia awarii nawet osoba, która nie jest programistą, ale posiada wiedzę z podstaw elektryki, będzie potrafiła dokonać analizy programu.
Pisany w drabince program zazwyczaj zawiera zegary, liczniki, bloki porównań czy podstawowych operacji matematycznych, ale nie implementuje się w nim żadnych bardziej skomplikowanych funkcji.
Styk - jest elementem przekazującym do połączenia poziomego po prawej stronie styku stan będący wynikiem mnożenia logicznego AND stanu linii łączącej po lewej stronie styku oraz wartości przypisanej mu logicznej zmiennej wejściowej, wyjściowej lub pamięciowej.
Styk nie modyfikuje wartości skojarzonej z nim zmiennej.
Cewka - przekazuje stan połączeń z lewej strony na prawą bez zmian, powodując jednocześnie zapamiętanie stanu połączenia po swej lewej stronie przez przypisaną jej zmienną logiczną.
Cewka modyfikuje wartość zmiennej.
Elementy obwodu mogą być łączone:
poziomo – przekazuje stan elementu znajdującego się bezpośrednio po stronie lewej do elementu po stronie prawej, takie połączenie realizuje operację iloczynu logicznego AND
pionowo – przedstawia się jako linię pionową przecinającą się z jedną lub więcej liniami poziomymi na każdym końcu. Stan połączenia pionowego odpowiada sumie logicznej OR dla stanów połączeń poziomych występujących po lewej stronie połączenia pionowego. Stan połączenia pionowego powinien być przekazany wszystkim dołączonym po prawej stronie połączeniom poziomym, natomiast nie może być przekazywany do jakiegokolwiek elementu po lewej stronie połączenia pionowego
Przykładowy program zrealizowany przy pomocy języka LAD:
Język FBD:
W skrócie jest odpowiednikiem schematów przepływu sygnału dla obwodów logicznych przedstawionych w formie połączonych bramek logicznych oraz bloków funkcyjnych.
Choć język drabinkowy jest najpowszechniej stosowanym językiem programowania sterowników, z przeprowadzonych przez Control Engineering kilka miesięcy temu badań wynika, że rośnie użycie pozostałych języków, w tym np. diagramu bloków funkcyjnych. I choć przyrost użytkowników tego języka uległ ostatnio zmniejszeniu w porównaniu do pozostałych języków (na przykład ST), to FBD jest prawdopodobnie drugim najczęściej używanym językiem programowania sterowników PLC.
Pod wieloma względami ten graficzny język programowania przypomina schemat instalacji elektrycznej nawet bardziej niż drabinka. W FBD bloki są łączone „przewodami”, co tworzy łatwy w śledzeniu układ. Język ten dostarcza tych samych co drabinka instrukcji. Jednak wizualnie jest dużo bardziej czytelny dla użytkownika nieobeznanego z logiką przekaźnikową. Główną zaletą programów napisanych w FBD jest łatwość ich analizy – wystarczy podążać wzdłuż ścieżki połączeń.
FBD jest idealny dla prostych programów zawierających dyskretne wejścia, jak np. czujniki fotoelektryczne i wyjścia, jak chociażby zawory rozdzielające. Może również z powodzeniem zastąpić każdy program napisany w drabince. Jednakże FBD nie jest idealny dla dużych programów, które wykorzystują specjalne We/Wy i funkcje. Duża ilość miejsca zajmowanego na ekranie komputera może sprawić, że gdy program osiągnie znaczne rozmiary, jego analiza może stać się nieporęczna i niewygodna. Program pisany w FBD wymaga wcześniejszego przygotowania jego całościowej konstrukcji, ponieważ późniejsze wprowadzanie poprawek może być znacznie utrudnione.
Przykładowy program zrealizowany przy pomocy języka FSB:
Język IL:
W skrócie jest odpowiednikiem języka typu assembler (niskopoziomowy), którego zbiór instrukcji obejmuje operacje logiczne, arytmetyczne, operacje relacji, jak również funkcje przerzutników, czasomierzy, liczników itp.
Program napisany w liście instrukcji (IL) składa się z wielu linii kodu, z których każda reprezentuje dokładnie jedną operację. Taki format kodu powoduje, że wprowadzanie szeregu prostych funkcji matematycznych jest bardzo łatwe.
IL jest językiem niskiego poziomu i jako taki jest wykonywany znacznie szybciej niż języki graficzne, opisane wcześniej. Program wykonywalny IL jest również bardziej kompaktowy, zajmuje mniej miejsca w pamięci sterownika PLC. Uproszczone metody wprowadzania tekstu – możliwe przy programowaniu w tym języku – pozwalają na bardzo szybkie wprowadzanie kodu. W systemach monitorowania przebiegu programy napisane w IL są łatwiejsze do wyświetlenia i edycji na ekranach podręcznych jednostek programujących. Bez konieczności użycia dodatkowego oprogramowania czy laptopów.
Pomimo wielu zalet tego języka wydaje się, że inżynierowie wolą inne metody programowania. Może to być spowodowane faktem, że IL jest mniej graficzny. Co za tym idzie, trudniejszy w bieżącej analizie działania i diagnozowania błędów.
IL może uczynić implementowanie skomplikowanych funkcji, takich jak regulatorów PID czy skomplikowanych operacji matematycznych, drogą przez mękę. IL nie najlepiej nadaje się do form programowania strukturalnego, co ogranicza jego przydatność w implementacji dużych programów. Dyskusyjną jest również zaleta prędkości wykonywania i kompaktowości skompilowanego kodu programu. Mają one mniejsze znaczenie w sytuacji stałego wzrostu prędkości procesorów w nowoczesnych jednostkach centralnych sterowników PLC oraz wzrostu dostępnej w nich ilości pamięci.
Przykładowy program zrealizowany przy pomocy języka IL:
Porównanie IL i LAD:
Język ST:
W skrócie jest odpowiednikiem języka algorytmicznego wysokiego poziomu, zawierającego struktury programowe takie jak:
If/else
Case/of
Pętle For i While oraz Repeat
Z jego instrukcjami – IF…THEN, CASE – oraz liniami kodu, kończącymi się średnikami, język tekstu strukturalnego (ST) bardzo przypomina języki wysokiego poziomu, takie jak Pascal czy C.
Pośród języków normy IEC, ST prawdopodobnie najlepiej spełnia wymagania pojawiające się wraz ze wzrostem skomplikowania aplikacji PLC. Na przykład przy regulacji ciągłej w przemyśle tworzyw sztucznych czy chemicznym. Trygonometria, skomplikowane obliczenia matematyczne i obróbka danych mogą zostać zaimplementowane o wiele łatwiej niż w drabince czy liście instrukcji. Pętle decyzyjne i wskaźniki (zmienne używane do adresowania pośredniego) pozwalają na bardzo kompaktowe implementacje. Dużo bardziej niż ma to miejsce w przypadku drabinki. Bardzo elastyczny i wygodny edytor programu ST, wspólny dla większości pakietów oprogramowania, pozwala na wygodne komentowanie kodu programu, wprowadzanie wcięć i odstępów między liniami. To z kolei pozwala na wyróżnianie powiązanych ze sobą fragmentów programu. Wszystko to ułatwia implementację skomplikowanych programów.
Tekstowy język ST nie ma natury graficznej, co czyni go podobnym do listy instrukcji. Podobnie jak IL wykonywany jest dużo szybciej niż kod drabinki. Dodatkową zaletą ST jest również fakt, że w większym stopniu niż inne języki normy IEC61131 spełnia warunki związane z przenoszeniem kodu, co uniezależnia programistę od platformy sprzętowej.
Ostatnią z zalet języka ST jest przystosowanie do współczesnej wiedzy studentów. Wielu z tych, którzy kończą studia techniczne, posiada lepszą znajomość programowania komputerów niż podstaw z zakresu elektryczności. Z kolei wadą tego języka programowania jest jego nieznajomość wśród wielu doświadczonych programistów PLC. Należy również zwrócić uwagę na fakt, że przejrzysta forma pisania kodu programu ST odbywa się przeważnie kosztem kompaktowości kodu.
W rezultacie programiści zazwyczaj wykorzystują ST w „tle” programu. Dla przykładu, IEC 61131 pozwala programiście na zdefiniowanie – w dowolnym języku programowania – swojej własnej funkcji i wielokrotnego jej wykorzystania jako podprogram programu napisanego w innym języku. Mając takie możliwości, programiści często hermetyzują kod ST w instrukcji, która jest następnie wywoływana w programie napisanym w języku LAD.