Języki programowania PLC
norma IEC 61131-3
Ladder Diagram (LD) Function Block Diagram (FBD)
" graficzne
A B C AND
-| |--|/|----------------( )
A C
B
" tekstowe
Structured Text (ST) Instruction List (IL)
LD A
C:= A AND NOT B; ANDN B
ST C
Function Block Diagram (FBD)
przemysł
chemiczny
" Język schematów blokowych jest odpowiednikiem schematów
przepływu sygnału dla obwodów logicznych przedstawionych w
formie połączonych bramek logicznych oraz bloków
funkcyjnych.
" Używany w aplikacjach, które korzystają z przepływów
informacji między elementami sterowania.
1
Tekst Strukturalny (Structured Text)
" Język algorytmiczny wysokiego poziomu;
" Najbardziej zalecany dla tych, którzy mają doświadczenie w
programowaniu językami wysokiego poziomu, przypomina
Pascala;
" Zawiera struktury takie, jak:
- iterację (REPEAT-UNTIL; WHILE-DO; FOR-TO-DO)
- działania warunkowe (IF-THEN-ELSE; CASE)
Seguential Function Chart (SFC)
" Graficzna metoda opisu sterowania procesami sekwencyjnymi
" Program składa się z kroków i warunków przejścia
" Znacznie upraszcza pisanie programu sterującego
" Wygodny do szybkiej diagnostyki
Step 1 N FILL
Transition 1b
Transition 1a
Step 2 a N Empty Step 2 b N Empty
Transition 2a Transition 2b
Step 3
2
Programowanie sterowników GE
Seria 90-30, VersaMax, VersaMax Micro i Nano:
" Ladder Diagram
" Instruction List
Seria 90-30 procesory 32-bitowe:
" język C biblioteki z kompilatorem trzeba oddzielnie kupić
Seria PACSystems:
" Ladder Diagram (LD)
" Function Block Diagram (FBD)
" Structured Text (ST)
" język C biblioteki z kompilatorem za darmo dostarczane
razem z Proficy ME
" nie ma języka Instruction List (IL)
Instruction List w sterownikach GE
Programowanie w IL wymaga zarezerwowania pamięci na
akumulator i stos.
3
Edycja programu
h Edytor kolorami odróżnia słowa kluczowe, zmienne, stałe i
komentarze.
h Komentarzem jest wszystko, co znajduje się za znakiem apostrofu.
Zestawienie funkcji binarnych
operator argument opis
LD_BOOL zmienna akumulator := argument
LDN_BOOL zmienna akumulator := NOT argument
ST_BOOL zmienna argument := akumulator, wartość akumulatora nie ulega zmianie
STN_BOOL zmienna argument := NOT akumulator, wartość akumulatora nie ulega zmianie
S zmienna argument SET := akumulator, wartość akumulatora nie ulega zmianie
R zmienna argument RESET := akumulator, wartość akumulatora nie ulega zmianie
argument uaktywniany zboczem narastającym := akumulator, wartość
PT zmienna
akumulatora nie ulega zmianie
argument uaktywniany zboczem opadającym := akumulator, wartość
NT zmienna
akumulatora nie ulega zmianie
NOT akumulator := NOT akumulator
AND zmienna akumulator := akumulator AND argument
ANDN zmienna akumulator := akumulator AND NOT argument
akumulator := akumulator AND zagnieżdżone wyrażenie logiczne,
zagnieżdżone
otwarcie nawiasu powoduje złożenie bieżącej funkcji na stosie,
AND( wyrażenie
zamknięcie nawiasu powoduje pobranie ze stosu i wykonanie funkcji z
logiczne
aktualnym stanem akumulatora
akumulator := akumulator AND NOT zagnieżdżone wyrażenie logiczne,
zagnieżdżone
otwarcie nawiasu powoduje złożenie bieżącej funkcji na stosie,
ANDN( wyrażenie
zamknięcie nawiasu powoduje pobranie ze stosu i wykonanie funkcji z
logiczne
aktualnym stanem akumulatora
4
Zestawienie funkcji binarnych
OR zmienna akumulator := akumulator OR argument
ORN zmienna akumulator := akumulator OR NOT argument
zagnieżdżone akumulator := akumulator OR zagnieżdżone wyrażenie logiczne, otwarcie
OR( wyrażenie nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
logiczne powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
zagnieżdżone akumulator := akumulator OR NOT zagnieżdżone wyrażenie logiczne, otwarcie
ORN( wyrażenie nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
logiczne powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
XOR zmienna akumulator := akumulator XOR argument
XORN zmienna akumulator := akumulator XOR NOT argument
zagnieżdżone akumulator := akumulator XOR zagnieżdżone wyrażenie logiczne, otwarcie
XOR( wyrażenie nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
logiczne powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
zagnieżdżone akumulator := akumulator XOR NOT zagnieżdżone wyrażenie logiczne, otwarcie
XORN( wyrażenie nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
logiczne powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
Układy sekwencyjne przykład 1.
5
Układy sekwencyjne - przykład 1.
Słowa kluczowe:
S
R
odpowiadają cewkom SETCOIL i RESETCOIL.
Są wykonywane, gdy akumulator == true.
Układy sekwencyjne - przykład 2.
6
Układy sekwencyjne - przykład 3.
h Słowa kluczowe:
PT
NT
odpowiadają cewkom
POSCOIL i NEGCOIL.
h Nie zmieniają stanu
akumulatora.
Działania na liczbach
h LD (Load) i ST (Store) obsługują następujące typy danych:
LD_BOOL, LDN_BOOL, LD_INT,
ST_BOOL, STN_BOOL, ST_INT, ST_WORD, ST_REAL, ST_DINT
operator argument opis
LD_INT zmienna lub stała akumulator := argument
LD_ENO brak akumulator := Enable Output
ST_INT zmienna argument := akumulator
ST_DINT zmienna argument := akumulator
ST_REAL zmienna argument := akumulator
ADD zmienna lub stała akumulator := akumulator + argument
SUB zmienna lub stała akumulator := akumulator argument
MUL zmienna lub stała akumulator := akumulator * argument
DIV zmienna lub stała akumulator := akumulator / argument
MOD zmienna lub stała akumulator := akumulator modulo argument
7
Odpowiedniki bloków funkcyjnych
blok funkcyjny typ argumentów ENO opis
ADD_INT(in1, in2) in1: INT, DINT lub REAL
ADD_DINT(in1, in2) in2: INT, DINT lub REAL tak akumulator:= in1 + in2
ADD_REAL(in1, in2) akumulator: INT, DINT lub REAL
SUB_INT(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL tak akumulator:= in1 - in2
SUB_DINT(in1, in2)
akumulator: INT, DINT lub REAL
SUB_REAL(in1, in2)
MUL_INT(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL tak akumulator:= in1 * in2
MUL_DINT(in1, in2)
akumulator: INT, DINT lub REAL
MUL_REAL(in1, in2)
DIV_INT(in1, in2)
in1: INT, DINT lub REAL
DIV_DINT(in1, in2)
in2: INT, DINT lub REAL tak akumulator:= in1 / in2
akumulator: INT, DINT lub REAL
DIV_REAL(in1, in2)
in1: INT, DINT akumulator:= in1 modulo in2
MOD_INT(in1, in2)
in2: INT, DINT tak (funkcja modulo czyli reszta
MOD_DINT(in1, in2)
akumulator: INT, DINT z dzielenia całkowitoliczbowego)
ihi: INT lub WORD
ilo: INT lub WORD
ohi: INT lub WORD
SCALE_INT(ihi, ilo, ohi, olo, in) akumulator:= wartość po
tak
SCALE_WORD(ihi, ilo, ohi, olo, in) przeskalowaniu
olo: INT lub WORD
in: INT lub WORD
akumulator: INT lub WORD
Średnia arytmetyczna - przykład
8
Porównania bloki funkcyjne
Operator Typ argumentów Opis
EQ_INT (in1, in2) in1: INT, DINT, REAL
EQ_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 = in2)
EQ_REAL (in1, in2) akumulator: BOOL
NE_INT (in1, in2) in1: INT, DINT, REAL
NE_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 `" in2)
NE_REAL (in1, in2) akumulator: BOOL
GT_INT (in1, in2) in1: INT, DINT, REAL
GT_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 > in2)
GT_REAL (in1, in2) akumulator: BOOL
GE_INT (in1, in2) in1: INT, DINT, REAL
GE_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 e" in2)
GE_REAL (in1, in2) akumulator: BOOL
LT_INT (in1, in2) in1: INT, DINT, REAL
LT_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 < in2)
LT_REAL (in1, in2) akumulator: BOOL
LE_INT (in1, in2) in1: INT, DINT, REAL
LE_DINT (in1, in2) in2: INT, DINT, REAL akumulator := (in1 d" in2)
LE_REAL (in1, in2) akumulator: BOOL
Porównania - funkcje asemblerowe
Operator Argument Opis
akumulator := (akumulator = argument)
EQ Zmienna lub stała
akumulator typu BOOL
akumulator := (akumulator `" argument)
NE Zmienna lub stała
akumulator typu BOOL
akumulator := (akumulator > argument)
GT Zmienna lub stała
akumulator typu BOOL
akumulator := (akumulator e" argument)
GE Zmienna lub stała
akumulator typu BOOL
akumulator := (akumulator < argument)
LT Zmienna lub stała
akumulator typu BOOL
akumulator := (akumulator d" argument)
LE Zmienna lub stała
akumulator typu BOOL
9
Sygnalizacja przekroczeń
Instrukcja skoku w LD
JUMPN - skok, LABELN - etykieta,
h Skok w dół
h Skok w górę (nie zalecany)
10
Power Up Mode
Funkcje sterujące
Operator Argument Opis
JMP etykieta bezwarunkowy skok do etykiety
JMPC etykieta skok do etykiety, jeżeli akumulator = 1
JMPCN etykieta skok do etykiety, jeżeli akumulator = 0
CAL Nazwa podprogramu Bezwarunkowe wywołanie podprogramu
CALC Nazwa podprogramu Wywołanie podprogramu, jeżeli akumulator = 1
CALCN Nazwa podprogramu Wywołanie podprogramu, jeżeli akumulator = 0
RET brak bezwarunkowy powrót z podprogramu
RETC brak powrót podprogramu, jeżeli akumulator = 1
RETCN brak powrót podprogramu, jeżeli akumulator = 0
11
Skok w IL
h Skoki można wykorzystać jako metodę rozgałęzień i decyzji
(odpowiednik IF THEN ELSE)
JMP etykieta: skok bezwarunkowy
JMPC etykieta: skok do etykiety, jeśli akumulator==true
JMPCN etykieta: skok do etykiety, jeśli akumulator==false
h Jeśli warunek nie jest spełniony, to program jest kontynuowany
od następnej po skoku instrukcji.
Enable, Enable Output (ENO)
i Nie ma w języku IL odpowiednika parametru wejściowego Enable,
można go zastąpić przez RETCN lub JMPCN.
i Odpowiednikiem parametru wyjściowego
OK jest ENO (Enable Output)
i Rozwiązanie oparte na funkcjach asemblerowych:
- bez sprawdzania, czy wystąpi dzielenie przez
zero,
- nie wymaga rejestru pomocniczego ILORAZ.
12
Enable, Enable Output (ENO)
i Jeśli będą następne szczeble, to zamiast RETCN trzeba użyć
JMPCN etykieta:
Przekazniki czasowe
Blok funkcyjny Typ argumentów ENO Opis
akumulator = true, to zwiększa CV
address: array 3
TMR_TENTHS(address, PV)
WORD akumulator = false, to zeruje CV
TMR_HUNDS(address, PV) tak
PV: INT
ustawia akumulator:= true, gdy
TMR_THOUS(address, PV)
akumulator: BOOL
CVe"PV
akumulator = true, to zwiększa CV
address: array 3
ONDTR_TENTHS(address, R, PV)
WORD akumulator = false, to pamięta
ONDTR_HUNDS(address, R, PV) R: BOOL tak ostatnie CV
PV: INT
ONDTR_THOUS(address, R, PV) ustawia akumulator:= true, gdy
akumulator: BOOL
CVe"PV
akumulator = true, to zeruje CV
address: array 3
OFDT_TENTHS(address, PV)
akumulator = false, to zwiększa CV,
WORD
OFDT_HUNDS(address, PV) tak aż CV=PV
PV: INT
OFDT_THOUS(address, PV) ustawia akumulator:= true, gdy
akumulator: BOOL
CV
13
Przekazniki czasowe - przykład
PLUCZ
POMPA
10 s
Timery nie wymagają
instrukcji skoku w celu
realizacji warunku Enable
Języki LD i IL - kompatybilność
" Programy w IL są wykonywane szybciej niż w języku drabinkowym
" Każdy program drabinkowy da się zapisać w języku IL, nie każdy
program w języku IL ma swój dokładny odpowiednik w LD.
" W Proficy ME nie ma możliwości konwersji do LD.
dobrze zle
i Niepełna kompatybilność języków programowania wynika z
różnego sposobu przetwarzania
i LD nie dopuszcza się do wprowadzania operacji logicznych w
obwodzie po operacjach przypisania
14
Języki LD i IL - kompatybilność
h Wykorzystanie własności równoległego przetwarzania w językach
graficznych poprzez łączenie jednego wejścia z większą liczbą
wyjść może wymagać przy tłumaczeniu na języki tekstowe
wprowadzenia dodatkowych zmiennych w celu uzyskania
kompatybilności programów.
Porównanie - język IL
h Zalety:
q język proceduralny, tzn. instrukcje są wykonywane jedna po
drugiej,
q wygodniejszy w procedurach zarządzania pamięcią lub przy
programowaniu obliczeń iteracyjnych, bardziej elastyczny,
q znajoma forma programu dla programujących w asemblerze,
q zwartość programu pozwalająca zmieścić na jednej stronie ekranu
złożone funkcje
h Wady:
q trudny do analizy znacznie mniejsza czytelność programu
q brak instrukcji iteracyjnych, trzeba je organizować przez
wprowadzenie wskaznika dla iteracji i wykorzystanie instrukcji
porównania lub skoków
q korzystanie z pośrednictwa akumulatora i stosu nie jest intuicyjne
q dostosowanie użytkownika do maszyny, a nie maszyny do
użytkownika
15
Porównanie - język LD
h Zalety:
q przetwarzanie przez przepływ sygnału ( prądu ), który może
być realizowany równolegle
q najodpowiedniejszy do programowania operacji logicznych
(algebra Boole a)
q łatwy do analizy
h Wady:
q stosowanie instrukcji skoku w językach graficznych stoi w
pewnej sprzeczności z zasadą równoległego przetwarzania
sygnału w obwodzie
q brak instrukcji dla obliczeń iteracyjnych (typu REPEAT,
WHILE, FOR)
16
Wyszukiwarka
Podobne podstrony:
Działania Na Liczbach Bilarnych
podst inf2 dzialana na liczbach dwojkowych
1 Działania na liczbach wymiernych i niewymiernych
Mat SP 4 6 Mat w nas kl 6 Kartkowki 1 Działania na liczbach nat (1)
dzialania na liczbach naturalnych
lab1 dzialania na liczbach
6 Realizacja przerzutników na PLC materiały wykładowe
zadania na układy sekwencyjne
2 Instrukcja do laboratorium układy sekwencyjne
Analiza?N Ocena dzialan na rzecz?zpieczenstwa energetycznego dostawy gazu listopad 09
6 Zapytania i działania na tabelach
PRZERZUTNIKI I UKŁADY SEKWENCYJNE
II gimnazjum działania na pierwiastkach KARTKÓWKA
więcej podobnych podstron