32
1
Wykład 10
Wykład 10
•
Język schematów funkcyjnych FBD
Język schematów funkcyjnych FBD
•
Uwagi wstępne,
Uwagi wstępne,
•
Graficzne elementy programu,
Graficzne elementy programu,
•
Uwagi o interpretacji programu,
Uwagi o interpretacji programu,
•
Przykład.
Przykład.
•
Język strukturalny wysokiego poziomu
Język strukturalny wysokiego poziomu
ST.
ST.
•
Uwagi wstępne,
Uwagi wstępne,
•
Instrukcje:
Instrukcje:
•
Instrukcja przypisania,
Instrukcja przypisania,
•
Wyrażenia,
Wyrażenia,
•
Instrukcje warunkowe,
Instrukcje warunkowe,
•
Pętle,
Pętle,
•
Wywoływanie funkcji i bloków
Wywoływanie funkcji i bloków
funkcyjnych.
funkcyjnych.
32
2
Język schematów funkcyjnych
Język schematów funkcyjnych
( FBD).
( FBD).
Uwagi wstępne.
Uwagi wstępne.
•
FBD jest językiem graficznym dedykowanym do
FBD jest językiem graficznym dedykowanym do
użytkowników przyzwyczajonych do schematów
użytkowników przyzwyczajonych do schematów
blokowych ( elektronicy, automatycy)
blokowych ( elektronicy, automatycy)
•
Jego rozpowszechnieni jest znacznie mniejsze, niż
Jego rozpowszechnieni jest znacznie mniejsze, niż
LD ( w GE FANUC nie jest stosowany, w SIEMENSIE
LD ( w GE FANUC nie jest stosowany, w SIEMENSIE
jest bardzo okrojony)
jest bardzo okrojony)
•
Program
w
FBD
ma
postać
bloków,
Program
w
FBD
ma
postać
bloków,
reprezentujących funkcje i instancje FB, połączonych
reprezentujących funkcje i instancje FB, połączonych
przepływami sygnałów.
przepływami sygnałów.
•
Szczegóły reprezentacji graficznej zależą od
Szczegóły reprezentacji graficznej zależą od
konkretnej platformy PLC.
konkretnej platformy PLC.
•
Ogólnie FBD jest bardzo podobny do LD:
Ogólnie FBD jest bardzo podobny do LD:
•
Program może być podzielony na obwody dla
Program może być podzielony na obwody dla
poprawy czytelności,
poprawy czytelności,
•
Użycie wejścia EN i wyjścia ENO jest także
Użycie wejścia EN i wyjścia ENO jest także
możliwe ( ale nie obowiązkowe)
możliwe ( ale nie obowiązkowe)
32
3
Główne elementy graficzne programu.
Główne elementy graficzne programu.
1.
1.
Przepływy sygnałów.
Przepływy sygnałów.
Przepływ sygnału jest reprezentowany przez
Przepływ sygnału jest reprezentowany przez
linię pionową lub poziomą, łączącą wyjście
linię pionową lub poziomą, łączącą wyjście
FC lub FB z wejściem innej funkcji lub bloku
FC lub FB z wejściem innej funkcji lub bloku
funkcyjnego. Jest to interpretowane jako
funkcyjnego. Jest to interpretowane jako
przepływ sygnału od wyjścia jednego bloku
przepływ sygnału od wyjścia jednego bloku
do wejścia innego:
do wejścia innego:
Linia pionowa i pozioma:
Linia pionowa i pozioma:
Połączenie przepływów:
Połączenie przepływów:
Skrzyżowanie
Skrzyżowanie
przepływów bez
przepływów bez
połączenia
połączenia
32
4
Narożniki przepływów:
Narożniki przepływów:
UWAGA:
UWAGA:
Norma nie wymaga przesyłania różnych
Norma nie wymaga przesyłania różnych
typów sygnałów ( logicznych i liczbowych)
typów sygnałów ( logicznych i liczbowych)
po różnych typach linii ( np. w różnych
po różnych typach linii ( np. w różnych
kolorach), ale w przypadkach rzeczywistych
kolorach), ale w przypadkach rzeczywistych
takie rozróżnienie występuje i znacznie
takie rozróżnienie występuje i znacznie
poprawia ono czytelność programu.
poprawia ono czytelność programu.
32
5
Bloki (funkcje i instancje FB) :
Bloki (funkcje i instancje FB) :
( EN )
( EN )
( ENO )
( ENO )
wejścia
wejścia
wyjścia
wyjścia
Uwagi
Uwagi
1. Użycie EN i ENO nie jest obowiązkowe,
1. Użycie EN i ENO nie jest obowiązkowe,
2. Ich interpretacja jest podobna, jak w LD (ale gdy nie
2. Ich interpretacja jest podobna, jak w LD (ale gdy nie
są podłączone do zmiennych logicznych, to EN jest
są podłączone do zmiennych logicznych, to EN jest
interpretowane tak, jakby na jego wejściu była „1”).
interpretowane tak, jakby na jego wejściu była „1”).
3. Norma nie opisuje jasno, co się dzieje z blokiem w
3. Norma nie opisuje jasno, co się dzieje z blokiem w
przypadku ustawienia EN na „0” (przypomnijmy –
przypadku ustawienia EN na „0” (przypomnijmy –
wejścia i wyjścia są połączone z innymi elementami!)
wejścia i wyjścia są połączone z innymi elementami!)
32
6
Negacja sygnałów boolowskich:
Negacja sygnałów boolowskich:
wejście
wejście
wyjście
wyjście
Postać równoważna – użycie funkcji NOT:
Postać równoważna – użycie funkcji NOT:
wejście
wejście
wyjście
wyjście
NOT
NOT
NOT
NOT
32
7
Konektory:
Konektory:
Realizują one funkcję skoku do podanej
Realizują one funkcję skoku do podanej
etykietki.
etykietki.
LABEL
LABEL
>
>
. . . . .
. . . . .
>
>
LABE
LABE
L
L
>
>
Uwagi
Uwagi
•
Konektor podłączony do wyjścia sygnału
Konektor podłączony do wyjścia sygnału
typu BOOL realizuje skok warunkowy.
typu BOOL realizuje skok warunkowy.
•
Norma IEC 1131 jest niejasna, jak się
Norma IEC 1131 jest niejasna, jak się
zachowuje część programu pominięta przez
zachowuje część programu pominięta przez
skok. Są dwie alternatywne interpretacje:
skok. Są dwie alternatywne interpretacje:
1.
1.
Część ta nie jest wykonywana,
Część ta nie jest wykonywana,
2.
2.
Cały
program
jest
wykonany
Cały
program
jest
wykonany
przed
przed
realizacją skoku.
realizacją skoku.
Wniosek ogólny: użycie skoków jest
Wniosek ogólny: użycie skoków jest
nie
nie
zalecane.
zalecane.
32
8
Fundamentalna zasada:
Fundamentalna zasada:
Typowo, program w FBD jest wykonywany w
Typowo, program w FBD jest wykonywany w
tej
samej
kolejności,
w
jakiej
został
tej
samej
kolejności,
w
jakiej
został
narysowany:
narysowany:
•
Od góry do dołu,
Od góry do dołu,
•
W obrębie obwodu: od lewej do prawej
W obrębie obwodu: od lewej do prawej
strony.
strony.
Ta
kolejność
może
być
zmieniona
wyłącznie przez skoki.
Interpretacja programu.
Interpretacja programu.
Ogólnie, interpretacja programu jest b.
Ogólnie, interpretacja programu jest b.
podobna do LD, różnica jest taka, że
podobna do LD, różnica jest taka, że
wszystkie funkcje są reprezentowane przez
wszystkie funkcje są reprezentowane przez
bloki i wszystkie bloki muszą być podłączone
bloki i wszystkie bloki muszą być podłączone
do przepływów sygnałów.
do przepływów sygnałów.
32
9
Dodatkowe reguły wykonania programu ( identyczne,
Dodatkowe reguły wykonania programu ( identyczne,
jak w LD):
jak w LD):
1.
1.
Wykonanie każdego elementu obwodu
Wykonanie każdego elementu obwodu
( funkcji lub instancji FB) nie jest
( funkcji lub instancji FB) nie jest
zakończone
dopóki
nie
wyznaczono
zakończone
dopóki
nie
wyznaczono
wartości wszystkich jego wyjść,
wartości wszystkich jego wyjść,
2.
2.
Wykonanie
całego
obwodu
nie
jest
Wykonanie
całego
obwodu
nie
jest
zakończone,
dopóki
nie
wyznaczono
zakończone,
dopóki
nie
wyznaczono
wszystkich wyjść z tego obwodu,
wszystkich wyjść z tego obwodu,
3.
3.
Wykonanie dowolnego elementu obwodu
Wykonanie dowolnego elementu obwodu
nie może się rozpocząć dopóki nie
nie może się rozpocząć dopóki nie
zdefiniowano wszystkich jego wejść.
zdefiniowano wszystkich jego wejść.
4.
4.
Podczas transferu danych z jednego
Podczas transferu danych z jednego
obwodu do innego wartości wszystkich
obwodu do innego wartości wszystkich
danych powinny być wyznaczone w tym
danych powinny być wyznaczone w tym
samym rozwiązaniu obwodu ( w tym
samym rozwiązaniu obwodu ( w tym
samym
cyklu
programowym).
Start
samym
cyklu
programowym).
Start
drugiego
obwodu
powinien
nastąpić
drugiego
obwodu
powinien
nastąpić
dopiero po transferze wszystkich danych.
dopiero po transferze wszystkich danych.
32
10
Realizacja sprzężenia zwrotnego:
Realizacja sprzężenia zwrotnego:
W tym wypadku obowiązują te same uwagi,
W tym wypadku obowiązują te same uwagi,
co w przypadku języka LD:
co w przypadku języka LD:
•
Dokładna realizacja sprzężenia zwrotnego
Dokładna realizacja sprzężenia zwrotnego
nie jest możliwa,
nie jest możliwa,
•
Wykonanie programu generuje dodatkowy
Wykonanie programu generuje dodatkowy
element opóźniający.
element opóźniający.
32
11
Przykład.
Przykład.
Należy
zbudować
blok
funkcyjny
realizujący
Należy
zbudować
blok
funkcyjny
realizujący
otwieranie/zamykanie bramy lub zasuwy:
otwieranie/zamykanie bramy lub zasuwy:
•
Sygnał otwarcia/zamknięcia generuje sygnał dla
Sygnał otwarcia/zamknięcia generuje sygnał dla
napędu,
napędu,
•
Osiągnięcie żądanej pozycji jest potwierdzane
Osiągnięcie żądanej pozycji jest potwierdzane
sygnałem z wyłącznika krańcowego,
sygnałem z wyłącznika krańcowego,
•
Czas otwarcia i zamknięcia jest ten sam. Wartość
Czas otwarcia i zamknięcia jest ten sam. Wartość
tego czasu ma być sprawdzana w celu sprawdzenia
tego czasu ma być sprawdzana w celu sprawdzenia
poprawności działania układu.
poprawności działania układu.
•
Sytuacja, gdy po zadanym maksymalnym czasie od
Sytuacja, gdy po zadanym maksymalnym czasie od
załączenia
napędu
nie
przyjdzie
sygnał
z
załączenia
napędu
nie
przyjdzie
sygnał
z
odpowiedniego
wyłącznika
krańcowego,
jest
odpowiedniego
wyłącznika
krańcowego,
jest
interpretowana jako awaria ( np. zablokowanie
interpretowana jako awaria ( np. zablokowanie
bramy) i musi zasygnalizowana odpowiednim
bramy) i musi zasygnalizowana odpowiednim
sygnałem binarnym.
sygnałem binarnym.
32
12
Parametry wejściowe:
Parametry wejściowe:
ReqOpen – żądanie otwarcia,
ReqOpen – żądanie otwarcia,
ReqClose
–
żądanie
ReqClose
–
żądanie
zamknięcia,
zamknięcia,
OpenLS – sygnał z wył krańc.
OpenLS – sygnał z wył krańc.
otwarcia,
otwarcia,
CLoseLS – sygnał z wył krańc
CLoseLS – sygnał z wył krańc
.
.
zamknięcia
zamknięcia
,
,
MoveTime
–
czas
MoveTime
–
czas
otwarcia/zamknięcia.
otwarcia/zamknięcia.
Parametry wyjściowe:
Parametry wyjściowe:
Open
–
sygnał
napędu
Open
–
sygnał
napędu
otwarcia,
otwarcia,
CLose
–
sygnał
napędu
CLose
–
sygnał
napędu
zamknięcia,
zamknięcia,
Alarm – sygnał alarmowy,
Alarm – sygnał alarmowy,
uruchamiany w przypadku,
uruchamiany w przypadku,
gdy czas ruchu jest dłuższy,
gdy czas ruchu jest dłuższy,
niż
maksymalna
założona
niż
maksymalna
założona
wartość.
wartość.
ReqOpen
ReqOpen
ReqClose
ReqClose
OpenLS
OpenLS
CLoseLS
CLoseLS
MoveTime
MoveTime
Open
Open
Close
Close
Alarm
Alarm
GATE
GATE
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
BOOL
TIME
TIME
32
13
RS
RS
S
S
R1
R1
Q
Q
TON
TON
IN
IN
PT
PT
Q
Q
OR
OR
NOT
NOT
AND
AND
AND
AND
ReqOpen
ReqOpen
ReqClose
ReqClose
Open
Open
Close
Close
Alarm
Alarm
OpenLS
OpenLS
CloseLS
CloseLS
MoveTime
MoveTime
Realizacja bloku z użyciem języka FBD:
Realizacja bloku z użyciem języka FBD:
32
14
Język Tekst Strukturalny (
Język Tekst Strukturalny (
S
S
tructured
tructured
T
T
ext )
ext )
( STEP 7 SCL – SIEMENS)
( STEP 7 SCL – SIEMENS)
Uwagi wstępne.
Uwagi wstępne.
•
ST jest językiem wysokiego poziomu, bardzo
ST jest językiem wysokiego poziomu, bardzo
podobnym do PASCALa, ale ściśle dostosowanym do
podobnym do PASCALa, ale ściśle dostosowanym do
użycia w systemach PLC.
użycia w systemach PLC.
•
Część programu (lub cały program) napisana w ST
Część programu (lub cały program) napisana w ST
musi być
musi być
zawsze
zawsze
kompilowana do postaci IL.
kompilowana do postaci IL.
•
Norma nie definiuje maksymalnej długości wyrażeń,
Norma nie definiuje maksymalnej długości wyrażeń,
ilości opcji w instrukcji CASE, itp, ale w konkretnych
ilości opcji w instrukcji CASE, itp, ale w konkretnych
praktycznych sytuacjach takie ograniczenia mogą się
praktycznych sytuacjach takie ograniczenia mogą się
pojawić.
pojawić.
•
Wersja
wykonywalna
(FC,
instancja
FB)
jest
Wersja
wykonywalna
(FC,
instancja
FB)
jest
reprezentowana jako blok w językach graficznych, a w
reprezentowana jako blok w językach graficznych, a w
językach tekstowych jest reprezentowana przez swoją
językach tekstowych jest reprezentowana przez swoją
nazwę ( która jest zachowywana po kompilacji)
nazwę ( która jest zachowywana po kompilacji)
•
Do pamięci PLC w większości przypadków jest
Do pamięci PLC w większości przypadków jest
ładowana
wyłącznie
wersja
wykonywalna
ładowana
wyłącznie
wersja
wykonywalna
( skompilowana), a nie jest ładowany plik źródłowy
( skompilowana), a nie jest ładowany plik źródłowy
programu.
programu.
•
Język ten jest szczególnie wygodny i zalecany do
Język ten jest szczególnie wygodny i zalecany do
realizacji złożonych operacji arytmetycznych i pętli.
realizacji złożonych operacji arytmetycznych i pętli.
32
15
Instrukcje przypisania.
Instrukcje przypisania.
Postać ogólna:
Postać ogólna:
X := Y;
X := Y;
Gdzie:
Gdzie:
X – zmienna (
X – zmienna (
prosta lub
prosta lub
złożona)
złożona)
Y – może być:
Y – może być:
- stałą,
- stałą,
- zmienną,
- zmienną,
- wyrażeniem.
- wyrażeniem.
Uwagi:
Uwagi:
•
Dane po obu stronach muszą być tego samego
Dane po obu stronach muszą być tego samego
typu,
typu,
•
Niespójność typów jest wykrywana przez
Niespójność typów jest wykrywana przez
kompilator i podawana jako błąd.
kompilator i podawana jako błąd.
•
Wyrażenie po prawej stronie może być proste
Wyrażenie po prawej stronie może być proste
lub złożone ( nawet o dużym stopniu
lub złożone ( nawet o dużym stopniu
złożoności).
złożoności).
32
16
Wyrażenia.
Wyrażenia.
•
Wyrażenia
są
używane
do
wyliczania
Wyrażenia
są
używane
do
wyliczania
wartości zmiennych z użyciem: operatorów,
wartości zmiennych z użyciem: operatorów,
innych zmiennych, stałych i wywołań funkcji.
innych zmiennych, stałych i wywołań funkcji.
•
Wyrażenie zawsze daje wynik określonego
Wyrażenie zawsze daje wynik określonego
typu,
typu,
•
Wyrażenie złożone może być zbudowane z
Wyrażenie złożone może być zbudowane z
użyciem wyrażeń prostszych.
użyciem wyrażeń prostszych.
•
Kolejność rozwiązywania wyrażeń zależy od
Kolejność rozwiązywania wyrażeń zależy od
hierarchii użytych operatorów i mniejszych
hierarchii użytych operatorów i mniejszych
„podwyrażeń” .
„podwyrażeń” .
•
Podczas przepisywania jednej tablicy do
Podczas przepisywania jednej tablicy do
innej dostęp do elementów tych tablic
innej dostęp do elementów tych tablic
powinien być możliwy dopiero po zakończeniu
powinien być możliwy dopiero po zakończeniu
operacji i nie powinien być możliwy w trakcie.
operacji i nie powinien być możliwy w trakcie.
32
17
Operatory i ich hierarchia.
Operatory i ich hierarchia.
Operator
Operator
Opis
Opis
Priorytet
Priorytet
(...)
(...)
Nawiasy
Nawiasy
Najwyższy
Najwyższy
F(...)
F(...)
Wywołanie FC , instancji FB
Wywołanie FC , instancji FB
**
**
potęgowanie
potęgowanie
-
-
NOT
NOT
negacja
negacja
Negacja boolowska
Negacja boolowska
*
*
/
/
MOD
MOD
Mnożenie,
Mnożenie,
Dzielenie,
Dzielenie,
Dzielenie modulo ( z resztą)
Dzielenie modulo ( z resztą)
+
+
-
-
Dodawanie,
Dodawanie,
Odejmowanie
Odejmowanie
<,>,<=,>=
<,>,<=,>=
Operacje porównania,
Operacje porównania,
=
=
<>
<>
równość
równość
nierówność
nierówność
AND, &
AND, &
AND boolowski,
AND boolowski,
XOR
XOR
XOR boolowski,
XOR boolowski,
OR
OR
OR boolowski
OR boolowski
Najniższy
Najniższy
32
18
Reguły rozwiązywania wyrażeń:
Reguły rozwiązywania wyrażeń:
•
Kolejność
rozwiązywania
wyrażeń
jest
Kolejność
rozwiązywania
wyrażeń
jest
określona przez hierarchię operatorów.
określona przez hierarchię operatorów.
•
Operatory o tym samym priorytecie są
Operatory o tym samym priorytecie są
rozwiązywane od strony lewej do prawej.
rozwiązywane od strony lewej do prawej.
•
Wyrażenie jest rozwiązywane dopóty, dopóki
Wyrażenie jest rozwiązywane dopóty, dopóki
nie można jednoznacznie określić jego wyniku,
nie można jednoznacznie określić jego wyniku,
jeżeli można, reszta nie jest już rozwiązywana,
jeżeli można, reszta nie jest już rozwiązywana,
np.
np.
X:= A & B & C & (D OR E ) & NOT F;
X:= A & B & C & (D OR E ) & NOT F;
jeżeli A będzie równa „0”, to wynik jest
jeżeli A będzie równa „0”, to wynik jest
natychmiast ustawiany na „0” i reszta nie jest
natychmiast ustawiany na „0” i reszta nie jest
już dalej obliczana.
już dalej obliczana.
32
19
Przykłady wyrażeń:
Przykłady wyrażeń:
Rate:= 13.5; // wyrażenie proste
Rate:= 13.5; // wyrażenie proste
SP:=MW8; // wyrażenie proste
SP:=MW8; // wyrażenie proste
ERR:=SP – In_Scal(PIW272); //
ERR:=SP – In_Scal(PIW272); //
wyrażenie z
wyrażenie z
wywołaniem funkcji,
wywołaniem funkcji,
PV:= Sensor.value+ Factor[n+1]; //
PV:= Sensor.value+ Factor[n+1]; //
wyrażenie
wyrażenie
złożone
złożone
A[k+1]:= a11+ SQRT( G+1.2); //
A[k+1]:= a11+ SQRT( G+1.2); //
użycie elementu
użycie elementu
tablicy
tablicy
32
20
Instrukcje warunkowe.
Instrukcje warunkowe.
If ...then ...else
If ...then ...else
IF <
IF <
wyrażenie boolowskie
wyrażenie boolowskie
> THEN
> THEN
<
<
instrukcje wykonywane przy
instrukcje wykonywane przy
TRUE
TRUE
>
>
ELSE
ELSE
<
<
instrukcje wykonywane przy
instrukcje wykonywane przy
FALSE
FALSE
>
>
END_IF;
END_IF;
Przykład:
Przykład:
IF PV > SP THEN // Regulator II
IF PV > SP THEN // Regulator II
położeniowy
położeniowy
CV:=15.0 ;
CV:=15.0 ;
ELSE
ELSE
CV:=85.0 ;
CV:=85.0 ;
END_IF;
END_IF;
IF < wyrażenie boolowskie
IF < wyrażenie boolowskie
>
>
THEN
THEN
<
<
instrukcje wykonywane przy
instrukcje wykonywane przy
TRUE
TRUE
>
>
END_IF;
END_IF;
Część z „else” może być pominięta:
Część z „else” może być pominięta:
Przykład:
Przykład:
IF Temp > Temp_Max
IF Temp > Temp_Max
THEN
THEN
Temp_High:=
Temp_High:=
TRUE;
TRUE;
END_IF;
END_IF;
32
21
IF <wyrażenie boolowskie> THEN
IF <wyrażenie boolowskie> THEN
<instrukcje...>
<instrukcje...>
ELSIF < wyrażenie boolowskie
ELSIF < wyrażenie boolowskie
>
>
THEN
THEN
<instrukcje...>
<instrukcje...>
ELSIF <wyrażenie boolowskie>
ELSIF <wyrażenie boolowskie>
THEN
THEN
<instrukcje...>
<instrukcje...>
ELSIF <wyrażenie boolowskie>
ELSIF <wyrażenie boolowskie>
THEN
THEN
<instrukcje...>
<instrukcje...>
.....
.....
ELSE
ELSE
<instrukcje...>
<instrukcje...>
END_IF;
END_IF;
Do budowy bardziej złożonych wyrażeń można użyć
Do budowy bardziej złożonych wyrażeń można użyć
dodatkowo ELSIF:
dodatkowo ELSIF:
Postać ogólna:
Postać ogólna:
Przykład:
Przykład:
IF A > B THEN
IF A > B THEN
D:=1;
D:=1;
ELSIF A=B+2
ELSIF A=B+2
THEN
THEN
D:=2;
D:=2;
ELSIF A:=B-3
ELSIF A:=B-3
THEN
THEN
D:=4;
D:=4;
ELSE
ELSE
D:=3;
D:=3;
END_IF;
END_IF;
32
22
case
case
Ta konstrukcja pozwala na wykonywanie grup instrukcji
Ta konstrukcja pozwala na wykonywanie grup instrukcji
w zależności od wartości zmiennej lub wyrażenia typu
w zależności od wartości zmiennej lub wyrażenia typu
INT. Norma pozwala także na użycie jako wskaźnika
INT. Norma pozwala także na użycie jako wskaźnika
zmiennej typu wyliczeniowego ( o ile jest ona
zmiennej typu wyliczeniowego ( o ile jest ona
dopuszczona do użycia na danym sprzęcie)
dopuszczona do użycia na danym sprzęcie)
Ogólny format
Ogólny format
instrukcji:
instrukcji:
CASE <zmienna lub
CASE <zmienna lub
wyrażenie typu INT
wyrażenie typu INT
>
>
OF
OF
<wartość 1>: <
<wartość 1>: <
instrukcje
instrukcje
>
>
........
........
<wartość n>: <
<wartość n>: <
instrukcje
instrukcje
>
>
ELSE
ELSE
<instrukcje>
<instrukcje>
END_CASE;
END_CASE;
32
23
Przykłady:
Przykłady:
CASE speed_set OF
CASE speed_set OF
1: speed:= 10.0;
1: speed:= 10.0;
2: speed:=20.4;
2: speed:=20.4;
3: speed:=30.0; fan1:=ON;
3: speed:=30.0; fan1:=ON;
4,5: speed:= 50.0;
4,5: speed:= 50.0;
fan2:=ON;
fan2:=ON;
6..10: speed:=60.0;
6..10: speed:=60.0;
water:=ON;
water:=ON;
ELSE
ELSE
speed:=0.0;
speed:=0.0;
SpeedFault:=TRUE;
SpeedFault:=TRUE;
END_CASE;
END_CASE;
1. Użycie zmiennej typu INT jako wskaźnika:
1. Użycie zmiennej typu INT jako wskaźnika:
32
24
TYPE
TYPE
SPEED: (STOP,SLOW,MEDIUM,FAST)
SPEED: (STOP,SLOW,MEDIUM,FAST)
END_TYPE
END_TYPE
...
...
VAR
VAR
pump_speed:SPEED;
pump_speed:SPEED;
END_VAR
END_VAR
....
....
CASE pump_speed OF
CASE pump_speed OF
STOP: speed:= 0.0;
STOP: speed:= 0.0;
SLOW: speed:=10.0;
SLOW: speed:=10.0;
MEDIUM: speed:=50.0;
MEDIUM: speed:=50.0;
FAST: speed:= 100.0;
FAST: speed:= 100.0;
ELSE
ELSE
speed:=0.0; SpeedFault:=TRUE;
speed:=0.0; SpeedFault:=TRUE;
END_CASE;
END_CASE;
2. Użycie zmiennej wyliczeniowej jako wskaźnika:
2. Użycie zmiennej wyliczeniowej jako wskaźnika:
32
25
Pętle
Pętle
•
Pętle są konstrukcją trudną w realizacji z
Pętle są konstrukcją trudną w realizacji z
użyciem innych języków,
użyciem innych języków,
•
Ważne jest, aby nie zbudować pętli „bez
Ważne jest, aby nie zbudować pętli „bez
końca”,
końca”,
•
Wykonanie programu nie jest kontynuowane
Wykonanie programu nie jest kontynuowane
dopóty, dopóki pętla nie zostanie zakończona,
dopóty, dopóki pętla nie zostanie zakończona,
•
Użycie pętli może znacznie wydłużyć czas
Użycie pętli może znacznie wydłużyć czas
cyklu i czas odpowiedzi układu.
cyklu i czas odpowiedzi układu.
Pętla FOR..DO:
Pętla FOR..DO:
•
Używana do wykonania określonego
Używana do wykonania określonego
zbioru instrukcji określoną ilość razy.
zbioru instrukcji określoną ilość razy.
•
Warunek
jest
sprawdzany
przed
Warunek
jest
sprawdzany
przed
wykonaniem pętli ( czyli może ona nie być
wykonaniem pętli ( czyli może ona nie być
wykonana ani jeden raz).
wykonana ani jeden raz).
32
26
Ogólna postać:
Ogólna postać:
FOR <inicjalizacja zmiennej wskaźnikowej> TO< wartość końcowa> BY
FOR <inicjalizacja zmiennej wskaźnikowej> TO< wartość końcowa> BY
<inkrementacja zmiennej> DO
<inkrementacja zmiennej> DO
<instrukcje>
<instrukcje>
END_FOR;
END_FOR;
Uwagi:
Uwagi:
•
Nie
powinno
się
modyfikować
wartości
Nie
powinno
się
modyfikować
wartości
końcowej
lub
inkrementacji
zmiennej
końcowej
lub
inkrementacji
zmiennej
wskaźnikowej
wskaźnikowej
wewnątrz
wewnątrz
pętli.
pętli.
•
Inkrementacja może być dodatnia lub ujemna,
Inkrementacja może być dodatnia lub ujemna,
może też być pominięta ( wtedy domyślnie jest
może też być pominięta ( wtedy domyślnie jest
ustawiana na 1).
ustawiana na 1).
Przykład:
Przykład:
FOR i:= 100 TO 1 BY –1 DO
FOR i:= 100 TO 1 BY –1 DO
channel[I] := sensor.signal[I];
channel[I] := sensor.signal[I];
END_FOR;
END_FOR;
32
27
WHILE..DO:
WHILE..DO:
•
Jest
stosowana
do
powtarzalnego
Jest
stosowana
do
powtarzalnego
wykonywania
określonego
zbioru
wykonywania
określonego
zbioru
instrukcji dopóty, dopóki zmienna lub
instrukcji dopóty, dopóki zmienna lub
wyrażenie
boolowskie
jest
prawdą
wyrażenie
boolowskie
jest
prawdą
logiczną.
logiczną.
•
Wartość wyrażenia wskaźnikowego jest
Wartość wyrażenia wskaźnikowego jest
testowana przed wykonaniem pętli.
testowana przed wykonaniem pętli.
Ogólna postać:
Ogólna postać:
WHILE <wyrażenie boolowskie> DO
WHILE <wyrażenie boolowskie> DO
<instrukcje>
<instrukcje>
END_WHILE;
END_WHILE;
Przykład:
Przykład:
WHILE x < xmax-10.0 DO
WHILE x < xmax-10.0 DO
x:=x+5.0*input_1;
x:=x+5.0*input_1;
END_WHILE;
END_WHILE;
32
28
REPEAT…UNTIL
REPEAT…UNTIL
Pozwala na wykonanie zestawu instrukcji
Pozwala na wykonanie zestawu instrukcji
dopóty, dopóki wyrażenie boolowskie jest
dopóty, dopóki wyrażenie boolowskie jest
prawdą. Wyrażenie jest sprawdzane po
prawdą. Wyrażenie jest sprawdzane po
wykonaniu pętli ( czyli musi ona być
wykonaniu pętli ( czyli musi ona być
wykonana co najmniej jeden raz).
wykonana co najmniej jeden raz).
Ogólna postać:
Ogólna postać:
REPEAT
REPEAT
<instrukcje>
<instrukcje>
UNTIL <wyrażenie boolowskie>
UNTIL <wyrażenie boolowskie>
END_REPEAT;
END_REPEAT;
Przykład:
Przykład:
n:=0;
n:=0;
REPEAT
REPEAT
n:=n+1;
n:=n+1;
UNTIL n > 4
UNTIL n > 4
END_REPEAT
END_REPEAT
;
;
32
29
EXIT
EXIT
Może być użyta wewnątrz pętli do „wyskoczenia” z niej.
Może być użyta wewnątrz pętli do „wyskoczenia” z niej.
Dla pętli zagnieżdżonych pozwala na „wyskok” tylko o
Dla pętli zagnieżdżonych pozwala na „wyskok” tylko o
jeden poziom.
jeden poziom.
RETURN
RETURN
Może być ( ale nie musi) używana wewnątrz FC i FB do
Może być ( ale nie musi) używana wewnątrz FC i FB do
ich zakończenia, np. warunkowego. W takiej sytuacji
ich zakończenia, np. warunkowego. W takiej sytuacji
należy zwracać uwagę na czytelność programu
należy zwracać uwagę na czytelność programu
Wywoływanie funkcji
Wywoływanie funkcji
Przykład:
Przykład:
VAR
VAR
...
...
PV_real: REAL;
PV_real: REAL;
...
...
END_VAR
END_VAR
...
...
PV_real:=WORD_TO_REAL(in:=PIW272);
PV_real:=WORD_TO_REAL(in:=PIW272);
32
30
Przykład:
Przykład:
Parametry wejściowe:
Parametry wejściowe:
PV:REAL – zmienna procesowa,
PV:REAL – zmienna procesowa,
SP : REAL – wartość zadana
SP : REAL – wartość zadana
Run – ustawia regulator na tryb
Run – ustawia regulator na tryb
„RUN” wartość domyślna to „1” .
„RUN” wartość domyślna to „1” .
Jeśli Run jest „0”, regulator jest w
Jeśli Run jest „0”, regulator jest w
stanie STOP.
stanie STOP.
Parametry wyjściowe:
Parametry wyjściowe:
CV : REAL – sygnał sterowania,
CV : REAL – sygnał sterowania,
Run: BOOL – jest ustawiany na „1”
Run: BOOL – jest ustawiany na „1”
jeśli jest aktywny tryb „AUTO”
jeśli jest aktywny tryb „AUTO”
( automatyczny)
( automatyczny)
Contro
Contro
l
l
PV
PV
SP
SP
CV
CV
run
run
Run
Run
Wywoływanie bloków funkcyjnych
Wywoływanie bloków funkcyjnych
Użycie FB w ST składa się z 3 etapów:
Użycie FB w ST składa się z 3 etapów:
1.
1.
Zadeklarowanie instancji FB,
Zadeklarowanie instancji FB,
2.
2.
Wywołanie instancji,
Wywołanie instancji,
3.
3.
Zapis wyników wykonania tej instancji.
Zapis wyników wykonania tej instancji.
32
31
VAR
VAR
....
....
Loop1: Control; //deklaracja instancji FB
Loop1: Control; //deklaracja instancji FB
...
...
Temp_1,SP_1: REAL;
Temp_1,SP_1: REAL;
Power_1:REAL;
Power_1:REAL;
Run_1:BOOL;
Run_1:BOOL;
...
...
END_VAR
END_VAR
........
........
// wywołanie z domyślną wartością „Run”:
// wywołanie z domyślną wartością „Run”:
Loop1(PV:=Temp_1,SP:=SP1);
Loop1(PV:=Temp_1,SP:=SP1);
// zapis wyników wykonania instancji:
// zapis wyników wykonania instancji:
Power_1:=Loop1.CV;
Power_1:=Loop1.CV;
Run_1:=Loop1.Run;
Run_1:=Loop1.Run;
...
...
//Równoważna forma wywołania ( opisana w normie,
//Równoważna forma wywołania ( opisana w normie,
ale nie
ale nie
// dostępna w SIEMENSie )
// dostępna w SIEMENSie )
Loop1(PV:=Temp_1,SP:=SP1,
Loop1(PV:=Temp_1,SP:=SP1,
CV=>Power,Run=>Run_1);
CV=>Power,Run=>Run_1);
32
32
Uwagi końcowe
Uwagi końcowe
•
ST może być użyty do budowy każdego
ST może być użyty do budowy każdego
programu na PLC, ale jego użycie jest
programu na PLC, ale jego użycie jest
szczególnie zalecane do realizacji złożonych
szczególnie zalecane do realizacji złożonych
operacji matematycznych i pętli.
operacji matematycznych i pętli.
•
Nie każdy system PLC posiada ten język.
Nie każdy system PLC posiada ten język.
•
Własności „real time” oprogramowania
Własności „real time” oprogramowania
napisanego w ST są tak samo dobre, jak w
napisanego w ST są tak samo dobre, jak w
IL ( dlaczego?) .
IL ( dlaczego?) .
•
W tym języku możemy używać wszystkich
W tym języku możemy używać wszystkich
standardowych funkcji bloków funkcyjnych.
standardowych funkcji bloków funkcyjnych.