Dr inż. Jakub Możaryn, dr inż. Piotr Wasiewicz
Zaawansowane Układy Automatyki PLC Zaawansowane Układy Automatyki PLC
Wykład 2 – Języki programowania PLC
Języki programowania sterowników PLC (zgodne z normą IEC 61131-3)
Języki tekstowe: 1. IL – Instruction List 2. ST – Structured Text Języki graficzne: 3. LD – Ladder Diagram
4. FBD – Function Block Diagram 5. SFC – Sequential Function Chart 5. SFC – Sequential Function Chart opcjonalnie:
6. CFC – Continuous Function Chart (modyfikacja FBD)
Norma IEC 61131
Część nr Nazwa Treść Część 1 Ogólny przegląd,
definicje
- definicje, słownik pojęć,
- wykaz powiązanych i zalecanych standardów IEC - cechy funkcjonalne PLC
Część 2 Sprzęt (sterowniki i urządzenia
peryferyjne), zasady testowania
- wymagania elektryczne, mechaniczne i funkcjonalne odnośnie sprzętu,
- wymagania odnośnie serwisu, magazynowania i transportowania,
- informacje użytkowe od producentów,
- metody testowania i procedury weryfikacji zgodności sprzętu, Część 3 Języki programowania - model oprogramowania i komunikacji,
Norma IEC 61131
Część 3 Języki programowania - model oprogramowania i komunikacji, - definicja pięciu języków programowania,
- składnia logiczna (syntaktyka) i znaczenie (semantyka) instrukcji języków (IL, ST, LD, FBD),
- język SFC do programowania układów sekwencyjnych, Część 4 Wskazówki dla
użytkownika
- sposób wykorzystywania pozostałych części standardu sterowników programowalnych,
- wybór i wdrażanie systemów,
- wymagania dotyczące zastosowań (aplikacji), Część 5 Komunikacja, wymiana
danych z użyciem MMS (Manufacturing Message Specifi- cations, ISO 9506))
- komunikacja między sterownikami różnych producentów, - komunikacja między sterownikami i innymi urządzeniami, - komunikacja sieciowa,
- wymiana danych, - stany alarmowe,
Język programowania LD
LD, Ladder Diagram, schemat drabinkowy, schemat przekaźnikowy, opracowany został z myślą o projektantach elektrycznych układów
przełączających, przekaźnikowych, realizujących funkcje logiczne poprzez odpowiednie lutowanie styków i cewek przekaźników
Język programowania LD
Instrukcje języka LD, biblioteka funkcji przekaźnikowych (Ladder) Przykład realizacji funkcji
logicznych: przerzutniki bistabilne RS i SR
Język programowania LD Definicja instrukcji języka LD:
• Coil – cewka przekaźnika, instrukcja wpisująca pod zadeklarowany adres 1 w stanie wymuszonym (wzbudzenie), lub 0 w stanie
normalnym (odwzbudzenie),
• Coil closed – cewka zanegowana,
• Coil set – cewka wpisująca 1 pod zadeklarowany adres, w stanie
7
• Coil set – cewka wpisująca 1 pod zadeklarowany adres, w stanie wzbudzenia, nie mająca możliwości jej skasowania,
• Coil reset - cewka wpisująca 0 pod zadeklarowany adres w momencie wzbudzenia, nie mająca możliwości wpisania 1,
• Coil positive - cewka reagująca na zbocze narastające (zmiana stanu z 0 na 1), wpisująca 1 pod zadeklarowany adres w momencie
wzbudzenia, na czas trwania jednego cyklu działania sterownika,
Język programowania LD Definicja instrukcji języka LD:
• Coil negative - cewka reagująca na zbocze opadające (zmiana stanu z 1 na 0) wpisująca 1 pod zadeklarowany adres w momencie
wzbudzenia, na czas trwania jednego cyklu pracy sterownika,
• Contact – styk N-O (Normally Open, normalnie otwarty, zwierny),
• Contact closed – styk N-C (Normally Closed, normalnie zamknięty,
8
• Contact closed – styk N-C (Normally Closed, normalnie zamknięty, rozwierny),
• Contact positive – styk reagujący na zbocze narastające (zmiana stanu z 0 na 1), zwiera się na czas trwania jednego cyklu działania sterownika,
• Contact negative – styk reagujący na zbocze opadające (zmiana stanu z 1 na 0), zwiera się na czas trwania jednego cyklu działania
sterownika.
AND (koniunkcja) OR (alternatywa)
Język programowania LD
Przykłady realizacji wybranych funkcji logicznych, w języku IL
9
XOR (eXclusive OR) NOR (Negacja OR)
Język programowania LD
Przerzutnik RS (z dominacją Resetu) Przerzutnik SR (z dominacją Setu)
Przykłady realizacji wybranych funkcji logicznych, w języku IL
10
Prawo de Morgana: negacja koniunkcji jest równa alternatywie zanegowanych argumentów
Prawo de Morgana: negacja alternatywy jest równa koniunkcji zanegowanych argumentów
Język programowania IL
IL, Instruction List, lista instrukcji, jest językiem tekstowym najniższego poziomu, typu assembler, zależnym w dużym stopniu od typu procesora zastosowanego w sterowniku PLC.
Przykładowo, w sterowniku Simatic S7 (firmy Siemens) wykorzystywany jest stos bitów systemowych, natomiast w sterowniku PCDx (firmy SAIA Burgess) sposób wykonywania instrukcji zależy od stanu pojedynczego bitu systemowego,
zwanego akumulatorem ACCU.
Język programowania IL
Rozkazy assemblera sterownika PLC: Saia, w odniesieniu do ich relacji z ACCU, można podzielić na następujące grupy:
1. nadające akumulatorowi stan początkowy (np. STH_I_16)
2. dokonujące operacji logicznych na akumulatorze (np. ANH_I_16)
3. działające w sposób zależny od stanu akumulatora (np. JR_H_etykieta) 4. nie mające żadnych relacji z akumulatorem (np. ADD, BITI)
Język programowania IL
Rozkazy assemblera można również klasyfikować wg rodzaju realizowanych funkcji:
• działające na bitach lub słowach (BINary, INTeger i Floating Point), jedno- lub wieloargumentowe
• generujące arytmetyczne flagi systemowe (Error, Zero, Negative, Positive)
• wykorzystujące rejestr indeksowy (…[X], których symbol jest zakończony literą X)
• możliwe do wykorzystania również w blokach funkcyjnych FB (z parametrami w postaci =1, =2,…).
postaci =1, =2,…).
Język programowania IL
Generalną zasadą programowania w języku IL jest przestrzeganie następującej kolejności wykonywania działań:
1. ! + - (NOT, positive, negative)
2. * / % (MUL, DIV
3. + - (ADD/SUB)
4. << >> (SHIFT) 4. << >> (SHIFT) 5. = <> (EQ, NEQ)
6. > >= < <= (GT, GE, LT, LE)
7. & (AND)
8. ^ (XOR)
9. | (OR)
Niedostępne w assemblerze nawiasy zastępuje się użyciem akumulatora (ACCU) i flagi (np. F 10)
Język programowania IL
Przykład realizacji prostej funkcji logicznej, w której operację alternatywy należy wykonać przed operacją koniunkcji.
(I 0 OR I 1) AND I 2 = O 32
LD IL Układ elektryczny
Zmiany tej kolejności, można dokonać nawiasami (np. w PLC Simatic).
Natomiast funkcję niedostępnych nawiasów (np. w PLC Saia) pełni akumulator (ACCU) i flaga (np. F 10).
(I 0 OR I 1) AND I 2 = O 32
I 0 OR I 1 AND I 2 = O 32
Koniunkcja AND Alternatywa OR
Przykłady realizacji wybranych funkcji logicznych, w języku IL Język programowania IL
Alternatywa wykluczająca XOR Negacja alternatywy NOR
Przerzutnik bistabilny RS (z przewagą kasowania)
Przerzutnik bistabilny SR (z dominacją ustawiania) Przykłady realizacji wybranych funkcji logicznych, w języku IL
Język programowania IL
Prawo de Morgana: negacja
koniunkcji argumentów stanowi alternatywę ich negacji
Prawo de Morgana: negacja alternatywy argumentów
stanowi koniunkcję ich negacji
Język programowania FBD
FBD, Function Block Diagram, schemat bloków funkcyjnych, schemat blokowy, opracowany dla projektantów realizujących funkcje logiczne przez odpowiednie łączenie półprzewodnikowych elementów funkcjonalnych (bramki logiczne, kodery, dekodery, multipleksery, komutatory, liczniki itp.) na płytkach drukowanych.
Język programowania FBD
19
Język programowania FBD
AND (koniunkcja) OR (alternatywa)
Przykłady realizacji wybranych funkcji logicznych, w języku FBD
20
XOR (eXclusive OR) NOR (Negacja OR)
Język programowania FBD
Przerzutnik RS (z dominacją Resetu)
Przerzutnik SR (z dominacją Setu)
Przykłady realizacji wybranych funkcji logicznych, w języku FBD
21
Prawo de Morgana: negacja
koniunkcji jest równa alternatywie zanegowanych argumentów
Prawo de Morgana: negacja
alternatywy jest równa koniunkcji zanegowanych argumentów
Język programowania FBD Biblioteka Standard
- podstawowe bloki funkcyjne FBD
Biblioteka Application - specjalizowane bloki
funkcyjne FBD
Język programowania FBD
Język programowania CFC
CFC, Continuous Function Chart, schemat funkcjonalny, język schematów blokowych umożliwia używanie zapętleń (w odróżnieniu do FBD)
Język programowania SFC
SFC, Sequential Function Chart, schemat sekwencji funkcji, graf
sekwencyjny Schemat sekwencji funkcji SFC ułatwia realizację sekwencyjnych układów logicznych, które w odróżnieniu od prostszych układów
kombinacyjnych, w których stany wyjść zależą wyłącznie od aktualnego stanu wejść, zawierają elementy pamięci. Sposób sterowania zależy bowiem również od stanu, w jakim znajduje się proces i system automatyki
Język programowania SFC Przykład prostej sekwencji
przetwarzania typu Step- Transition, zrealizowanej w języku SFC:
Algorytm:
Po włączeniu wejścia I_16, wyjście O_32 cyklicznie włącza się (na 3 s) i wyłącza (na 2 s)
Zadanie:
Zmodyfikuj program tak, aby istniała możliwość wyboru innej częstotliwości, za pomocą we I_17.
Język programowania SFC Ogólna struktura programu w języku SFC
Initial Step Step Transition Rozgałęzienie
typu XOR (selective) Rozgałęzienie
typu AND (simultaneous)
Język programowania SFC
Duże znaczenie praktyczne ma możliwość realizacji obejścia lub powtórzenia sekwencji przetwarzania:
Obejście sekwencji Powtórzenie sekwencji
Język programowania SFC
Przykłady nieprawidłowego użycia instrukcji języka SFC:
brak brak konflikt typów nieprawidłowe
Stepu Transition rozgałęzień skoki
Język programowania ST
ST, Structured Text, tekst strukturalny, jest językiem tekstowym
wyższego poziomu (typu Pascal, C, itp.) w którym, oprócz prostych instrukcji assemblerowych języka IL, występują również instrukcje złożone, takie jak:
• pętle iteracyjne (REPEAT-UNTIL, WHILE-DO, FOR-TO)
• wykonania warunkowe (IF-THEN-ELSE, CASE)
Język ten w zdecydowany sposób przyspiesza i ułatwia realizację algorytmów sterujących.
Język programowania ST Pętle iteracyjne:
REPEAT…UNTIL…END_ REPEAT (powtarzaj…dopóki…koniec_powtarzania)
i := -1;
REPEAT i := i+2;
UNTIL i=51 OR ARRAY[ i ]<>21 END_REPEAT;
WHILE….DO….END_WHILE
(podczas gdy… wykonaj…koniec_pętli)
i := -1;
WHILE i <= 51 AND ARRAY[ i ]=21 DO i := i+2;
END_WHILE;
FOR….TO….BY….DO….END_FOR
(pod…do…krokiem…wykonaj…koniec_pętli)
FOR i := 1 TO 7 BY 2 DO ARRAY[ i ]:=0;
END_FOR;
Język programowania ST Wykonania warunkowe:
IF….THEN….ELSIF….ELSE….END_IF
(jeśli…to…w przeciwnym razie jeśli…w przeciwnym razie…koniec_jeśli)
IF X > 0 THEN A:=1;
ELSIF X < 0 THEN A := -1;
ELSE A := 0;
END_IF;
CASE….OF….ELSE….END_CASE
(przypadek/wybierak…z…w.przeciwnym razie…koniec_wybierania)
CASE SELECTOR OF 1,3,5: A:=-1;
2,4,6..8: A:=1;
ELSE A:=0;
END_CASE;
Język programowania ST Dopuszczalne jest zagnieżdżanie pętli
tego samego lub różnych rodzajów:
ADDI:=0;
ADDJ:=0;
FOR I:=1 TO 5 DO FOR J:=1 TO 5 DO
IF ARRAY[I,J]=0 THEN ADDI:=ADDI+1;
ELSIF I>J THEN ADDJ:=ADDJ+1;
END_IF;
END_FOR;
END_FOR;