1
J
ę
zyki programowania PLC
norma IEC 61131-3
C:= A AND NOT B;
A B C
-| |--|/|----------------( )
LD
A
ANDN
B
ST
C
AND
A C
B
Instruction List (IL)
Structured Text (ST)
Function Block Diagram (FBD)
Ladder Diagram (LD)
•
graficzne
•
tekstowe
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.
2
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
Step 3
Step 2 b
N Empty
Transition 1b
Transition 2b
Step 2 a N Empty
Transition 1a
Transition 2a
3
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:
•
L
adder
D
iagram (
LD
)
•
F
unction
B
lock
D
iagram (
FBD
)
•
S
tructured
T
ext (
ST
)
•
j
ę
zyk
C
– biblioteki z kompilatorem za darmo dostarczane
razem z Proficy ME
•
nie ma j
ę
zyka
I
nstruction
L
ist (
IL
)
Instruction List w sterownikach GE
Programowanie w IL – wymaga zarezerwowania pami
ę
ci na
akumulator i stos.
4
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
PT
zmienna
argument uaktywniany zboczem narastającym := akumulator, wartość
akumulatora nie ulega zmianie
NT
zmienna
argument uaktywniany zboczem opadającym := akumulator, wartość
akumulatora nie ulega zmianie
NOT
akumulator := NOT akumulator
AND
zmienna
akumulator := akumulator AND argument
ANDN
zmienna
akumulator := akumulator AND NOT argument
AND(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator AND zagnieżdżone wyrażenie logiczne,
otwarcie nawiasu powoduje złożenie bieżącej funkcji na stosie,
zamknięcie nawiasu powoduje pobranie ze stosu i wykonanie funkcji z
aktualnym stanem akumulatora
ANDN(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator AND NOT zagnieżdżone wyrażenie logiczne,
otwarcie nawiasu powoduje złożenie bieżącej funkcji na stosie,
zamknięcie nawiasu powoduje pobranie ze stosu i wykonanie funkcji z
aktualnym stanem akumulatora
5
Zestawienie funkcji binarnych
OR
zmienna
akumulator := akumulator OR argument
ORN
zmienna
akumulator := akumulator OR NOT argument
OR(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator OR zagnieżdżone wyrażenie logiczne, otwarcie
nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
ORN(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator OR NOT zagnieżdżone wyrażenie logiczne, otwarcie
nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
XOR
zmienna
akumulator := akumulator XOR argument
XORN
zmienna
akumulator := akumulator XOR NOT argument
XOR(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator XOR zagnieżdżone wyrażenie logiczne, otwarcie
nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
XORN(
zagnieżdżone
wyrażenie
logiczne
akumulator := akumulator XOR NOT zagnieżdżone wyrażenie logiczne, otwarcie
nawiasu powoduje złożenie bieżącej funkcji na stosie, zamknięcie nawiasu
powoduje pobranie ze stosu i wykonanie funkcji z aktualnym stanem akumulatora
Układy sekwencyjne – przykład 1.
6
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.
7
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
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
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
8
Odpowiedniki bloków funkcyjnych
blok funkcyjny
typ argumentów
ENO
opis
ADD_INT(in1, in2)
ADD_DINT(in1, in2)
ADD_REAL(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL
tak
akumulator:= in1 + in2
SUB_INT(in1, in2)
SUB_DINT(in1, in2)
SUB_REAL(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL
tak
akumulator:= in1 - in2
MUL_INT(in1, in2)
MUL_DINT(in1, in2)
MUL_REAL(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL
tak
akumulator:= in1 * in2
DIV_INT(in1, in2)
DIV_DINT(in1, in2)
DIV_REAL(in1, in2)
in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL
tak
akumulator:= in1 / in2
MOD_INT(in1, in2)
MOD_DINT(in1, in2)
in1: INT, DINT
in2: INT, DINT
akumulator: INT, DINT
tak
akumulator:= in1 modulo in2
(funkcja modulo czyli reszta
z dzielenia całkowitoliczbowego)
SCALE_INT(ihi, ilo, ohi, olo, in)
SCALE_WORD(ihi, ilo, ohi, olo, in)
ihi: INT lub WORD
ilo: INT lub WORD
ohi: INT lub WORD
olo: INT lub WORD
in: INT lub WORD
akumulator: INT lub WORD
tak
akumulator:= wartość po
przeskalowaniu
Ś
rednia arytmetyczna - przykład
9
Porównania – bloki funkcyjne
Operator
Typ argumentów
Opis
EQ_INT (in1, in2)
EQ_DINT (in1, in2)
EQ_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1 = in2)
NE_INT (in1, in2)
NE_DINT (in1, in2)
NE_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1
≠
in2)
GT_INT (in1, in2)
GT_DINT (in1, in2)
GT_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1 > in2)
GE_INT (in1, in2)
GE_DINT (in1, in2)
GE_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1
≥
in2)
LT_INT (in1, in2)
LT_DINT (in1, in2)
LT_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1 < in2)
LE_INT (in1, in2)
LE_DINT (in1, in2)
LE_REAL (in1, in2)
in1: INT, DINT, REAL
in2: INT, DINT, REAL
akumulator: BOOL
akumulator := (in1
≤
in2)
Porównania - funkcje asemblerowe
Operator
Argument
Opis
EQ
Zmienna lub stała
akumulator := (akumulator = argument)
akumulator typu BOOL
NE
Zmienna lub stała
akumulator := (akumulator
≠
argument)
akumulator typu BOOL
GT
Zmienna lub stała
akumulator := (akumulator > argument)
akumulator typu BOOL
GE
Zmienna lub stała
akumulator := (akumulator
≥
argument)
akumulator typu BOOL
LT
Zmienna lub stała
akumulator := (akumulator < argument)
akumulator typu BOOL
LE
Zmienna lub stała
akumulator := (akumulator
≤
argument)
akumulator typu BOOL
10
Sygnalizacja przekrocze
ń
Instrukcja skoku w LD
JUMPN - skok, LABELN - etykieta,
h
Skok w dół
h
Skok w gór
ę
(nie zalecany)
11
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
12
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
Odpowiednikiem parametru wyj
ś
ciowego
OK jest ENO (Enable Output)
i
Nie ma w j
ę
zyku IL odpowiednika parametru wej
ś
ciowego Enable,
mo
ż
na go zast
ą
pi
ć
przez RETCN lub JMPCN.
i
Rozwi
ą
zanie oparte na funkcjach asemblerowych:
−
bez sprawdzania, czy wyst
ą
pi dzielenie przez
zero,
−
nie wymaga rejestru pomocniczego ILORAZ.
13
Enable, Enable Output (ENO)
i
Je
ś
li b
ę
d
ą
nast
ę
pne szczeble, to zamiast RETCN trzeba u
ż
y
ć
JMPCN etykieta:
Przeka
ź
niki czasowe
Blok funkcyjny
Typ argumentów
ENO
Opis
TMR_TENTHS(address, PV)
TMR_HUNDS(address, PV)
TMR_THOUS(address, PV)
address: array 3
WORD
PV: INT
akumulator: BOOL
tak
akumulator = true, to zwi
ę
ksza CV
akumulator = false, to zeruje CV
ustawia akumulator:= true, gdy
CV
≥
PV
ONDTR_TENTHS(address, R, PV)
ONDTR_HUNDS(address, R, PV)
ONDTR_THOUS(address, R, PV)
address: array 3
WORD
R: BOOL
PV: INT
akumulator: BOOL
tak
akumulator = true, to zwi
ę
ksza CV
akumulator = false, to pami
ę
ta
ostatnie CV
ustawia akumulator:= true, gdy
CV
≥
PV
OFDT_TENTHS(address, PV)
OFDT_HUNDS(address, PV)
OFDT_THOUS(address, PV)
address: array 3
WORD
PV: INT
akumulator: BOOL
tak
akumulator = true, to zeruje CV
akumulator = false, to zwi
ę
ksza CV,
a
ż
CV=PV
ustawia akumulator:= true, gdy
CV<PV
14
Przeka
ź
niki czasowe - przykład
PLUCZ
POMPA
10 s
Timery nie wymagaj
ą
instrukcji skoku w celu
realizacji warunku Enable
J
ę
zyki LD i IL - kompatybilno
ść
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
ź
le
dobrze
•
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.
15
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 wska
ź
nika 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
16
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)