tutaj - CBA.PL

Transkrypt

tutaj - CBA.PL
Języki programowania: norma IEC 61131-3
-- środa, 10 czerwiec 2009
Norma IEC61131-3 była za oceanem przez długi czas lekceważona i traktowana jako wyłącznie
europejski fenomen. Jednak od niedawna zyskuje na znaczeniu w Stanach Zjednoczonych jako
standard programowania sterowników. Wielu tamtejszych automatyków zna jeden lub niektóre z
definiowanych przez nią języków, lecz rzadko kiedy wszystkie. To utrudnia im właściwy dobór
charakterystyki języka i sposobu programowania dla automatyzowanej aplikacji.
Dzięki Międzynarodowej Komisji Elektrotechnicznej (ang. International Electrotechnical Commission –
IEC) pojawiło się pięć standardowych języków programowania sterowników zarówno dla procesów
ciągłych, jak dyskretnych:





język drabinkowy (ang. Ladder Diagram – LD),
diagram bloków funkcyjnych (ang. Function Block Diagram – FBD),
język sekwencji działań (ang. Sequential Function Chart – SFC),
lista instrukcji (ang. Instruction List – IL),
język tekstu strukturalnego (ang. Structured Text – ST).
Chciałbym pokazać ich wady i zalety.
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 całej piątki:









łatwość nadzoru przez użytkownika końcowego: SFC,
powszechność i akceptacja języka: LD,
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: LD lub FBD,
łatwość dokonywania zmian w kodzie: LD,
łatwość i umiejętność obsługi przez młodych inżynierów: ST,
łatwość w implementacji skomplikowanych operacji matematycznych: ST,
aplikacje, które cechują powtarzające się operacje lub procesy wymagające łączenia i
jednoczesności operacji: SFC.
Ponieważ nie wszyscy dostawcy sterowników PLC lub PAC dostarczają programy narzędziowe w pełni
zgodne z normą IEC61131-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 i SFC. 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.
1
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 drabinkowy
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.
Bardzo łatwe jest również używanie drabinki do pisania programów. Choćby podstawowa wiedza o
sygnałach wejściowych i wyjściowych pozwala na „masową” produkcję kodu. Większość pozostałych
języków normy IEC wymaga już staranniejszego przygotowania, które uwzględnia m.in. umiejętność
przygotowania diagramów opisujących wszystkie możliwe przepływy w procesie. Większość
implementacji drabinki pozwala na podział i umieszczenie kodu programu w różnych katalogach
i podprogramach.
Język drabinkowy idealnie nadaje się do obsługi prostych procesów transportu i przeładunku
materiałów. Na przykład tam, gdzie jeden z sensorów wykrywa obecność paczki, zaś inny wykrywa
potencjalne przeszkody. Na tej podstawie wyjście uaktywnia urządzenie wykonawcze, które spycha
2
paczkę na odpowiedni taśmociąg. Cyfrowe wejścia odwzorowują stan układu, którego analiza w
programie decyduje o odpowiednim wysterowaniu wyjść. 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.
Stopień skomplikowania dostępnych w sterownikach PLC funkcji ciągle rośnie. Dlatego przed drabinką
stoją wyzwania: z jednej strony potrzeba większego zaawansowania wykorzystywanych funkcji, z
drugiej zapewnienia prostoty wizualizacji, przejrzystości i zrozumienia kodu. Funkcje, takie jak:
regulatory PID, funkcje trygonometryczne czy obróbki danych, które są wymagane w wielu układach
sterowania, mogą być trudne w implementacji.
Kolejny problem związany jest z analizą kodu. Wraz z rozbudową programu śledzenie kodu staje się
bardzo utrudnione. Wymaga bardzo dobrej i obszernej dokumentacji. I w końcu, implementacja całości
programu dużego procesu z użyciem drabinki może być zwyczajnie zniechęcająca. Wystarczy
wyobrazić sobie szczebelek drabinki z wyjściem wykorzystywanym w różnych fazach procesu, którego
stan zależy od bardzo wielu wejść.
Diagram 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
3
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.
Język sekwencji działań (SFC)
Język sekwencji działań (SFC) przypomina schematy algorytmów programów, które wielu inżynierów
pamięta z czasów studiów. Po kroku początkowym (punkcie startowym algorytmu programu) następują
serie tranzycji i dodatkowych kroków. Koncepcja języka SFC jest prosta: krok z kodem napisanym w
dowolnym języku jest aktywny tak długo, dopóki warunek logiczny tranzycji do kroku następnego nie
będzie prawdziwy. Wówczas aktualny krok jest dezaktywowany, a program wykonuje operacje kroku
następnego w kolejności. Tranzycje, opisujące warunki przejścia pomiędzy danymi krokami, podobnie
jak kod poszczególnych stanów, mogą zostać zaimplementowane w dowolnym języku programowania.
SFC jest językiem bardzo przyjaznym dla technologów oraz inżynierów utrzymania ruchu, ponieważ
jego wygląd i naturalny sposób zapisu czyni go prostym w rozwiązywaniu problemów.
Minusem tego sposobu programowania jest narzucanie – czasami niepotrzebnie skomplikowanej –
struktury programu. Wymaga również gruntownego przemyślenia i przygotowania algorytmu przed
przystąpieniem do implementacji. W przeciwnym razie schemat programu może stać się zagmatwany i
nieczytelny, a przez to trudny do analizy. Konstrukcja programu SFC powoduje również, że jest
wykonywany wolniej, niż programy pisane w innych językach.
Ostatnią krytyczną cechą SFC jest jego nieprzetłumaczalność na inne języki programowania. Programy
napisane w IL, FBD, ST czy drabince mogą być w prosty sposób między sobą tłumaczone, pozwalając
na wyświetlanie programiście kawałków kodu w sposób przez niego preferowany. W przypadku SFC
jest to niemożliwe.
Lista instrukcji
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,
takie jak drabinka. 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 (żadnych kliknięć myszką i
tabulatorów). 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.
4
Pomimo wielu zalet tego języka wydaje się, że inżynierowie utrzymania ruchu i serwisanci wolą inne
metody programowania. Może to być spowodowane faktem, że IL jest mniej graficzny, niż np. drabinka.
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.
*****
Zdaniem zwolennika SFC
Dla Control Engineering Polska mówi Bogdan Broel-Plater z Instytutu Automatyki Przemysłowej
Zachodniopomorskiego Instytutu Technologicznego.
Sterownik programowalny oraz języki jego programowania są dla automatyka jedynie środkiem do
realizacji pewnego celu, jakim jest zaprojektowanie, uruchomienie i prawidłowa eksploatacja układu
sterowania pewnym procesem technologicznym. Układ taki musi być bezpieczny i skuteczny. Byłoby
przy tym dobrze, aby był „przyjazny” dla personelu obsługującego sterowany proces. Musimy pamiętać
także, że jeśli układ sterowania będzie eksploatowany dostatecznie długo, to konieczne będzie
dokonanie w nim zmian (czasami tylko w algorytmie sterowania). Jest wysoce prawdopodobne, że nie
będzie tego robiła ta sama osoba, która projektowała układ. Dlatego też ważne jest, aby algorytm
sterowania wykorzystywany przez układ sterowania był czytelny i łatwo modyfikowalny. Spójrzmy zatem
na języki programowania sterowników PLC z punktu widzenia ich przydatności do realizacji celu prac
automatyka...
Język schematu drabinkowego (LD) jest rzeczywiście prosty i czytelny, zwłaszcza dla elektryków, a przy
tym stosunkowo łatwo „rysuje” się w nim program aplikacji. Program ten jest jednak tylko realizacją
algorytmu sterowania. Czytelność i łatwość modyfikacji takiego algorytmu, w przypadku programu
liczącego kilkaset lub nawet tylko kilkadziesiąt linii („szczebli”, segmentów), może być jednak niezbyt
wielka, jeśli osoba projektująca algorytm robiła to w sposób niesystematyczny, czyli na tzw. „wyczucie”.
Będzie tak nawet wówczas, gdy podczas tworzenia algorytmu zastosowano tzw. adresację symboliczną
zmiennych. Jeśli zaś – co jest dość częste – program w języku LD trzeba będzie modyfikować po
uprzednim odczytaniu go z pamięci sterownika, może okazać się, że wszystkie zmienne dostępne są
wyłącznie poprzez swoje adresy fizyczne. Wówczas zadanie będzie jeszcze trudniejsze. A co wtedy,
gdy program liczyć będzie kilka tysięcy linii?
Powyższe uwagi odnoszą się także do drugiego języka tzw. poziomu podstawowego, czyli języka listy
instrukcji (IL). Język tekstu strukturalnego (ST) – jak również Pascal czy też C – jest bardzo chętnie
stosowany przez studentów (i młodych inżynierów). Pozwala im bowiem wykorzystać wiedzę z
informatyki. Program aplikacji pisze się w języku ST bardzo łatwo. Jednak słowo „pisze” trzeba w tym
wypadku traktować dosłownie. Projektowanie złożonego algorytmu sterowania zapisanego w całości za
pomocą języka ST jest bowiem moi zdaniem trudne, a jego czytelność niewielka. Język ten jest jednak
doskonały do zapisywania tych fragmentów algorytmu sterowania, w których trzeba wykonać obliczenia
matematyczne.
Myślę, że czytelnik tych słów zorientował się już, że jestem gorącym zwolennikiem języka sekwencji
działań (SFC). Uważam bowiem, że najważniejszą i prawdziwie twórczą częścią pracy automatyka jest
projektowanie układu sterowania. Zwłaszcza wykorzystywanego w nim algorytmu sterowania.
5
Algorytmu, który można nazwać dobrym, gdy dzięki niemu powstanie układ sterowania spełniający
wszystkie – wymienione na wstępie tych uwag – warunki. Moim zaś zdaniem, język SFC jest najlepszy
do projektowania dobrego algorytmu sterowania. Zapisując taki algorytm w postaci wielu grafów
skoordynowanych ze sobą poprzez kroki oraz wykorzystując tzw. zagnieżdżania zapisane w języku ST,
łatwo jest tworzyć nawet bardzo złożone algorytmy sterowania wykorzystujące obliczenia numeryczne.
Innym problemem, o znacznie jednak mniejszym znaczeniu, jest wybór języka przy pomocy którego
algorytm zapisany w języku SFC zostanie przekształcony w program aplikacji implementowany w
pamięci sterownika PLC. Dobrze, jeśli sterownik, który wykorzystamy w projektowanym układzie
sterowania, można programować w języku SFC. W przeciwnym wypadku algorytm zapisany w języku
SFC bardzo łatwo przekształcić w program zapisany w innym języku, który jest dostępny w tym
sterowniku. Jeśli zaś zrobimy to w odpowiedni sposób, to powstanie program aplikacji zachowujący
wszystkie warunki dobrego algorytmu. W tym także czytelność i łatwość modyfikacji. Do głębszych
studiów tematu polecam między innymi moją książkę pod tytułem: „Układy wykorzystujące sterowniki
PLC. Projektowanie algorytmów sterowania” (PWN, 2008).
Język tekstu strukturalnego
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.
Wspomniane już wyżej badania przeprowadzone
przez Control Engineering wskazują, że spośród
wszystkich zdefiniowanych w normie IEC61131
języków programowania ST zanotował największy
przyrost
implementacji.
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.
6
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, inżynierów utrzymania ruchu i serwisantów. 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 LD.
Ted Thayer
Artykuł pod redakcją Pawła Dworaka, adiunkta w Zakładzie Automatyki Instytutu Automatyki
Przemysłowej Zachodniopomorskiego Uniwersytetu Technologicznego
7

Podobne dokumenty