Czym jest IEC 61131-3?

Transkrypt

Czym jest IEC 61131-3?
Czym jest IEC 61131-3?
Zadaniem sterowników programowalnych jest zrealizowanie zapisanego w ich pamięci
programu, który stanowi implementację algorytmu sterowania. Jego danymi wejściowymi są
informacje o przebiegu procesu rejestrowane przez moduły wejściowe sterownika. Efektem
wykonania programu są natomiast sygnały sterujące, które za pośrednictwem układów
wyjściowych PLC są przekazywane do elementów wykonawczych. Sterowniki programowalne
są od lat powszechnie wykorzystywane w systemach sterowania i automatyki w przemyśle, w
których zastąpiły dawniej używane przekaźniki. Popularność PLC jeszcze wzrosła, gdy możliwe
stało się ich programowanie z wykorzystaniem aplikacji uruchamianych na komputerach. To
podejście jednak nie było pozbawione wad, które udało się wyeliminować dopiero wraz z
przyjęciem standardu IEC 61131-3.
Dawniej, aby zaprogramować sterownik, korzystając z oprogramowania dostarczanego zwykle przez producenta tego urządzenia,
należało najpierw dobrze poznać parametry techniczne i specyfikę zarówno PLC, jak i samego programu. Między aplikacjami od
różnych dostawców często wstępowały bowiem różnice w zakresie przykładowo składni języków programowania.
Ponadto zazwyczaj algorytm sterowania można było zapisać tylko w jednym języku. Z tych powodów za każdym razem, gdy
instalowano sterowniki nowego typu lub od innego producenta, ich programowania uczono się od podstaw.
Utrudnione było równi1eż tworzenie przenośnego kodu, nawet w przypadku sterowników od jednego dostawcy. Wszystko to
negatywnie wpływało na komfort oraz efektywność pracy programistów PLC. Powodowało to też stratę czasu oraz zwiększało
koszty projektowania oraz rozwoju systemów sterowania i automatyki. Czasem z tego powodu całkiem rezygnowano z planów
zakupu nowych sterowników.
IEC 61131-3
Nadzieja na zmianę tej sytuacji pojawiła się w latach 90. ubiegłego wieku. Wówczas organizacja
IEC (International Electrotechnical Commision) rozpoczęła prace nad standaryzacją własności
funkcjonalnych, eksploatacyjnych oraz procesu programowania sterowników programowalnych. W
efekcie powstała specyfikacja zawarta obecnie w standardzie IEC 61131.
Rys. 1. W normie IEC 61131-3
zdefiniowano
cztery
języki
programowania sterowników oraz
ich główne elementy wspólne, w
tym
typy
danych,
jednostki
organizacyjne
oprogramowania,
zmienne
oraz
elementy
konfiguracji
Dla środowiska programistów PLC szczególne znaczenie miała część trzecia tego dokumentu, która
definiuje języki programowania sterowników. Chociaż przestrzeganie wytycznych tego standardu nie
jest obowiązkowe, coraz częściej jest on odniesieniem dla twórców narzędzi programistycznych.
Ułatwia to posługiwanie się nimi programistom, którzy również znają tę specyfikację. Ma również
wpływ na cały cykl życia kodu, usprawnia oraz przyspiesza jego projektowanie, wdrożenie,
testowanie i modernizację.
JEDNOSTKI ORGANIZACYJNE I TYPY DANYCH W IEC 61131-3
Rys. 2. IEC 61131-3 wprowadza model oprogramowania
oparty na pojęciach konfiguracji, zasobów oraz zadań
W standardzie IEC 61131-3 scharakteryzowano najważniejsze elementy języków programowania sterowników (rys. 1).
Zamieszczono w nim m.in. definicje podstawowych pojęć, ogólne zasady tworzenia kodu oraz zdefiniowano tzw. jednostki
organizacyjne oprogramowania. Te ostatnie to funkcje, bloki funkcyjne oraz programy.
Są to podstawowe komponenty aplikacji użytkownika, które można też przenosić między różnymi projektami. Funkcje oraz bloki
funkcyjne mogą być tworzone przez programistę (listing 1), ma on również do dyspozycji standardowe rozwiązania.
Przykładem są funkcje konwersji typów, liczbowe (m.in. trygonometryczne, logarytmiczne, dodawania, mnożenia), wyboru (na
przykład wartości maksymalnej lub minimalnej) i porównywania oraz operacje na bitach, ciągach znaków oraz typach danych
czasowych i datach.
Przykładem standardowych bloków funkcyjnych są natomiast elementy dwustanowe (przerzutniki), detekcji zbocza, liczniki oraz
timery. W specyfikacji tej określono również typy danych, na których operuje program. Zdefiniowane zostały słowa kluczowe, które
1
identyfikują poszczególne typy danych, zakresy wartości, jakie mogą one przyjmować oraz ilość pamięci wymaganą do ich
przechowywania.
Elementarne typy danych to: typ boolowski, liczby całkowite, rzeczywiste, dane czasowe i daty (przykładowo DATE,
TIME_OF_DAY, czyli czas dnia, DATE_ AND_TIME, czyli data i czas dnia), ciągi znaków, bajt oraz słowo. Z wykorzystaniem
podstawowych typów danych programista może też definiować własne, tzw. pochodne typy danych. Na przykład w ten sposób
można stworzyć typ danych obejmujący stany wejść analogowych sterownika.
KONFIGURACJA, ZMIENNE I SFC
W IEC 61131-3 wprowadzono też pojęcie konfiguracji. Termin ten można wyjaśnić w oparciu o model oprogramowania
przedstawiony na rysunku 2. Przyjmuje się w nim, że program niezbędny do realizacji danego zadania sterowania jest
specyficznym dla konkretnego systemu sterowania połączeniem wielu komponentów
sprzętowych (m.in. jednostek przetwarzania oraz pamięci).
W obrębie w ten sposób rozumianej konfiguracji można wyróżnić zasoby, które realizują
konkretne zadania. Te ostatnie odpowiadają za wykonanie programów oraz bloków
funkcyjnych. W obrębie zasobu można zdefiniować kilka zadań, które są wykonywane
okresowo lub w momencie wystąpienia sygnału wyzwalającego, na przykład zmiany
wartości danej zmiennej.
Programy składają się z kolei z funkcji oraz bloków funkcyjnych napisanych w jednym z języków programowania znormalizowanych
w IEC 61131-3. W normie określono też kilka typów zmiennych, które różnią się zasięgiem. Na przykład zmienne lokalne są
dostępne tylko w obrębie jednostki organizacyjnej, w której zostały zadeklarowane.
Zmienne globalne z kolei służą do wymiany danych między różnymi jednostkami. Unika się w ten sposób błędów spowodowanych
powtarzającymi się nazwami zmiennych. IEC 61131-3 obejmuje też przedstawienie sposobu tworzenia tzw. sekwencyjnych
schematów funkcyjnych (Sequential Function Chart, SFC).
Rys. 3a. Sekwencyjny schemat funkcyjny służy do graficznego przedstawiania
algorytmów sterowania
Rys. 3b. Przykład programu w języku SFC napisanego w oprogramowaniu Control
FPWinPro
Służą one do graficznego przedstawiania algorytmu sterowania za pomocą oddzielnych kroków oraz przejść między nimi (rys. 3 a,
b). Z tymi ostatnimi powiązane są warunki - jeżeli dany jest spełniony, następuje przełączenie z kroku bieżącego na następny.
Każdy krok z kolei składa się z zestawu instrukcji zwanych akcjami. Kroki, warunki oraz akcje są implementowane w wybranym
języku programowania.
Przykład deklaracji bloku funkcyjnego
FUNCTION_BLOCK Blok_funkcji
VAR_INPUT:
X: BOOL;
Y: BOOL;
END_VAR
VAR_OUTPUT:
Z: BOOL;
END_VAR
(*INSTRUKCJE*)
END_FUNCTION_BLOCK
Fragment programu w kodzie ST
l := 25;
WHILE J<5 DO
Z := F(I+J);
END_WHILE;
IF B_1 THEN
%QW100 := INT_TO_BCD(Display);
ENDIF;
CASE TW OF
1,5: TEMP := TEMP_1;
2: TEMP := 40;
2
4 TEMP := FTMP(TEMP_2);
ELSE
TEMP := 0;
B_ERROR :=1;
END_CASE;
JĘZYKI PROGRAMOWANIA PLC
W IEC 61131-3 zdefiniowano cztery języki programowania sterowników (rys. 4), przy czym
wyróżnić można tutaj dwie grupy - tekstowe oraz graficzne. Do pierwszej zaliczane są języki listy instrukcji (Instruction List, IL) oraz
tekstu strukturalnego (Structured Text, ST). W grupie języków graficznych są natomiast języki schematów drabinkowych ( Ladder
Diagram, LD) oraz schematów bloków funkcyjnych (Function Block Diagram, FBD).
Język listy instrukcji jest językiem niskiego poziomu i ma składnię podobną do języków typu asembler. Program w tym przypadku
składa się z sekwencji rozkazów, z których każdy kolejny zaczyna się w nowej linii. Każda instrukcja składa się z operatora, który
określa działanie do wykonania oraz operandu, czyli stałej lub zmiennej.
Przykładami operatorów są: LD, który ładuje operand, JMP, który wykonuje skok do etykiety o nazwie określonej operandem, CAL,
który wywołuje blok funkcyjny o nazwie takiej jak operand tej instrukcji oraz RET realizujący powrót z wywołanego wcześniej bloku
lub funkcji. Dostępne są też operatory arytmetyczne (ADD, SUB, MUL, DIV), porównania (GT, GE, EQ, NE, LE, LT) oraz logiczne
(AND, OR, XOR, NOT).
Z kolei ST, drugi język typu tekstowego, jest językiem wysokiego poziomu. Jego składnia jest podobna do składni na przykład
języków C lub Pascal. Jej podstawowymi elementami są wyrażenia oraz instrukcje, m.in. przypisania (:=), wyboru (IF, CASE), pętle
(FOR - gdy liczba powtórzeń jest znana, WHILE oraz REPEAT - gdy liczba iteracji jest nieokreślona) oraz wywołania bloku
funkcyjnego (listing 2). W wypadku języka tekstu strukturalnego w jednej linii można zamieścić kilka instrukcji, a każda z nich
powinna być zakończona średnikiem.
GRAFICZNE JĘZYKI PROGRAMOWANIA
Rys. 4. W IEC 6113-3 zdefiniowano cztery języki
programowania PLC, dwa tekstowe i dwa graficzne
W językach zaliczanych do tej grupy algorytm sterowania implementowany jest z wykorzystaniem standardowych symboli
graficznych. W drabinkowym, który jest jednym z najczęściej używanych i prawdopodobnie najlepiej znanych języków
programowania sterowników programowalnych, symbole te umieszcza się w obwodach przypominających szczeble w schematach
układów przekaźnikowych.
Są one z dwóch stron ograniczane przez szyny prądowe, a ich podstawowymi elementami są styki oraz cewki. Te pierwsze
elementy przekazują do połączenia po prawej stronie styku stan z jego lewej strony, jednocześnie nie modyfikując wartości
przypisanej im zmiennej. Zestandaryzowane typy styków to: normalnie otwarte, normalnie zamknięte oraz reagujące na zbocze
narastające i opadające.
Cewki przekazują natomiast stan połączenia z lewej strony na prawą, równocześnie powodując zmianę wartości przypisanej im
zmiennej. Dostępne są następujące znormalizowane typy cewek: normalne, negujące, ustawiające, kasujące oraz reagujące na
zbocze narastające i opadające. Oprócz tego specyfikacja języka LD dopuszcza też stosowanie funkcji oraz bloków funkcyjnych
(rys. 5).
Obwód może mieć przypisaną etykietę. Poszczególne instrukcje są wykonywane z lewej strony do prawej, a kolejne obwody
przetwarzane są jeden po drugim. Można też wykonać skok do obwodu o określonej etykiecie. Język schematów bloków
funkcyjnych jest bardzo podobny do języka LD, z tą różnicą że nie są w nim wykorzystywane styki oraz cewki (rys. 6).
3
W zamian używane są symbole obrazujące funkcje lub bloki funkcyjne, które połączone tworzą obwód. Kolejność przetwarzania
obwodów można zmienić podobnie jak w języku drabinkowym, wykonując przejście do obwodu o określonej etykiecie.
WYBÓR JĘZYKA PROGRAMOWANIA
Rys. 5. Fragment programu w języku LD, w którym
wykorzystano funkcję oraz blok funkcyjny
W pewnych zastosowaniach niektóre języki programowania zdefiniowane w normie IEC 61131-3 sprawdzają się lepiej niż inne.
Przykładowo język listy instrukcji charakteryzuje prostota, a dzięki temu łatwo i szybko można się go nauczyć oraz tworzyć w nim
kod.
Ponadto program napisany w IL w porównaniu do pozostałych zajmuje mniej miejsca w pamięci sterownika, wykonuje się też
szybciej niż kod zapisany w formacie graficznym. W przeciwieństwie do języków graficznych analiza programów napisanych w
języku instrukcji jest jednak trudniejsza - łatwo można też przeoczyć ewentualne błędy.
Ponadto implementacja skomplikowanych algorytmów w tym języku jest dość żmudna i trudna. Z kolei język tekstu strukturalnego
sprawdza się zwłaszcza w implementacji złożonych algorytmów, obliczeń matematycznych, operacji na łańcuchach oraz na
tablicach. Kody programów napisanych w ST są w porównaniu do tych w języku instrukcji bardziej czytelne oraz przejrzyste. Są
one jednak niestety również zwykle dłuższe niż w wypadku IL.
LD vs FBD
Język drabinkowy swoją popularność zawdzięcza przejrzystości zapisu, dzięki której kod w przypadku niezbyt długich programów
można szybko zrozumieć, nawet bez specjalistycznego przygotowania. Wynika to głównie z podobieństwa składni tego języka do
schematów obwodów elektrycznych.
Niestety implementacja złożonych funkcji, przykładowo matematycznych, sterowania lub przetwarzania danych jest dosyć trudna.
Podobnie napisanie, a później interpretacja długich oraz skomplikowanych programów w tym wypadku jest kłopotliwa. Z tych
powodów zakres możliwości wykorzystania LD jest ograniczony do realizacji prostych algorytmów sterowania niezbyt złożonymi
procesami.
Problem z czytelnością kodu w wypadku długich kodów sterujących skomplikowanymi zadaniami dotyczy również języka
schematów bloków funkcyjnych. Ogólnie jednak struktura aplikacji napisanej w języku FBD jest łatwiejsza w interpretacji niż w
przypadku języka LD.
Jeżeli programista ma problem z wyborem konkretnego języka programowania w danej aplikacji, może także używać różnych
języków jednocześnie.Opisywana norma dopuszcza taką sytuację. Przykładowo pisząc kod w jednym z języków, część z
wykorzystywanych w nim funkcji można zaimplementować w innym.
OPROGRAMOWANIE
Rys. 6. Fragment programu w języku FBD
Narzędzia do programowania sterowników według wytycznych normy IEC 61131-3 powinny spełniać kilka warunków. Przede
wszystkim zapewnić muszą wsparcie dla tworzenia kodu we wszystkich językach zdefiniowanych w tym standardzie, w tym w kilku
jednocześnie. Zmienne globalne oraz lokalne powinny być rozróżniane oraz automatycznie kojarzone z odpowiednimi adresami
sprzętowymi.
4
Program musi też rozpoznawać oraz pozwalać na używanie tylko znormalizowanych typów danych. Użytkownik powinien mieć
także możliwość korzystania ze zestandaryzowanych jednostek organizacyjnych, na przykład w celu przekształcenia często
używanych podprogramów w bloki funkcyjne, których później może używać wielokrotnie.
Program powinien również dopuszczać oraz ułatwiać korzystanie z komponentów programów udostępnianych w bibliotekach
standardowych. Oprócz tego ważne są wszelkie dodatkowe funkcje usprawniające proces tworzenia kodu. Przykładem jest
sprawdzenie poprawności oraz testowanie programu w trybie offline, czyli z użyciem wbudowanego symulatora, bez konieczności
korzystania z docelowego sterownika.
FUNKCJE DODATKOWE
Jeżeli w trakcie kompilacji kodu wykryte zostaną błędy, powinny one zostać odpowiednio
oznaczone. Istotnym wsparciem dla programistów jest też wyświetlanie wskazówek na temat rodzaju błędu oraz tego, jak go
poprawić. Podpowiedzi są również przydatne w czasie tworzenia oraz edycji kodu, dlatego w niektórych aplikacjach dostępne są na
przykład mechanizmy upraszczające wprowadzanie kodu.
Stosowane rozwiązania to m.in. listy rozwijane, wyświetlanie podpowiedzi oraz filtrowanie dostępnych instrukcji na podstawie kilku
znaków początkowych słowa podanego przez użytkownika. Ważnym etapem procesu programowania PLC jest przesłanie
skompilowanego programu do sterownika.
Wymagane są zatem odpowiednie narzędzia do konfiguracji oraz nawiązania łączności z urządzeniem docelowym za
pośrednictwem różnych standardowych interfejsów komunikacyjnych. Powinna być również dostępna opcja uruchomienia
programu już po zapisaniu go w pamięci sterownika oraz jego modyfikacji w trybie pracy online.
Komfort pracy programistów poprawiają też takie opcje, jak możliwość dodawania do kodu komentarzy, wsparcie przy
opracowywaniu dokumentacji i zarządzaniu projektami oraz ich różnymi wersjami, usprawnienie konfiguracji ustawień sprzętowych
sterowników oraz ogólnie intuicyjność obsługi.
Rys. 7. Przykład realizacji tego samego algorytmu sterowania w językach: schematów drabinkowych (a), schematów bloków funkcyjnych (b) oraz tekstu strukturalnego
(c)
Przykładami aplikacji do programowania sterowników zgodnych ze standardem IEC 61131-3 są: SX-Programmer Expert oraz SXProgrammer Standard z oferty firmy VIX Automation, WinCC firmy Siemens, logi. CAD firmy logi.cals dystrybuowany przez Encon,
pakiet Control Builder firmy ABB, zenonLogic oferowany przez CopaData oraz Control FPWinPro firmy Panasonic.
PODSUMOWANIE
Wymienić można kilka zalet stosowania się w procesie programowania PLC do
wytycznych normy IEC 61131-3. Jest to m.in. możliwość uzyskania przejrzystej struktury programu dzięki wprowadzeniu
ujednoliconych jednostek organizacyjnych. Dzięki zmianom w zakresie deklaracji zmiennych uzyskuje się z kolei odciążenie
programisty w kwestii adresowania zmiennych oraz kontroli ich nazw.
Ponadto ponieważ standard dopuszcza definiowanie własnych typów danych, a programista ma do wyboru jeden z czterech
znormalizowanych języków programowania, tworzony kod może być lepiej dostosowany do wymagań danego zadania sterowania.
5
Bardzo ważna zaletą jest też możliwość tworzenia kodu przenośnego w postaci bibliotek funkcji oraz bloków funkcyjnych, których
następnie można używać w różnych projektach. Ułatwia to tworzenie oprogramowania dla różnych platform sprzętowych.
Przykładem jest biblioteka Motion Control Library opracowana przez organizację PLCopen. Zebrano w niej bloki funkcyjne
wykorzystywane w realizacji różnych zadań w zakresie sterowania ruchem.
Monika Jaworowska
Więcej informacji o normie IEC 61131-3 można znaleźć na stronie organizacji PLCopen.
Zajmuje się ona m.in. sprawdzaniem zgodności aplikacji do programowania PLC z tym standardem.
www.plcopen.org
6