57
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

Sterowniki Programowalne (SP) Wykład #8 Język ... W8 - Język ST... · 6 Mnożenie * 7 Dzielenie / 8 Modulo MOD 9 Dodawanie + 10 Odejmowanie - 11 Porównania ,

Embed Size (px)

Citation preview

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 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) 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

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