Sterowniki Programowalne (SP) Wykład #8 ę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 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: Structured Text ST 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 9 ULINT Unsigned long integer liczba całkowita poczwórnej długości bez znaku 32 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 danych GE Fanuc PACs
Typy danych Siemens
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) 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 B;0.1 A, (B+0.1) + > REAL BOOL
Operatory nr Operacja Symbol Priorytet 1 Nawiasy (wyrażenie) Najwyższy np. (i+1), (a>3) 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 Pętla wynikająca ze sposobu działania PLC - Cykl pracy PLC, którego czas jest nadzorowany przez systemowy 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!
Operacje na bitach, analogie LD i IL
Operacje na bitach, analogie LD i IL
Operacje na bitach, analogie LD i IL
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
Instrukcje ST w GE Fanuc
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
Deklarowanie zmiennych
Przykładowe programy w języku IL
Regulator dwustanowy w ST
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.
Osadzanie w projekcie bloku ST
Blok ST w projekcie i jego edycja
Wywołanie bloku ST z programu głównego _MAIN w języku LD
Blok ST jako blok programu głównego Po zmianie jego nazwy na _MAIN
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