Programowanie sterowników PLC
63
4. Programowanie sterowników PLC
4.1. Wstęp
Przez lata rozwoju sterowników programowalnych producenci wprowadzali różne
metody programowania. Było to związane z przechodzeniem od technik związanych z
układami „sprzętowymi” do technik bliższych komputerom osobistym. Tak więc wśród
technik programowania największą popularność, w kręgach inżynierskich, zyskał język
schematów drabinkowych ze względu na jego podobieństwo do sposobu projektowania
klasycznych systemów sterowania stykowo – przekaźnikowego [Michel 1990; Brock et.al.
2000; Legierski et.al. 1997; Rho et.al. 1995; Koo et.al. 1996, 1998; Erickson 1996; Welch
1995; Fabian, Hellgren 1998; Bhowal et.al. 1999; Turnbull 1998; Falcione, Krogh 1992;
Rullan 1997; Davidson, McWinnie 1997; Auslander et.al. 1996; Warnock 1988; Batten 1994;
Kwaśniewski 1999; Webb, Reis 1999; Berger 2001b]. Jednak w związku z poszerzaniem
zakresu zastosowań sterowników do coraz większej gamy układów sterowania okazało się, że
klasyczny schemat drabinkowy już nie wystarcza. Sterowanie sygnałami ciągłymi wymagało
używania coraz bardziej skomplikowanych bloków funkcyjnych dodawanych do
oprogramowania podstawowego. A więc dzisiejszy schemat drabinkowy (stykowy – LD –
Ladder Diagram) to już schemat z wieloma dodatkowymi elementami wykorzystywanymi
coraz częściej – wśród nich najczęściej używany są bloczki służące do przesyłania stałych
oraz zmiennych [Rho et.al. 1995; Koo et.al. 1997]. Wydaje się, że jest to zgodne z ogólnymi
tendencjami, które zmierzają w kierunku języków wyższego poziomu, gdzie programista
korzysta z gotowych „klocków” układając je w odpowiedniej sekwencji w programie. W tym
momencie język LD już niewiele różni się od języka, w którym używa się elementów
logicznych (bramek) [Siemens 1996a, 1996c; Berger 2001b].
W historii rozwoju technik programowania pojawiały się próby ujednolicenia
i usystematyzowania tychże technik. I tak można wymienić normy i wytyczne, takie jak: IEC
848 – Grafcet (Francja), DIN 40719, DIN 19239, VDI 2880 (Niemcy), czy NEMA ICS-3-304
(USA). W 1993 roku przyjęta została przez Międzynarodową Komisję Elektroniki norma IEC
1131 [IEC 1993] zatytułowana „Sterowniki Programowalne” długo nie mogła utorować sobie
drogi do świadomości producentów sterowników. Istnieją jednak producenci, jak np. Festo,
którzy proponują sterowniki z możliwością wymiany systemu operacyjnego. Jeden system
pozwala na programowania przy pomocy standardowego oprogramowania firmy Festo,
Programowanie sterowników PLC
64
natomiast drugi umożliwia programowanie przy pomocy pakietu IsaGraf [Chodań 2000b],
która wypuściła na rynek oprogramowanie w pełni zgodne z normą.
Coraz większego znaczenia zaczyna nabierać programowanie wykorzystujące sieci SFC
(Sequential Function Chart). Sieci SFC posiadają swój, dobrze znany z diagramów Petry’ego,
opis matematyczny, co ułatwia rozwijanie podstaw teoretycznych. Dlatego też można znaleźć
bardzo wiele opracowań zarówno popularnonaukowych, jak i naukowych dotyczących
modelowanie układów sterowania z wykorzystaniem sieci SFC [Gomółka 1988; Grandek
1995; Adamski, Monteiro 1995; Adamski, Chodań 2000; Adamski 2001; Legierski et.al.
1997; Michel 1990; Brock et.al. 2000; Kwaśniewski 1999; Lewis 1995; Webb, Reis 1999;
Bonfatti et.al. 1997; Mikulczyński 1997; Halang 1989; Chodań 2000a; Falcione, Krogh 1992;
Węgrzyn et.al. 1998; Davidson, McWhinnie 1997]. Pojawiają się także publikacje pokazujące
możliwości zastąpienia grafów SFC zapisem typowym dla innych sposobów programowania
sterowników, co powoduje, że kod wynikowy jest mniejszy, a więc daje możliwości
oszczędzania pamięci programu, jak i skracania czasu realizacji programu [Kulisz 1999;
Danĕček, Rozehnal 1999; Wciślik 2003].
4.2. Norma EN 61131
Norma składa się z pięciu części, a w opracowaniu są jeszcze trzy następne. Te części,
które już istnieją to:
1. Informacje ogólne (General Information) – w części tej znajdują się definicje pojęć
i charakterystyka funkcji, które są typowe dla PLC, np. przetwarzanie cykliczne, obraz
procesu, podziała zadań, urządzenia do połączenia z operatorem.
2. Sprzęt i wymagania testowe (Equipment and Test Requirements) – część ta dotyczy
wymagań elektrycznych, mechanicznych i funkcyjnych dla sterowników programowalnych.
Definiowane są wymogi odnośnie temperatury, wilgotności, zasilania, odporności na
zakłócenia, przedziały robocze dla sygnałów cyfrowych i testy mechaniczne.
3. Języki programowania (Programming Languages) – próba ujednolicenia szeroko
rozpowszechnionych języków programowania z nieznacznym, przyszłościowym
poszerzeniem o nowe elementy.
4. Wytyczne użytkownika (User Guidelines) – część ta stanowi przewodnik dla projektantów
systemów PLC. Podano w niej informacje potrzebne dla poszczególnych etapów projektu,
Programowanie sterowników PLC
65
począwszy od analizy systemu, fazy specyfikacji i wyboru urządzeń, wykonania aplikacji
i obsługi urządzeń.
5. Wymiana informacji (Messaging Service) – opis komunikacji pomiędzy PLC od różnych
producentów i komunikacji z innymi urządzeniami. Opisano tu bloki komunikacji
w połączeniu ze standardowymi operacjami odczytywania i wyprowadzania danych.
Część trzecia normy, EN 61131-3, dotyczy języków programowania i stanowi jej
najważniejszą część. Przede wszystkim dzięki niej ujednolicono koncepcję programowania
sterowników PLC tak, aby w oparciu o wprowadzone zasady, użytkownik był w stanie
programować bez większych trudności różne sterowniki, różnych producentów.
4.2.1. Sposoby tworzenia oprogramowania
W ramach normy EN 61131-3 określono dwie grupy języków programowania: języki
tekstowe oraz języki graficzne.
Grupę języków tekstowych tworzą dwa języki:
•
język listy instrukcji IL (Instruction List) – odpowiednik języka typu asembler, którego
zbiór instrukcji obejmuje operacje logiczne, arytmetyczne, operacje rotacji, jak również
funkcje przerzutników, czasomierzy, liczników itp.;
•
język strukturalny ST (Structured Text) – odpowiednik algorytmicznego języka wysokiego
poziomu takiego jak FORTRAN, PASCAL, zawierającego struktury programowe takie,
jak: IF...THEN, FOR...TO.
Grupę języków graficznych opisanych w normie tworzą:
•
język schematów drabinkowych LD (Ladder Diagram) – podobny do stykowych obwodów
przekaźnikowych, w którym dopuszcza się użycie także funkcji: arytmetycznych,
logicznych, porównań i relacji, jak również bloków funkcyjnych: przerzutników,
czasomierzy, liczników, regulatora PID czy bloków programowych;
•
język schematów blokowych FBD (Function Block Diagram) – odpowiednik schematów
przepływu sygnału dla obwodów logicznych przedstawionych w formie połączonych
bramek logicznych oraz bloków funkcyjnych takich jak w języku LD. Różnice pomiędzy
językiem FBD, a LD kończą się w zasadzie na najprostszych symbolach, którymi opisuje
się proste funkcje kombinacyjne. Reszta, bardziej skomplikowanych, funkcji jest taka sama
– różni się co najwyżej graficzną reprezentacją.
Programowanie sterowników PLC
66
•
graf sekwencji SFC (Sequential Function Chart) – służy do tworzenia struktury programu
sterownika napisanego z użyciem wymienionych języków. Pozwala on na opisywanie
zadań sterowania sekwencyjnego za pomocą grafów zawierających etapy (kroki) i warunki
przejścia (tranzycji) między tymi etapami. Ten sposób pisania programu właściwie jest
niejako nadrzędny w stosunku do pozostałych i równocześnie wykorzystuje je do
opisywania poszczególnych bloków grafu.
4.2.1.1. Lista instrukcji IL
Cechą charakterystyczną języka IL jest sekwencja instrukcji podobnych do kodów
programowania mikroprocesora w języku asembler. Każda instrukcja zaczyna się w nowej
linii. Instrukcja zawiera nazwę operatora z ewentualnymi modyfikatorami oraz operand (jeden
lub więcej, oddzielone przecinkami, w zależności od wymagań operatora). Instrukcja może
być poprzedzona przez etykietę zakończoną dwukropkiem, natomiast ewentualny komentarz
powinien być ostatnim elementem linii. Między instrukcjami można wprowadzać puste linie.
Listę standardowych operatorów i dozwolonych modyfikatorów przedstawiono w tabeli 4.1.
Najczęściej poszczególne operatory działają w ten sposób, że wartość wyrażenia jest
obliczana jako wynik działania operatora na wartość bieżącą wyrażenia z uwzględnieniem
wartości operandu, np. instrukcję AND %IX1 należy interpretować jako:
wynik = wynik and %IX1
Wyrażenie podstawowe może zostać uzupełnione o modyfikator w postaci nawiasów. Lewy
nawias „(” oznacza wstrzymanie wykonania operacji aż do napotkania prawego nawiasu „)”.
Następująca sekwencja rozkazów:
AND
(%IX1
OR
%IX2
)
zostanie zinterpretowana jako:
wynik = wynik and (%IX1 or %IX2)
4.2.1.2. Język strukturalny ST
Język strukturalny wykorzystuje struktury algorytmicznych języków programowania
wyższego poziomu, takich jak Pascal, czy C. Podstawowymi elementami są zdania logiczne
Programowanie sterowników PLC
67
zawierające warunki oraz polecenia związane z wyrażeniami, które składają się z operatorów
i operandów. Najczęściej wykorzystywane struktury zdań języka ST przedstawiono poniżej.
Dwa pierwsze są strukturami zdań umożliwiającymi dokonywanie wyboru.
Zdanie:
IF warunek THEN polecenie1 ELSE polecenie2
W czasie realizacji tego fragmentu programu sprawdzany jest warunek występujący po słowie
kluczowym IF. Jeżeli jest on spełniony (wyrażenie logiczne z nim związane jest spełnione)
następuje wykonanie polecenia1 występującego po słowie THEN. W przeciwnym wypadku
wykonywane jest polecenie2, które występuje po słowie ELSE.
Tabela 4.1. Standardowe operatory i modyfikatory IL
Operator
Modyfikator
Operand
Opis
LD
ST
S
R
AND
&
OR
XOR
ADD
SUB
MUL
DIV
GT
GE
EQ
LE
LT
NE
)
CAL
JMP
RET
N
N
N, (
N, (
N, (
N, (
(
(
(
(
(
(
(
(
(
(
C, N
C, N
C, N
zmienna, stała
zmienna
zmienna logiczna
zmienna logiczna
zmienna logiczna
zmienna logiczna
zmienna logiczna
zmienna logiczna
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
zmienna, stała
nazwa
etykieta
operand do wynik bieżący
wynik bieżący do operand
ustaw wartość operandu
wyzeruj wartość operandu
logiczne AND
logiczne AND
logiczne OR
logiczna suma z wyłączeniem
dodawanie
odejmowanie
mnożenie
dzielenie
porównanie: >
porównanie: >=
porównanie: =
porównanie: <>
porównanie: <=
porównanie: <
ograniczenie modyfikatora
wywołanie bloku funkcyjnego
skok do etykiety
powrót z wywołania
Programowanie sterowników PLC
68
Zdanie:
CASE selektor OF lista poleceń z etykietami ELSE inne polecenia
Konstrukcja ta umożliwia wykonanie różnych poleceń w zależności od wartości, jaką
przyjmuje selektor, który jest wyrażeniem typu INTEGER. Lista poleceń zawiera grupy
poleceń, z których każda charakteryzuje się swoją unikalną etykietą. W czasie realizacji
programu wykonana zostanie ta grupa poleceń, której etykieta odpowiada obliczonej wartości
selektora. Gdy wyliczona wartość nie odpowiada żadnej etykiecie, będą wykonane inne
polecenia, które zostały umieszczone po słowie ELSE.
Drugą grupę konstrukcji używanych w języku ST stanowią konstrukcje iteracyjne,
umożliwiające powtarzanie wybranego fragmentu programu.
Zdanie:
FOR wartość początkowa TO wartość końcowa BY krok DO polecenia
Struktura ta pozwala na iteracyjne wykonanie polecenia tyle razy, ile wynika to z odjęcia
wartości początkowej od wartości końcowej z określonym krokiem. Służy ona do
programowania zadań iteracyjnych w przypadku znajomości liczby potrzebnych iteracji.
Zdanie:
WHILE warunek DO polecenia
REPEAT polecenia UNTIL warunek
Obydwie te konstrukcje służą do zaprogramowania cyklicznego wykonywania poleceń, gdy
liczba iteracji nie jest z góry znana, a decyduje o niej warunek podany w zdaniu po słowie
WHILE lub UNTIL.
Tabela 4.2. Operatory języka ST
Operacja
Symbol
Operacja
Symbol
nawiasy
obliczanie wartości funkcji
potęgowanie
wartość przeciwna
uzupełnienie
mnożenie
dzielenie
reszta z dzielenia
(wyrażenie)
nazwa(lista argumentów)
**
-
not
*
/
mod
dodawanie
odejmowanie
porównanie
równość
nierówność
iloczyn logiczny
suma logiczna modulo 2
suma logiczna
+
-
<,>,<=,>=
=
<>
&, and
xor
or
Wyrażenie stanowi element języka, który z chwilą wykonania dostarcza wartość
odpowiedniego typu. Operandem może być zmienna, stała, wywoływana funkcja lub inne
Programowanie sterowników PLC
69
wyrażenie. Operatory języka ST przedstawia tabela 4.2. Obliczanie wartości wyrażenia polega
na stosowaniu operatorów do operandów według kolejności odpowiadającej miejscu w tabeli.
4.2.1.3. Język schematów drabinkowych LD
Język ten podobny jest do prezentacji obwodu elektrycznego składającego się z głównie
symboli styków, cewek oraz połączeń między nimi. Wszystkie obwody zaczynają się z lewej
strony wspólną „szyną zasilającą”, od której „prąd” może płynąc z lewej strony do prawej.
Najważniejsze elementy LD zebrano w tabeli 4.3.
Tabela 4.3. Podstawowe elementy języka LD
Symbol
Opis działania
styk normalnie otwarty (NO) – przewodzi prąd, gdy skojarzona z nim zmienna ma
wartość 1
styk normalnie otwarty (NC) – przewodzi prąd, gdy skojarzona z nim zmienna ma
wartość 0
styk zbocza narastającego – przewodzi prąd po zmianie stanu zmiennej z 0 na 1
styk zbocza opadającego – przewodzi prąd po zmianie stanu zmiennej z 1 na 0
zwykła cewka – skojarzona zmienna przyjmuje wartość 1, gdy „płynie” przez cewkę
prąd
cewka negująca– skojarzona zmienna przyjmuje wartość 1, gdy nie „płynie” przez
cewkę prąd
cewka ustawiająca – skojarzona zmienna przyjmuje wartość 1, gdy „płynie” przez
cewkę prąd. Wartość jest podtrzymywana niezależnie od „przepływu” prądu.
cewka zerująca – skojarzona zmienna przyjmuje wartość 0, gdy „płynie” przez cewkę
prąd. Wartość jest podtrzymywana niezależnie od „przepływu” prądu.
cewka zbocza narastającego – skojarzona zmienna przyjmuje wartość 1 na czas
jednego cyklu po pojawieniu się prądu w cewce.
cewka zbocza opadającego – skojarzona zmienna przyjmuje wartość 1 na czas jednego
cyklu po zaniku prądu w cewce.
cewka odtwarzalna – stan skojarzonej z cewką zmiennej jest podtrzymywany po
zaniku napięcia zasilania.
4.2.1.4. Język schematów blokowych FBD
P
N
S
R
P
N
M
Programowanie sterowników PLC
70
Język FBD opiera się o elementy logiczne występujące w schematach obwodów
elektronicznych. Elementami języka są bloki oraz łączące je linie. Bloki tworzą prostokąty
o rozmiarach zależnych od liczby wejść. Wejścia bloków znajdują się po lewej stronie
symboli, zaś wyjście po prawej. Bloki można łączyć ze sobą tworząc obwody.
Poszczególne bloki odpowiadają standardowym funkcjom: logicznym, matematycznym,
wyboru i porównania, konwersji typów.
Na rysunku 4.1. przedstawiono typową konstrukcję bloku w języku FBD.
Rys.4.1. Konstrukcja bloku w języku FBD
Można w zasadzie powiedzieć, że języki graficzne dla programowania sterowników
programowalnych maja pewną część elementów wspólnych oraz inną, która je od siebie
odróżnia. Różnica objawia się przede wszystkim na poziomie elementów podstawowych, tzn.
styków w języku LD. W miejsce styków w języku FBD pojawiają się elementy, które,
w technice cyfrowej, nazywa się bramkami logicznymi. I tak w miejsce dwóch styków
połączonych szeregowo w FBD pojawia się bramka AND, zaś w miejsce dwóch styków
połączonych równolegle pojawia się funkcja OR. Poprzez odpowiednie łączenie ze sobą tych
dwóch funkcji oraz elementu negacji można zbudować każdą funkcję logiczną, podobnie jak
w LD korzystając ze styków oraz połączeń między nimi. Można by powiedzieć, że język LD
jest językiem niższego rzędu w porównania do FBD. W normie pojawiły się jeszcze styki
porównań, które w FBD są bloczkami, oraz cewki różnego typu, które także mają swoją
blokową reprezentację. Można więc śmiało powiedzieć, że dwa języki graficzne różnią się
między sobą na poziomie sposobu zapisu podstawowych operacji logicznych. Dla zapisania
elementów, które stanowią już pewne standardowe bloki funkcyjne wykorzystuje się
praktycznie te same elementy. Dotyczy to takich bloków jak: przerzutniki, timery, liczniki.
4.2.1.5. Tworzenie struktury programu z użyciem grafu sekwencji SFC
&
wejścia
wyjścia
symbol funkcji
Programowanie sterowników PLC
71
Graf sekwencji (Sequential Function Chart) może być użyty do określenia kolejności
realizacji instrukcji programu napisanego w którymś z przedstawionych wcześniej języków
programowania. Tak więc SFC nie jest typowym językiem programowania, lecz raczej można
powiedzieć, że jest czymś na kształt języków wyższego poziomu, który ma zadanie
organizować pracę programu stworzonego przy pomocy języków niższego poziomu.
Formalizm SFC przyjęty w normie jest oparty na metodzie Grafcet, opracowanej w latach
siedemdziesiątej we Francji i stosowanej w oprogramowaniu przez wielu producentów
sterowników programowalnych. Obydwie metody stanowią modyfikację sieci Petriego typu
P/T (Pozycja/Tranzycja).
Elementami grafu sekwencji są połączone ze sobą za pomocą linii kroki (ang. STEP),
nazywane też etapami, i tranzycje (ang. TRANSISION), nazywane przejściami. Symbolem
graficznym kroku jest prostokąt z wpisaną nazwą. Z każdym krokiem jest skojarzony zestaw
zadań, które mają w tym kroku być wykonane. Zadania te zapisywane są w jednym
z przedstawionych języków programowania (IL, ST. LD. FBD). Kroki łączone są liniami
pionowymi. Przy czym każdy krok posiada wejście (u góry) oraz wyjście (u dołu). Przejście
reprezentowane jest poprzez warunki logiczne, jakie muszą być spełnione, aby mogły być
wykonywane następne kroki. Symbolem graficznym przejścia jest pozioma kreska na linii
łączącej kroki. Przejścia, podobnie jak kroki, opisane są w jednym z języków zdefiniowanych
w normie. Krok może być aktywny, gdy skojarzone z nim działania są wykonywane w
każdym cyklu pracy sterownika. Z każdym krokiem skojarzona jest flaga, która obrazuje jego
aktualny stan. W przeciwnym wypadku krok jest nieaktywny. W każdym grafie istnieje jeden
krok szczególny – krok początkowy, wyróżniony symbolem podwójnego prostokąta. Jest ona
aktywny po zainicjowaniu programu. Przejście może zostać wykonane tylko wtedy, gdy kroki
poprzedzające przejście są aktywne i zmienna logiczna reprezentująca warunki przejścia ma
wartość logiczną „1”. Po spełnieniu warunków przejścia następuje dezaktywacja wszystkich
kroków poprzedzających przejścia i aktywacji wszystkich kroków następujących
bezpośrednio po przejściu. W grafie sekwencji nie można umieszczać bezpośrednio po sobie
kilku przejść, czy kroków.
Programowanie sterowników PLC
72
Rys.4.2. Ilustracja możliwości grafu SFC
Najważniejsze możliwości SFC pokazano na rysunku 4.2 [Brock et.al. 2000;
Kwaśniewski 1999; Michel 1990; Mikulczyński 1997; Lewis 1995]. Do podstawowych
możliwości, jakie daje graf należą:
•
wybór (and. divergence) – pozioma linia z jednym „wejściem” i co najmniej dwoma
„wyjściami”. Dane „wyjście” z kroku poprzedzającego będzie wybrane, gdy nastąpi
odblokowanie przejścia znajdującego się na początku wybranej ścieżki. Przewidziano trzy
możliwości wyboru: z pierwszeństwem od lewej do prawej ścieżki, zadeklarowanym
numeracją ścieżek, ze wzajemnym wykluczaniem ścieżek (warunki wyboru
poszczególnych ścieżek muszą się wykluczać). Na końcu wszystkich schodzących się
ścieżek są przejścia;
•
równoległa realizacja ścieżek – sekwencja współbieżna (ang. simultaneous sequence) –
podwójna linia pozioma z jednym „wejściem” zaznaczonym gwiazdką oraz co najmniej
dwoma „wyjściami”. Realizacja tego połączenia polega na rozwidleniu w grafie na co
najmniej dwie ścieżki, na jednoczesnej realizacji aktywnych pierwszych kroków w każdej
z równoległych ścieżek, a następnie na niezależnej realizacji ścieżek aż do ostatniego
kroku w każdej z nich. Symbolem zakończenia równoległej realizacji ścieżek jest w grafie
podwójna linia pozioma narysowana przed wspólnym przejściem. Aby zakończyć
S1
S0
S2
S4
S5
S6
S7
S8
S9
S10
S11
T1
T5
T2
T3
S3
T4
T6
T8
Not (T6)
AND (T7)
T10
T11
T12
2
1
T9
T13
T14
Programowanie sterowników PLC
73
realizację połączenia równoległego wszystkie kroki połączone linią podwójną muszą być
aktywne oraz musi stać się aktywne przejście do kroków następnych.
Kierunek obiegu poszczególnych ścieżek w grafie wynika ze sposobu jego rysowania
i przeważnie odbywa się z góry w dół. Czasami jednak może się zdarzyć, że w grafie będzie
potrzeba narysowania pętli, która biegła będzie w górę. Wtedy też można używać strzałek dla
zwiększenia przejrzystości rysunku.
Wydaje się, że sposób tworzenia struktury programu, jakim jest SFC, daje dość duże
możliwości organizacji dosyć skomplikowanych procedur sterowania. Z drugiej jednak strony
dosyć trudno sobie wyobrazić stworzenie grafu SFC dla naprawdę bardzo skomplikowanego
systemu sterowania. Być może jest to kwestia tylko i wyłącznie praktyki. Wydaje się jednak,
że czasami SFC zamiast upraszczać komplikuje program sterowania [Kulisz 1999]. Dla
programisty, który biegle posługuje się językami tekstowymi, nakładka w postaci SFC może
okazać się przeszkodą w pisaniu dobrych programów.
4.3. Podsumowanie
Opisana pokrótce norma EN 61131, choć powstała dość dawno temu i jest już dobrze
znana i rozpoznawana przez użytkowników sterowników programowalnych, jeszcze ciągle
nie zdobyła popularności, na którą, jak się wydaje, liczyli jej twórcy. Powstaje coraz więcej
systemów, które, przynajmniej częściowo, zaczynają być zgodne z normą. Jednak okazuje się,
że, o ile w językach graficznych, dostosowanie do wymagań normy jest już realizowane dość
powszechnie, to o wiele trudniej jest znaleźć system, który odpowiada normie w językach
tekstowych. Jednak należy powiedzieć, że kilka ostatnich lat to ciągły wzrost popularności
normy, który objawia się, chociażby w dość dużej ilości publikacji, które ukazały się
w ostatnim czasie. Tak więc, jeżeli trzeba by określić pewien kierunek, w którym będzie
następował rozwój, to należy powiedzieć, że wszystko wygląda na to, że norma uzyskuje
coraz większy prestiż i być może kiedyś system taki jak IsaGraf będzie mógł być
wykorzystywany dla różnych platform sprzętowych. Z punktu widzenia użytkownika na
pewno było by to bardzo dobrze widziane. Gdyby istniał jeden język, czy też raczej zestaw
języków programowania mógłby on być doskonalony i w efekcie powstawałoby dobre
narzędzie, które umożliwiałoby coraz lepsze wykorzystanie możliwości edytorów oraz
samych sterowników. Na razie jednak norma wydaje się być jakby martwa, a co za tym idzie
ma raczej małe szanse na rozwój, na zmiany.
Programowanie sterowników PLC
74
Norma opisuje różne sposoby programowania sterowników i to wydaje się dobrym
rozwiązaniem, aby każdy programista, mający jakieś przyzwyczajenia mógł używać języka
zbliżonego do tego, jakiego używał do tej pory. Języki tekstowe na pewno są dobre dla tych,
którzy programują w asemblerze (IL), czy też programach typu Pascal, czy też C (ST) [Berger
2001a]. Zresztą w przypadku programu Concept dla programowania sterowników firmy
Schneider już mamy do czynienia z odmianą języka C do programowania sterowników.
Natomiast języki graficzne są bardzo przydatne dla wszystkich tych, którzy od dawna
programują sterowniki używając właśnie tych metod – szczególnie dotyczy to języka
schematów drabinkowych LD. Języki graficzne są też językami, które są najbardziej zbliżone
dla poszczególnych firm produkujących sterowniki. Kiedy porówna się programy zapisane
w języku LD widać ogromne podobieństwa, natomiast języki tekstowe znacznie od siebie
odbiegają. Wystarczy porównać prosty program, realizujący funkcję układu kombinacyjnego
dla sterowników S7-300 [Siemens 1996d] oraz S7-200 firmy Siemens [Siemens 2002],
a zobaczymy, że dla LD różnic (prócz znaków % w adresie) praktycznie nie ma (rys.4.3.),
natomiast zapis IL [Siemens 1996b] jest diametralnie różny. Podobne obrazy tworzone
w języku LD uzyskalibyśmy na przykład dla edytora Modsoft dla sterowników Modicon, czy
też Omron lub Fanuc.
S7-200 IEC LD
S7-200 LD
Programowanie sterowników PLC
75
S7-200 IL
S7-300 IL
Rys.4.3. Przykład programu realizującego funkcję kombinacyjną zapisanego w języku LD
Jak widać, w przypadku prostych funkcji, w których używamy jedynie styków, w języku
LD nie ma w zasadzie żadnych różnic. Te, które można zauważyć dotyczą jedynie kształtu
używanych elementów, czy odmiennych sposobów adresowania. Różnice i to bardzo duże
występują natomiast w języku IL. Zapis dla sterownika S7-300, jak widać, jest całkowicie
inny niż dla S7-200. Wynika to z rozbieżnych list instrukcji dla tych sterowników (rys.4.4.).
Rys.4.4. Przykład programu zapisanego w języku IL
Bardziej skomplikowanym problemem jest programowanie układów czasowych
i
licznikowych. Programowanie to wymaga uwzględnienia wielu elementów i dla
przejrzystości programu sterowania oraz wygody programowania celowe wydaje się
wprowadzenie rozkazów czasowych i licznikowych oraz symboli graficznych takich układów.
W większości sterowników konstruktorzy przewidują takie właśnie rozwiązania
wspomagające programowanie [Siemens 1988a; Modicon 1990a; GE Fanuc 1994]. Jako
przykłady mogą posłużyć przedstawione poniżej realizacje opóźnienia czasowego i ustawienia
wybranego wyjścia po zliczeniu zadanej liczby impulsów oraz zerowanego innym sygnałem
wejściowym.
Programowanie sterowników PLC
76
S7-200 IEC LD
Dla przykładu z licznikiem przedstawione zostaną programy stworzone w języku LD dla
różnych sterowników (rys.4.5.).
Rys.4.5. Przykład wykorzystania licznika w różnych sterownikach
Jak widać powyżej już przy dość prostym programie, który wymaga jednak użycia
elementów innych niż tylko styki i cewki, pojawiają się dość istotne różnice. Nie widać
większych różnic pomiędzy sterownikami GE Fanuc oraz np. Modicon, natomiast dla
programu MicroWin i sterowników S7-200 firmy Siemens zauważamy, że bloczek licznika
nie posiada wyjścia, a więc wymagane jest stworzenie drugiego networku, aby zapisać w nim
przepisanie stanu wewnętrznego licznika do fizycznego wyjścia. W wersji LD zgodnej z
normą z kolei licznik posiada wyjście binarne, ale posiada także dodatkowe wyjście słowowe,
na które przepisywany jest aktualny stan liczbowy licznika. Nie można nie użyć tego wyjścia.
Tak więc mimo tego, że w naszym przykładzie nie jest wymagane jego użycie musimy na to
wyjście wpisać jakiś adres słowa. W przykładzie wpisano tam adres zmiennej lokalnej, aby
nie wykorzystywać zmiennych globalnych. Jeszcze inaczej sytuacja wygląda dla sterowników
S5 oraz S7-300. W bloczkach liczników tychże sterowników nie musimy używać nie
chcianych wejść, ale takie nieużywane wejścia skutkują pojawieniem się w języku IL
dodatkowych instrukcji (w miejsce każdego nie użytego wyprowadzenia jeden rozkaz NOP
0). Poza tym dla tych sterowników używamy instrukcji licznika zliczającego w dół, a zamiast
zerowania ustawiamy licznik w stan 5 (rys.4.6.).
Podsumowując powyższy przykład można powiedzieć, że różnice w przedstawionych
rozwiązaniach są spore i daleko im do rozwiązania, które prezentuje edytor S7-200 IEC.
Programowanie sterowników PLC
77
Jeszcze gorzej ma się sprawa w przypadku tworzenia programu sterownia używając edytora
IL dla poszczególnych sterowników. Rozpatrzmy przykład programu realizującego prostą
funkcję opóźnienia pojawienia się jedynki na wyjściu o podany czas – przykład 4.1.
Rys.4.6. Przykład wykorzystania licznika zliczającego w dół (S7-300)
Przykład 4.1.
Simatic S5
A
I 2.1
;
testowanie stanu wejścia
L
KT 500.0
;przygotowanie czasu 5s w akumulatorze
SD
T1
;start timera OnDelay
A
T1
;testowanie stanu timera
=
Q 4.0
;przepisanie stanu timera do wyjścia
Cegelec
LD
I 00.00
;testowanie wejścia
TMR
30 A 51 0 15 00
;funkcja z rodzajem timera, numerem, czasem oraz adresem wyjścia
Simatic S7-200
LD
I 2.1
;testowanie stanu wejścia
TON
T40, +50
;funkcja obsługi timera
LD
T40
;testowanie stanu timera
=
Q 4.0
;przepisanie stanu timera do wyjścia
Analizując powyższe rozwiązania wydaje się, że śmiało można powiedzieć iż nie mają
one za wiele ze sobą wspólnego i nie dziwi wobec tego fakt, że języki tekstowe nie cieszą się
zbyt dużą popularnością wśród programistów sterowników programowalnych. Jak widać
różnice sięgają dość głęboko. Począwszy od liczby użytych rozkazów, poprzez różne
mnemoniki to samo realizujących rozkazów, aż po konstrukcje programowe realizujące tę
Programowanie sterowników PLC
78
samą funkcję logiczną. W przedstawionym przykładzie programowania opóźnienia
czasowego z użyciem sterownika Cegelec w rozkazie czasowym pojawia się dana określająca
oprócz czasu także numer wyjścia tego układu, oznaczenie wyjścia, typ układu czasowego i
jego numer. Taki zapis jest charakterystyczny dla rozkazów wieloargumentowych, w które
wyposażony został ten sterownik. Sterowniki S5 oraz S7-300 firmy Siemensa natomiast
charakteryzują się tym, że posiadają tylko rozkazy, co najwyżej jednoargumentowe. Dlatego
też programy zapisane w ich językach IL są o dłuższe – posiadają więcej instrukcji, co nie
oznacza dłuższej ich realizacji.
Warto też wspomnieć o możliwościach realizowania różnego rodzaju funkcji czasowych
i licznikowych. Pozytywnym przykładem mogą być tutaj sterowniki Simatic S5 firmy
Siemens, które posiadają wbudowane pięć rodzajów funkcji czasowych. Wydaje się, że
funkcje te (generacja impulsu, przedłużenie impulsu, opóźnione załączenie, pamiętane
opóźnione załączenie, opóźnione wyłączenie) należą do najczęściej stosowanych w praktyce
programowania sterowników przemysłowych. Przy braku takich funkcji dostępny układ
czasowy trzeba rozbudowywać o dodatkowe elementy logiczne, co czasem może prowadzić
do bardzo rozbudowanych fragmentów programu jak np. realizacja restartowalnego
generatora impulsu z wykorzystaniem sterownika firmy AEG Modicon. W przypadku
realizacji tej funkcji w sterownikach S5 program będzie o wiele krótszy, gdyż mają one
wbudowany tego typu układ czasowy. Sterowniki firmy SAIA z kolei oferują na przykład
gotowe rozkazy generatorów, które wystarczy odpowiednio sparametryzować.
Oprócz różnic, które zostały już zaprezentowane, a które dotyczą samych języków zapisu
programu istnieją jeszcze różnice dotyczące struktur programu sterowania [Chmiel, Nowara
2000] oraz jego realizacji. Cały program sterowania przeważnie dzielony jest na mniejsze
części, które mają za zadanie realizację pewnych elementów sterowania. W sterowniku
Modicon 984 mamy możliwość pisania programów w segmentach, których może być
maksymalnie 32. Kolejność oraz częstotliwość wykonywania danego segmentu można ustalić
dowolnie w wykazie realizowanych segmentów (Segment Schedular). Jeżeli jakiś segment jest
krytyczny czasowo można go wykonywać kilka razy w ciągu jednego obiegu pętli
programowej. Każdy z segmentów z kolei składa się z podsieci (Network), w których
umieszczamy program sterowania. Każda sieć ma wymiary 8 wierszy na 11 kolumn, a każde
przecięcie kolumny z wierszem jest nazywane węzłem, w który wprowadzamy elementy. Przy
czym są elementy jedno lub wielowęzłowe w zależności od ilości parametrów danego bloku.
Programowanie sterowników PLC
79
Podobne możliwości daje język Step5 przeznaczony do programowania sterowników firmy
Siemens - Simatic S5 lub Step 7 dla sterowników Simatic S7. Tutaj jednak wygląda to trochę
inaczej. W strukturze programu występuje główny blok organizacyjny (OB1), w którym
piszemy sterowanie nadrzędne (strukturalne), które podobne jest do podawania kolejności
wykonywania segmentów w języku Modsoft. Jest to blok wykonywany cyklicznie przez
jednostkę centralną. Z bloku tego można wywoływać następne bloki nazywane
programowymi (PB), które zawierają programy użytkowe tworzące strukturę zgodną z
technologicznymi i
funkcjonalnymi warunkami sterowania. Z bloków programowych
natomiast można wywoływać pozostałe bloki: funkcje (FC), bloki funkcyjne z (FB) - często
powtarzające się elementy programowe, bloki danych (DB), czy też specjalne bloki
sekwencyjne (SB). W blokach organizacyjnych istnieje także możliwość programowania
liniowego, która jednak znacznie zmniejsza funkcjonalność pisanych programów. W
sterownikach S5 w blokach organizacyjnych nie można używać całej gamy instrukcji,
natomiast w S5 oraz S7 nie można tych bloków parametryzować. Poziom zagnieżdżania
programu w S5 może maksymalnie wynosić 16, a w S7 – 8 wywołań. W ramach bloku
program piszemy w segmentach. Jeżeli chodzi natomiast o najniższy poziom pisania
programu, programy Siemensa dają programiście większe pole manewru. Mianowicie można
wybrać jedną z trzech metod programowania: LAD - schemat stykowy (podobny do tego z
programu Modsoft), CSF - schemat logiczny oraz STL - lista instrukcji, przy czym pełny
zestaw instrukcji dostępny jest tylko przy programowaniu metodą STL. Na rysunku 4.7.
pokazano jak wygląda struktura programu dla sterowników Modicon 984 oraz Simatic S5, S7.
Rys.4.7. Struktury programu dla sterowników Modicon oraz Simatic
Segment 1
Segment n
Network 1
Network 2
Network m
Network 1
Network 2
Network m
Schemat
Drabinkowy
Schemat
Drabinkowy
Program
OB 1
Call X
Call Y
PB, FB, DB
Modicon 984 Compact
Simatic S5, S7
PB X
BE
Program
PB Y
BE
PB, FB, DB
PB, FB, DB
BE