sterowniki programowalne (sp) wykład #8 język ... w8 - język st... · 6 mnożenie * 7 dzielenie...
TRANSCRIPT
Sterowniki Programowalne (SP) – Wykład #8
Język programowania PLC (Structured Text - ST) WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI – KATEDRA INŻYNIERII SYSTEMÓW STEROWANIA
Jarosław Tarnawski
październik 2016
Zawartość wykładu
•Norma IEC 61131 i rodzaje języków programowania
•Języki niskopoziomowe i wysokopoziomowe
•Czy w każdym PLC/PAC jest dostępny każdy język programowania?
•Typy danych, zmienne, funkcje, bloki funkcyjne, programy
•Wyrażenia, operandy, operatory
•Analogie LD i ST w styki/przekaźniki
•Wywołanie bloku ST z programu głównego w LD
•Deklarowanie zmiennych w PACs
•Dostępne funkcje i bloki funkcyjne języka ST w PACs
•Przykładowe programy:
•Regulator dwustanowy w ST;
•Sortowanie bąbelkowe w ST;
•Całkowanie, różniczkowanie, modelowanie ob. dynamicznych w ST
•Operacje na macierzach
•Wady i zalety języka ST
•Bibliografia
Norma IEC 61131
Norma IEC61131 - Programmable Logic Controllers składa się z 5 części:
W trzeciej części IEC61131-3 zdefiniowano języki programowania PLC.
Dzięki definicji i ujednoliconemu sposobowi programowania użytkownicy
mogą oczekiwać bardzo podobnego sposobu programowania PLC
różnych producentów.
Określono model programowy, model komunikacyjny, typy i struktury
danych.
Zawartość normy:
1. Informacje ogólne (General Information)
2. Sprzęt i wymagania testowe (Equipment and Test Requirements)
3. Języki programowania (Programing Languages)
4. Wytyczne użytkownika (User Guidelines)
5. Wymiana informacji (Messaging Service)
Norma IEC 61131
Norma IEC61131 - Programmable Logic Controllers definiuje następujące
języki programowania:
Języki graficzne:
1. Język drabinkowy (Ladder Diagram – LD)
2. Język bloków funkcyjnych (Function Block Diagram - FBD)
Języki tekstowe:
3. Lista instrukcji (Instruction List – IL)
4. Tekst strukturalny (Structured Text - ST)
5. Język grafów strukturalnych (Sequential Function Chart - SFC)
Niektórzy producenci dostarczają moduł programowania w języku C, ale
nie jest on zdefiniowany w normie!
Języki tekstowe programowania PLC
Cechy
Instruction List – IL Structured Text – ST
Język niskopoziomowy Podobny do: Assembler Cechy: Mnemoniki, Akumulator, Stos Typowe Rozkazy: LD wartosc
GT 10
JMPC skok1
LD adres1
ST wynik
skok1:
LD adres2
ST wynik
JMP etykieta
etykieta:
Język wysokopoziomowy Podobny do: Pascal, C, Basic Cechy: Operator podstawienia := Koniec wiersza ; Kontrola typów danych 0.0 <> 0 Typowe Rozkazy:
If..then..else..end_if;
Case..of..end_case
For..to..do..end_for;
While..do..end_while;
Repeat..until..end_repeat
Języki programowania dostępne w PLC/PAC GE Fanuc
90-30 PACs SoftPLC (Proficy ME)
LD IL C
LD
FBD ST C
LD IL ST
FDB SFC
LD – Ladder Diagram – język drabinkowy
FDB – Function Block Diagram – schematy bloków funkcyjnych
IL – Instruction List – lista instrukcji
ST – Structured Text – język strukturalny
SFC – Sequential Function Chart – graf sekwencji
C – język C
Typy danych – podstawowe norma IEC 61131
Nr Nazwa typu Typ Ile bitów
do zapisu Zakres
1 BOOL Boolean – liczba binarna 1 0, 1; TRUE, FALSE
2 SINT Short integer – liczba całkowita krótka 8 -128÷ 127
3 INT Integer – liczba całkowita 16 - 32768 ÷ 32767
4 DINT Double integer – liczba całkowita podwójnej długości 32
5 LINT Long integer – liczba całkowita poczwórnej długości 64
6 USINT Unsigned short integer - liczba całkowita krótka bez znaku 8 0 ÷ 255
7 UINT Unsigned integer - liczba całkowita bez znaku 16 0 ÷ 65535
8 UDINT Unsigned double integer – liczba całkowita podwójnej długości bez znaku
32
9 ULINT Unsigned long integer – liczba całkowita poczwórnej długości bez znaku
64
10 REAL Real numbers – liczba rzeczywista 32
11 LREAL Long reals – liczba rzeczywista podwójnej długości 64
12 TIME Duration
13 DATE Date (only)
14 TIME_OF_DAY Time of day (only)
15 DATE_AND_TIME Date and time of Day
16 STRING Variable-length single-byte character string 8
17 BYTE Bit string of length 8 8
18 WORD Bit string of length 16 16
19 DWORD Bit string of length 32 32
20 LWORD Bit string of length 64 64
21 WSTRING Variable-length double-byte character string 16/znak
Typy pochodne (Derived types)
Bazując na typach podstawowych możemy zbudować własne typy danych korzystając
z konstrukcji TYPE … END_TYPE z wykorzystaniem mechanizmu:
1. Bezpośredniego skorzystania z typu bazowego
2. Wymienienia wszystkich składowych typu
3. Zawężenia zakresu bazowego typu
4. Zbudowanie struktury złożonej z kilku typów
5. Zbudowania tablicy
1 TYPE MOJ_REAL : REAL; END_TYPE
2 TYPE SWIATLA : (ZIELONE, ZOLTE, CZERWONE); END_TYPE
3 TYPE PODZAKRES_INT : INT (-32000..32000); END_TYPE
4 TYPE TABLICA : ARRAY [1..5] OF PODZAKRES_INT; END_TYPE
5 TYPE ZMIENNA: STRUCT ADRES : INT; WARTOSC: REAL; END_STRUCT END_TYPE
Deklaracje zmiennych
VAR..END_VAR
Zmienne umożliwiają identyfikowanie obiektów, których zawartość może się
zmieniać/może być modyfikowana np. stan wejść, wyjść lub pamięci PLC.
Zmienne mogą być zadeklarowane dla typów podstawowych BOOL, INT, REAL
etc. oraz typów pochodnych zbudowanych przez użytkownika.
Tzw. wspólne elementy dotyczące zmiennych
VAR...END_VAR
VAR_INPUT...END_VAR
VAR_OUTPUT...END_VAR
VAR_IN_OUT...END_VAR
VAR_EXTERNAL...END_VAR
VAR_TEMP...END_VAR
VAR_ACCESS...END_VAR zmienne dostępne z modelu komunikacji: IEC 61131-5.
VAR_GLOBAL...END_VAR
VAR_CONFIG...END_VAR
Deklaracje zmiennych
nr Prefix Znaczenie Domyślny typ
1 I Wejście
2 Q Wyjście
3 M Pamięć
4 X Pojedynczy bit BOOL
5 Brak Pojedynczy bit BOOL
6 B Bajt (8 bitów) BYTE
7 W Słowo (16 bitów) WORD
8 D Podwójne słowo (32 bity) DWORD
9 L Poczwórne słowo (64 bity) LWORD
10 Użycie * oznacza brak określonego położenia
Przykładowo:
%Q1 lub %QX1 oznacza pierwszy bit pamięci związanej z wyjściami PLC
%MD12 oznacza zmienną typu double word w pamięci PLC
Deklaracje zmiennych
Zmienną symboliczną o dowolnej nazwie możemy powiązać z adresem
fizycznym za pomocą słowa kluczowego AT. Jeżeli to słowo nie występuje
zostanie zarezerwowana pamięć w PLC dla tej zmiennej.
Przykłady
VAR
Przycisk AT %I1 : BOOL;
Lampa AT %Q2 : BOOL;
Indeks AT %MW3 : INT;
END_VAR
Jednostki organizacji programu
Logika w PLC zorganizowana jest w trzech jednostkach
1. Funkcjach
2. Blokach funkcyjnych
3. Programach
Deklaracje z tzw. wspólnych elementów
FUNCTION ... END_FUNCTION
FUNCTION_BLOCK...END_FUNCTION_BLOCK
PROGRAM...END_PROGRAM
Funkcje
Funkcja to jednostka organizacyjna programu, która w wyniku wykonania
dostarcza dokładnie jeden element nazywany wyjściem funkcji i opcjonalnie
dodatkowe wyjścia (zdefiniowane w sekcjach VAR_OUTPUT i VAR_IN_OUT).
Wyjściem funkcji może być tablica lub struktura. Wywołanie funkcji może być
operandem w wyrażeniu. Funkcje nie powinny mieć żadnego stanu a ich wyjścia
(VAR_OUTPUT i VAR_IN_OUT) powinny być takie same dla takiego samego
zestawu wejść (VAR_IN i VAR_IN_OUT).
Wywołania funkcji mogą być formalne lub nieformalne
Formalne wywołanie funkcji. Takie wywołanie funkcji umożliwia przypisanie zmiennych, dowolną kolejność
argumentów i dowolną liczbę zmiennych.
A := NAZWA_FUNKCJI(EN:=WARUNEK_WE, WE1:=ZMIENNA_B, WE2 := 5.4, ENO => ZM_TEMP)
Nieformalne wywołanie funkcji. Takie wywołanie funkcji nie umożliwia przypisania zmiennych, wymaga
zdefiniowanej kolejności i stałej liczby argumentów.
A := NAZWA_FUNKCJI(1, ZMIENNA_B, 5.4)
Funkcje
Zmienne EN , ENO służą do kontrolowania wykonania funkcji lub
sygnalizowania poprawności wykonania.
Jeśli EN = 0 treść funkcji nie jest wykonywana a ENO jest ustawione na 0.
Jeśli EN = 1 treść funkcji jest wykonywana a ENO jest ustawione wg intencji programisty
np. ENO=1 jeśli wszystko w logice było ok i ENO=0 jeśli wystąpiły błędy.
Bloki funkcyjne
Blok funkcyjny jest jednostką organizacyjna programu, która w wyniku wykonania dostarcza
jedną lub więcej wartości na wyjściach bloku. W programie może występować wiele kopii -
instancji bloku funkcyjnego. Każda z tych instancji ma przypisany identyfikator (nazwę instancji)
oraz strukturę danych zawierającą dane wewnętrzne i wyjściowe bloku funkcyjnego oraz
ewentualnie dane wejściowe lub odnośniki do nich. Wszystkie wartości wyjściowe i wewnętrzne
są przechowywane pomiędzy wykonaniami bloku stąd blok funkcyjny z tymi samymi
argumentami wejściowymi może produkować różne sygnały wyjściowe.
Tylko sygnały wejściowe i wyjściowe są dostępne na zewnątrz konkretnej instancji bloku tj.
zmienne wewnętrzne są niedostępne i ukryte.
Zakres instancji bloku funkcyjnego jest ograniczony lokalnie do jednostki w której został
wywołany chyba, że został zadeklarowany jako globalny za pomocą VAR_GLOBAL.
Wyjściem funkcji może być tablica lub struktura. Wywołanie funkcji może być operandem w
wyrażeniu. Funkcje nie powinny mieć żadnego stanu a ich wyjścia (VAR_OUTPUT i
VAR_IN_OUT) powinny być takie same dla takiego samego zestawu wejść (VAR_IN i
VAR_IN_OUT).
Działają zasady EN i ENO
Deklaracja FUNCTION_BLOCK...END_FUNCTION_BLOCK
Funkcje i bloki funkcyjne
Typowymi przedstawicielami funkcji będą operacje nie wymagające
pamięci:
operacje matematyczne, relacje
Typowymi przedstawicielami bloków funkcyjnych będą bloki wymagające
zapamiętania stanu poprzedniego np.
timery, liczniki
Program
Program to logiczne połączenie/złożenie
wszystkich konstrukcji i elementów
języków programowania niezbędnych dla
przetwarzania sygnałów w celu uzyskania
pożądanego sterowania maszyną lub
procesem.
PROGRAM TESTOWY
(* Deklaracje zmiennych *)
VAR_INPUT
WLACZNIK : BOOL ;
CZUJNIK : INT ;
END_VAR
VAR_OUTPUT
STEROWANIE : INT ;
LAMPA : BOOL ;
END_VAR
VAR
TABLICA : ARRAY [0..4]
OF REAL := [0.0, 0.0, 0.0, 0.0,
0.0];
SREDNIA : REAL := 1.0;
I : INTEGER;
END_VAR
(* Logika programu *)
END_PROGRAM
Zasady języka ST – wyrażenia, operandy i operatory
Wyrażenia = operandy i operatory
Wyrażenie Operandy Operator Typ wyniku
3 * r 3; r * INT
2.1 + sin(0.123) 2.1, sin(0.123) + REAL
Temp > 22 Temp, 22 > BOOL
A > (B+0.1) B;0.1
A, (B+0.1)
+
>
REAL
BOOL
Operandami mogą być liczby w dozwolonym
typie i formacie, łańcuchy znaków, zmienne,
wywołania funkcji lub inne wyrażenia. Tablica 1. Ilustracja zależności wyrażeń, operandów i operatorów
Operatory
nr Operacja Symbol Priorytet
1 Nawiasy (wyrażenie)
np. (i+1), (a>3)
Najwyższy
2 Wykonanie funkcji nazwa_funkcji(lista_argumentów)
np. LN(A), MAX(X,Y), etc.
3 Potęgowanie **
4 Negacja -
5 Dopełnienie NOT
6 Mnożenie *
7 Dzielenie /
8 Modulo MOD
9 Dodawanie +
10 Odejmowanie -
11 Porównania <, >, <=, =>,
12 Równość =
13 Nierówność <>
14 Binarne iloczyn logiczny &
15 Binarne iloczyn logiczny AND
16 Binarna suma wykluczająca XOR
17 Binarna suma OR Najniższy
Zagrożenia wynikające ze stosowania pętli i skoków w PLC
Układ watchdog
Program wykonywany z
góry na dół trafiając na
pętlę (for, while, repeat)
lub skok wykonuje
kierunek w górę!
Mamy tu do czynienia z
pętlą w pętli!
Jeżeli wewnętrzna
(programowa) pętla
będzie trwała tyle, że
zewnętrzna pętla nie
zdąży się wykonać w
czasie zadanym jako
parametr układu
watchdog to wystąpi
błąd krytyczny i PLC
zostanie zatrzymany!
Pętla wynikająca
ze sposobu
działania PLC
- Cykl pracy PLC,
którego czas jest
nadzorowany
przez systemowy
układ watchdog
Instrukcje wysokopoziomowe ST powodują narzut czasowy
Przy realizacji mnożenia dwóch macierzy
o wymiarach 15 × 15 za pomocą operacji skalarnych powstaje konieczność
wykonania 3375 operacji mnożenia i tyle samo dodawania. Dla ilustracji tych
rozważań wykonano testy mnożenia macierzy w różnych wersjach realizacji
programistycznej. W macierzach znajdowały się liczby zmiennoprzecinkowe 32-
bitowe. Testy wykonano dla dwóch jednostek centralnych GE Fanuc RX3i.
Wyniki przedstawione w tab. wyrażone są w milisekundach i bajtach.
Z danych zawartych w tabeli
wynika, że postać kodu ma
istotny wpływ na szybkość
wykonania programu i jego
objętość. W przypadku kodu
pisanego bez pętli znacznie
zwiększa się prędkość
wykonania programu, ale
kosztem jego objętości.
Deklarowanie zmiennych
Norma wprowadza sekcję VAR … END_VAR; do
definiowania zmiennych
VAR
A, B : INT;
END_VAR
Ale producenci PLC dostarczają swoje mechanizmy
definiowania zmiennych i związywanie ich z fizycznymi
adresami PLC
Komentarze w programie i podświetlanie składni
• Komentarz blokowy zawiera się pomiędzy (* *)
• Komentarzem liniowym programie jest wszystko co znajduje się za znakiem apostrofu ‘ lub //
• Edytor posiada możliwość kolorowania składni (odróżniania słów kluczowych – i zmiennych od reszty programu) oraz kolorowanie oddzielnie komentarzy.
Zalety języka ST
• Konstrukcje wysokopoziomowe if, case, for, while, repeat
• Znajoma forma programu dla programujących w C, Pascal, Basic
• Możliwość operowania na wektorach i macierzach
• Łatwa implementacja algorytmów (w tym zaawansowanych)
• Zwartość programu możliwość zmieszczenia na jednej stronie ekranu całej złożonej funkcji (niemożliwe do osiągnięcia w językach graficznych)
• Ścisła kontrola typów pozwala zapobiegać niepożądanym efektom
Wady języka ST
• Narzut czasowy na wykonywane operacje wysokopoziomowe
• Brak elastyczności znanej z C
• Brak możliwości deklarowania i inicjowania zmiennych w dowolnym miejscu kodu
• Brak możliwości stosowania operacji arytmetycznych jako indeksów macierzy
• Formuła END_
• Ścisła kontrola typów (dobra dla początkujących, krępująca dla zaawansowanych)
Bibliografia
• INTERNATIONAL STANDARD IEC 61131-3, Second edition 2003-01
• Legierski T., Kasprzyk J., Wyrwał J., Hajda J.: „Programowanie sterowników PLC”, Wydawnictwo Pracowni Komputerowej Jacka Skalmierskiego, Gliwice, 1998
• Simatic S7 Programowalny sterownik S7-1200 Podręcznik systemu Wydanie 04/2009
• Programmable Control Products PACSystems* RX3i System Manual, GFK-2314F, Jan 2015