You are on page 1of 70

Perfection in Automation

B&R
Automation Basic
Opis jzyka
Document version: 1.0 PL

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Spis treci:
1. Wstp ...........................................................................................................3
1.1. Typy, operatory i wyraenia ....................................................................................... 3
1.1.1. ZMIENNE, NAZWY........................................................................................................................... 4
1.1.2. PROSTE TYPY DANYCH................................................................................................................. 5

1.2. Stae......................................................................................................................... 10
1.3. Deklaracje ................................................................................................................ 10
1.4. Operatory arytmetyczne........................................................................................... 10
1.5. Operatory warunkowe .............................................................................................. 11
1.6. Operatory binarne i logiczne .................................................................................... 11
1.7. Sowa kluczowe B&R Automation Basic .................................................................. 13
1.8. Konwersje typw ...................................................................................................... 17
1.8.1. KONWERSJA NIEJAWNA.............................................................................................................. 17
1.8.2. KONWERSJA JAWNA.................................................................................................................... 19

1.9. Nadrzdno i kolejno wykonywania dziaa........................................................ 21

2. Kontrola wykonywania programu ...........................................................23


2.1. Proste wyraenia, bloki wyrae .............................................................................. 23
2.2. Wyraenie if ............................................................................................................. 24
2.2.1. IF ..................................................................................................................................................... 24
2.2.2. ELSE ............................................................................................................................................... 26
2.2.3. ELSE IF.......................................................................................................................................... 29

2.2. Wyraenie case........................................................................................................ 32


2.3. Ptle......................................................................................................................... 34
2.3.1. LOOP TO DO .................................................................................................................... 34
2.3.2. LOOP DOWNTO DO ............................................................................................................. 36
2.3.3. WARUNKOWE WYJCIE Z PTLI ................................................................................................ 36

2.3. Praca krokowa select ............................................................................................... 38


2.4. Wyraenie goto ........................................................................................................ 43

3. Wskaniki i zoone typy danych ............................................................44


3.1. Tablice ..................................................................................................................... 45
3.2. acuchy znakw..................................................................................................... 47
3.3. Struktury................................................................................................................... 47
3.4. Adresy...................................................................................................................... 51
3.5. Wskaniki ................................................................................................................. 53

4. Funkcje i struktura programu..................................................................60


4.1. Funkcje .................................................................................................................... 60
4.2. Typy Funkcji ............................................................................................................. 63
4.2.1. FUNKCJE INLINE ........................................................................................................................ 63
4.2.2. BLOKI FUNKCYJNE....................................................................................................................... 64
4.2.3. BLOKI FUNKCYJNE D-I-Y ............................................................................................................. 66

4.2. Struktura Programu.................................................................................................. 69

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1. Wstp
Aby pomc Ci przyswoi jzyk B&R Automation Basic (AB), poniej przedstawiony jest jego opis i
charakterystyka.
W systemie pomocy B&R Automation Studio zamieszczony jest peen opis jzyka wraz z wieloma
przykadami, ktrych przepisanie i sprawdzenie moe uatwi zrozumienie zagadnienia.
W opisie tym pomito rwnie opis interfejsu uytkownika B&R Automation Studio. Temat ten
opisany jest w oddzielnym dokumencie oraz w systemie pomocy.

1.1. Typy, operatory i wyraenia


S to podstawowe skadniki jzyka programowania. Zmienne i stae s najprostszymi
moduami danych, ktre mog by uyte w programie. Mog by uywane w poczeniu z
operatorami. Wyraenie jest poczeniem moduw danych i operatorw, czego wynikiem s nowe
wartoci moduw danych. Typ moduu definiuje, co obiekt moe w sobie zawiera i jakie operacje
mog by na nim wykonywane. Ten rozdzia - wraz z przykadami - opisuje wszystkie podstawowe
komponenty dla dobrego zrozumienia ich dziaania.

Zmienne i nazwy
Proste typy danych
Stae
Deklaracje
Operatory arytmetyczne
Operatory warunkowe
Operatory binarne i logiczne
Sowa kluczowe AB
Konwersje typw
Nadrzdno i kolejno wykonywania

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1.1.1. Zmienne, nazwy


Zmienna jest miejscem do przechowywania wartoci. Warto ta moe by czymkolwiek, np.
pozycj wcznika (wczony, wyczony) czy licznikiem zdarze. Aby odnie si do zmiennej
musi ona mie nazw. Jest kilka zasad nazywania zmiennych:

Wszystkie zmienne musz zaczyna si liter.

Pozostae znaki nazwy mog by literami, cyframi, podkrelnikiem lub znakiem dolara;
pozostaych znakw nie mona uywa.

Maksymalna dugo nazwy zmiennej wynosi 32 znaki.

W nazwie ma znaczenie wielko liter; przykadowo zmienna switch nie jest tym samym co
zmienna SWITCH.

Nazwa zmiennej nie moe zawiera spacji.

Zmienna nie moe nazywa si tak samo jak sowo kluczowe jzyka B&RAutomation Basic,
np. if, else, loop.

Kierujc si powyszymi zasadami, takie zmienne jak: lamp_1, F_int$ s prawidowe natomiast
stop!, 33_light s nieprawidowe (stop! zawiera niedozwolony znak (!), a 33_light zaczyna si od
cyfry).
Niezalenie od powyszych zasad, jest jeszcze kilka zalece jakimi naley si kierowa przy
nazywaniu zmiennych:

Nazwa, jak si nadaje powinna by krtkim opisem tego, czego zmienna dotyczy.
Przykadowo nazwa zmiennej s nic nam nie mwi, nazwa switch jest ju lepsza, jednake
optymaln i najbardziej domyln nazw jest light_switch.

Przy dugich nazwach naley uywa podkrelnikw i wielkich liter w celu rozdzielania
sw. Nazwa TopLevelSwitch lub top_level_switch jest lepsza ni toplevelswitch.

Jeeli nazwa nie opisuje zmiennej w sposb wystarczajcy naley zastosowa komentarz.

Wiele zmiennych zdefiniowanych przez system zaczyna si podkrelnikiem. Wasnych


zmiennych nie mona tak zaczyna jednake mona wykorzystywa te ju zdefiniowane w
systemie.

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1.1.2. Proste typy danych


Kada zmienna ma ustalony typ; w B&R Automation Basicu jest ich wiele. Typ opisuje waciwoci
zmiennej, np. zakres wartoci, rozdzielczo liczby przechowywanej w zmiennej lub moliwe do
wykonania na niej operacje.
B&R Automation Basic posiada nastpujce typy numeryczne danych: BOOL, UINT, UDINT,
SINT, INT, DINT, REAL. Tabela poniej przedstawia przegld tych typw:

Dodatkowo istniej specjalne typy zmiennych do przechowywania acuchw znakw (STRING),


rnic czasw (TIME) i dat (DATE_AND_TIME).

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1.1.2.1. Typ BOOL


Typ BOOL moe zawiera tylko jedn z dwch wartoci: TRUE (1) lub FALSE (0). Stosowany jest
gwnie do przechowywania zmiennych typu wcz/wycz.
1.1.2.2. Typy liczbowe
Typy USINT (BYTE), UINT (WORD) i UDINT (LONG) mog reprezentowa tylko liczby
dodatnie. Mog na przykad suy do przechowywania wartoci numerycznych, znakw ASCII,
wartoci analogowych. Dla tych typw 0 jest dolnym zakresem a grny zakres podaje tabela
powyej.
SINT (INT8), INT (INT16) i DINT (INT32) mog reprezentowa zarwno liczby dodatnie jak i
ujemne. Kady z tych typw ma inny zakres (patrz tabela powyej). Mog by wykorzystywane do
takich samych zastosowa jak typy opisane wyej z t jednak przewag, i mog reprezentowa
wartoci zarwno dodatnie jak i ujemne (np. reprezentacja temperatury, zliczanie w gr/d).
Jeli wybierzesz niewaciwy typ w trakcie definiowania zmiennej (np. jej zakres bdzie za may)
program moe zacz zachowywa si nieprzewidywalnie. Dla przykadu: jeli licznik osignie
wartoci zakresu swojej zmiennej to ponownie si przeaduje wartoci bdc pocztkiem zakresu
tej zmiennej. Zjawisko to nazywa si przepenieniem.
Najwiksza warto zmiennej typu USINT to 255. Zmienna typu SINT moe przechowywa
wartoci do 127. Pomimo tego mona w ni wpisa warto wiksz, np. 200. Jednake, jeli
sprawdzisz po tym jej zawarto zauwaysz, e zamiast liczby 200 zmienna zawierza liczb -56.
Dlaczego? Aby lepiej zrozumie to zjawisko popatrz na ilustracj poniej:

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Binarny odpowiednik liczby 200 i 56 jest identyczny i wynosi (%11001000) ale sposb w jaki jest
wywietlany zaley od typu danej. Gdy liczba jest przypisana do zmiennej, kompilator nie sprawdza
czy zmienna jest w stanie przechowa t warto czy nie.
Musisz sprawdzi sam i upewni si, e adne nieoczekiwane przepenienia nie bd miay
miejsca.
Przepenienia mog wystpi take przy innych typach danych majcych tak sam liczb bitw, np.
INT/UINT lub DINT/UDINT.

1.1.2.3. Typ REAL (FLOAT)


Jak na razie zajmowalimy si danymi typu cakowitego. Wiele razy jednak mamy do czynienia z
sytuacjami, gdzie wystpuj nie tylko typy cakowite, lecz take typy rzeczywiste, np. 32.5 st. C, czy
5.03V. Uywajc notacji naukowej (mantysa i wykadnik) moemy zapisa zarwno bardzo mae
jak i bardzo due liczby. Przykadowo liczba 1700000000 (1.7*10^9) w B&R Automation Basicu
zapisana jest jako 1.7E9 (3 bajty mantysy i jeden bajt wykadnika), co jest zgodne z norm IDEE
754 zapisu liczb rzeczywistych.
7

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Zmienna typu rzeczywistego ma zakres 3.4E+38. Jeli warto ta zostanie przekroczona ustawi si
bit powizany ze zmienn pokazujcy w statusie +INF. Najmniejsza dodatnia liczba rzeczywista to
+1.18E-38 natomiast najwiksza ujemna to -1.18E-38. Liczby z przedziau pomidzy nimi wynosz
zero.

Zalety stosowania liczb rzeczywistych s niezaprzeczalne, jednake naley te wspomnie o ich


wadach.
Obliczenia wykonywane na liczbach typu rzeczywistego zajmuj do kilkudziesiciu razy wicej
czasu ni obliczenia na zmiennych typu cakowitego.
Powinno si wic uywa ich rozwanie, np. zamiast stosowa typ REAL do zapisu 1.25 s lepiej
uy 1250 ms.

1.1.2.4. Typ TIME


Ten typ przechowuje rnice czasu. Rnica czasu przechowywana jest w milisekundach w liczbie
32-bitowej. W programie i trybie monitora jest wywietlana jako dni, godziny, minuty, sekundy,
milisekundy. Zakres tego typu: od T#24d20h31m23s648ms do T#24d20h31m23s647ms.
Najmniejsza warto rna od zera to T#1ms.

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1.1.2.5. Typ DATE_AND_TIME


Ten typ suy do przechowywania informacji o dacie. Informacja ta, podobnie jak w typie TIME,
przechowywana jest w liczbie 32-bajtowej. Wywietlana jest w formacie okrelonym przez norm
IEC61131-3. Zakres tego typu: od DT#1970010100:00 do DT#2099123123:59:59 a
najmniejsza warto to 1 s.

1.1.2.6. Typ STRING


Typ ten suy do przechowywania znakw, wic moe przechowywa nazwy czy teksty. W
deklaracji zmiennej tego typu naley poda maksymaln dopuszczon liczb znakw. Przykadowo
acuch 10 znakw naley zadeklarowa jako STRING(10).
acuchy znakw przechowywane s jako bajty zawierajce kody znakw ASCII umieszczone
jeden za drugim. Ostatni bajt jest znakiem koca acucha i wynosi zero, nie jest jednak wliczany w
dugo acucha.

1.1.2.7. Jaki typ danych uy?


Czy nie mona by po prostu uywa zawsze najwikszego typu danych? Mona, jednak takie
rozwizanie wie si z marnowaniem pamici, ktra nie jest nieograniczona i moe si w
pewnym momencie skoczy. Innym aspektem zwizanym z uywaniem duych typw jest czas
wykonywania na nich oblicze, duszy dla typw wikszych. Wybierajc typ danej naley te
pamita o tym czy dana bdzie wystpowaa jako ujemna czy nie.
Zawsze naley zwraca uwag na to, jak due bd dane przechowywane w zmiennych i jakie
due bd wyniki w nich przechowywane po wykonaniu oblicze.

1.1.2.8. Przykady typw danych


Przykad 1:
licznik jest zdefiniowany jako typ SINT. Program ma nastpujce linie kodu:
licznik = 127
9

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

licznik = licznik + 1
Nastpnym krokiem programu bdzie przyjcie przez zmienn licznik wartoci -128 poniewa
zosta przekroczony grny zakres zmiennej typu SINT i nastpio przepenienie. Jeli w
programie dziej si dziwne rzeczy, jedn z przyczyn moe by wanie przekroczenie zakresu.

1.2. Stae
Staa jest liczb, ktra nie zmienia swojej wartoci. Stae wystpuj w systemie i w bibliotekach,
mog by take definiowane przez uytkownika.

1.3. Deklaracje
Zmienna zadeklarowana jest nastpujco:
nazwa_zmiennej : NAZWA_TYPU
Linia powyej nie jest lini programu! Jest to tylko informacja, e zmienna jest w jaki sposb
zadeklarowana.

1.4. Operatory arytmetyczne


=

przypisanie/rwno,

dodawanie,

odejmowanie/znak ujemny liczby

mnoenie,

dzielenie

mod

reszta z dzielenia

Przykad:
x=3
y=5

10

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

a = 10
b=5
wynik = x*y + a/b

Najpierw wykonywane jest mnoenie, potem dzielenie (patrz Kolejno wykonywania dziaa).
Nastpnie powstae dwa skadniki s dodawane i w rezultacie otrzymujemy liczb 17. Dla
pewnoci mona uy nawiasw, aby w sposb jasny widzie kolejno wykonywania dziaa.

1.5. Operatory warunkowe


=

<>

<

>

>=

<=

Operatory powysze su do porwnywania dwch wartoci liczbowych. Wynik tego


porwnania jest zawsze TRUE lub FALSE.

Przykad:
Sprawdzanie czy zmienna jest mniejsza od 10:

if (zmienna < 10) then


;co ma zrobi?
Endif

1.6. Operatory binarne i logiczne


not and

or

xor

Naley rozpatrzy dwa przypadki: zastosowanie binarne i zastosowanie logiczne.


Zastosowanie binarne:

11

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Kada zmienna jest traktowana bitowo dziaania na zmiennych odbywaj si jako dziaania na
poszczeglnych bitach tych zmiennych zgodnie z tablic prawdy przedstawion poniej.

Operator not nie jest zamieszczony w tabeli gdy ma tylko jedn warto wejciow. Zmienia
zmienn na przeciwn lub odwraca wszystkie jej bity na przeciwne. Przykadowo: jeli dana typu
BOOL = 1 to not dana = 0 (bit zosta odwrcony na przeciwny). Jeli dana typu USINT = 240
(%11110000) to not dana = 15 (%00001111) (wszystkie bity zostay odwrcone na przeciwne).
Wszystkie operatory maj tak sam kolejno wykonywania dziaa wic s wykonywane od
lewej do prawej strony.
Zastosowanie logiczne:
Operatory or, and lub xor mona wykorzystywa w sprawdzaniu warunkw logicznych.
Rezultatem takiego dziaania jest TRUE lub FALSE. Najlepiej obrazuje t sytuacj przykad:
if (poziom >= max) or (emergencyStop = 1) then
pompa = 0
endif
Pompa zostanie wyczona (pompa = 0) jeli zostanie przekroczony poziom maksymalny
(poziom >= max) albo wczony zostanie wycznik awaryjny (emergencyStop = 1)
Oglnie rzecz ujmujc moemy zapisa tabel prawdy nastpujco:

12

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

gdzie Left oznacza wyraenie po lewej stronie operatora a Right wyraenie po prawej stronie.
Zarwno Left jak i Right musz by w nawiasach: (Left) operator (Right).

1.7. Sowa kluczowe B&R Automation Basic


access

okrela dostp dynamiczny

action

patrz wyraenie case

BIT

binarny typ danych

BIT_CLR

A=BIT_CLR(IN, POS)
A przyjmuje warto IN z wyzerowanym bitem na pozycji POS. Operator IN
pozostaje niezmieniony

BIT_SET

A=BIT_SET(IN, POS)
A przyjmuje warto IN z ustawionym bitem na pozycji POS. Operator IN
pozostaje niezmieniony

BIT_TST

A=BIT_TST(IN, POS)
A przyjmuje warto bitu z pozycji POS sowa IN

case

patrz wyraenie case

do

patrz wyraenie loop

downto

patrz wyraenie loop

EDGE

wykrywanie zbocza opadajcego lub narastajcego

13

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

EDGENEG

wykrywanie zbocza opadajcego

EDGEPOS

wykrywanie zbocza narastajcego

else

patrz wyraenie if

elseaction

patrz wyraenie case

endaction

patrz wyraenie case

endcase

patrz wyraenie case

endif

patrz wyraenie if

endloop

patrz wyraenie loop

endselect

patrz wyraenie select

exitif

patrz wyraenie loop

FLOAT

typ danych 32-bitowych rzeczywistych

FBK

wywoanie bloku funkcyjnego

goto

patrz wyraenie goto

if

patrz wyraenie if

INC

inkrementacja

INT16

typ danych 16-bitowych cakowitych dodatnich i ujemnych

INT32

typ danych 32-bitowych cakowitych dodatnich i ujemnych

INT8

typ danych 8-bitowych cakowitych dodatnich i ujemnych

LONG

typ danych 32-bitowych cakowitych dodatnich

loop

patrz wyraenie loop

next

patrz wyraenie select

of

patrz wyraenie case

select

patrz wyraenie case

14

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

state

patrz wyraenie select

then

patrz wyraenie if

to

patrz wyraenie loop

when

patrz wyraenie select

ABS

zwraca bezwzgldn warto liczby

ACOS

zwraca arcus cosinus liczby

adr

zwraca adres zmiennej

AND

logiczne AND

ASIN

zwraca arcus sinus liczby

ASR

arytmetyczne przesunicie w prawo

ATAN

zwraca arcus tangens liczby

COS

zwraca cosinus liczby

EXP

funkcja wykadnicza A=EXP(IN)

EXPT

funkcja potgowa A=EXPT(IN1, IN2)

LIMIT

ograniczenie A=LIMIT(MIN, IN, MAX)


MIN jest dolnym a MAX grnym ograniczeniem wyniku. Jeli IN jest
mniejsze od MIN zwracana jest warto MIN. Jeli IN jest wiksze od MAX
zwracana jest warto MAX. W pozostaych przypadkach zwracana jest
warto IN

LN

zwraca logarytm naturalny z liczby

LOG

zwraca logarytm dziesitny z liczby

LSL

patrz SHL

LSR

patrz SHR

MAX

zwraca wiksz warto z danych dwch wartoci

15

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

MIN

zwraca mniejsz warto z danych dwch wartoci

MUX

A=MUX(CHOICE, IN1, IN2, , INn)


zwraca jedn z wartoci IN w zalenoci od CHOICE

OR

logiczne OR

ROL

A=ROL(IN, N)
przesuwanie piercieniowe w lewo wartoci IN o N pozycji

ROR

A=ROR(IN, N)
przesuwanie piercieniowe w prawo wartoci IN o N pozycji

SEL

A=SEL(CHOICE, IN1, IN2)


wybr binarny zaleny od CHOICE (typ BOOL). CHOICE=1: zwracana jest
warto IN1, w innym przypadku warto IN2

SHL

przesuwanie w lew stron bit po bicie wartoci N: A=ASR(IN, N), prawa


strona wypeniana jest zerami

SHR

przesuwanie w praw stron bit po bicie wartoci N: A=ASR(IN, N), lewa


strona wypeniana jest zerami

SIN

zwraca sinus liczby

sizeof

zwraca liczb bajtw jak zajmuje zmienna

SORT

zwraca kwadrat liczby

TAN

zwraca tangens liczby

TRUNC

zwraca cz cakowit liczby

XOR

logiczne EXOR

16

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

1.8. Konwersje typw


Jeli operacja dokonuje si na dwch zmiennych rnych typw, musz one by skonwertowane
do jednego typu. Kompilator automatycznie dokonuje konwersji w gr, czyli mniejsze zmienne
zamienia na wiksze. Popatrz uwanie na przykady poniej.

Przykad:
byte_pv: USINT, word_pv: UINT, end: UDINT
end = byte_pv + word_pv

Kolejno wykonywania operacji jest nastpujca:


byte_pv jest automatycznie konwertowany do typu UINT, wykonuje si dodawania dwch
wartoci UINT, wynik tego dodawania jest typu UINT, wynik UINT jest konwertowany na typ
UDINT i przechowywany jest w zmiennej end.

Konwersja niejawna
Konwersja jawna

1.8.1. Konwersja niejawna

17

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Konwersj t naley stosowa bardzo ostronie gdy moe spowodowa nieprzewidywalne


zachowanie programu.

Przykad 1:
dzielna: SINT, dzielnik: SINT, iloraz: REAL
dzielna = 3
dzielnik = 4
iloraz = dzielna / dzielnik
Wynik (iloraz) rwna si 0. Dlaczego?
Wykonane zostao dzielenie typw cakowitych (zarwno dzielna, jak i dzielnik s liczbami typu
SINT), w zwizku z tym wynikiem dzielenia jest te liczba cakowita, w tym przypadku rwna 0.
Wynik jest konwertowany do typu rzeczywistego (do uamka). Dlatego liczba 0 przedstawiana
jest jako 0.0.

Przykad 2:
dzielna: SINT, dzielnik: REAL, iloraz: REAL
dzielna = 3
dzielnik = 4
iloraz = dzielna / dzielnik
Wynik (iloraz) rwna si 0.75. Dlaczego?
Dzielna jest konwertowana w gr do liczby rzeczywistej (3.0).
Teraz dzielna i dzielnik s liczbami rzeczywistymi, wic wynik te jest wartoci typu
rzeczywistego (0.75).
Wynik jest przypisywany do te do zmiennej typu rzeczywistego (do uamka). Nie wykonywana
jest adna konwersja.

18

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Przykad 3:
dzielna: SINT, dzielnik: SINT, iloraz: REAL
dzielna = 3
dzielnik = 4
iloraz = float(dzielna) / dzielnik
Wynik (iloraz) rwna si 0.75. Dlaczego?
1. Dzielna zostaa skonwertowana w gr w sposb jawny (przez programist) do wartoci
rzeczywistej.
2. Dzielnik zosta skonwertowany w gr w sposb niejawny do wartoci rzeczywistej.
3. Wykonane zostao dzielenie wartoci rzeczywistych. Wynikiem dzielenia jest warto
rzeczywista (0.75).
4. Wynik jest przypisywany do te do zmiennej typu rzeczywistego (do uamka). Nie
wykonywana jest adna konwersja.

1.8.2. Konwersja jawna

19

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Konwersj typw mona dokonywa samemu. Mona robi j w d (od wartoci wikszej do
wartoci mniejszej) lub w gr (od wartoci mniejszej do wartoci wikszej). Konwersja w gr
gwarantuje zawsze prawidowe rezultaty.

Przykad:
int8_pv : type SINT. word_pv : type UINT. end : DINT (the same as before)
end = int32(int8_pv) + int32(word_pv)

Uwaga!
Pomidzy PL2000 (pierwotna wersja AB) i Automation Basic wystpuje rnica przy
konwertowaniu z wartoci wikszej do mniejszej typu BOOL. W PL2000 tylko najmodszy bit jest
sprawdzany podczas konwersji. Automation Basic sprawdza wszystkie bity danej. W poniszym
przykadzie boolvar ma warto zero w PL2000 (bit 0 nie jest ustawiony). W Automation Basic
natomiast boolvar ma warto jeden, poniewa usintvar nie jest zerem.
usintvar = 2
boolvar = BIT(usintvar)

Problemy z typami danych mog wynikn rwnie przy stosowaniu zmiennych tego samego typu.
Moe si tak zdarzy, e dodajc do siebie dwie wartoci dojdzie do przepenienia i wynik dziaania
bdzie niepoprawny.
Przykad:
Temperatura w duym pomieszczeniu mierzona jest w trzech rnych miejscach. Naley wyliczy
redni temperatur w pomieszczeniu. Pomiary trzech temperatur przechowywane s w zmiennych o
nazwach: temp_1, temp_2, temp_3 a wynik w zmiennej av_temp. Wszystkie zmienne s typu INT.
Podstawowa formua wykonania dziaania obliczajcego redni temperatura wyglda nastpujco:
av_temp = 1/(liczba pomiarw) * Suma(temperatury)
Jest kilka metod zapisania powyszej formuy w Automation Basicu.
Wersja 1
20

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

av_temp = 1/3 * (temp_1 + temp_2 + temp_3)

W tej wersji wynik zawsze bdzie zerem gdy 1/3 jest dzieleniem cakowitym i zawsze da warto
zero.

Wersja 2
av_temp = temp_1/3 + temp_2/3 + temp_3/3

Ta wersja w zasadzie da poprawny wynik, cho nie jest dobrze zapisana.


Wersja 3
av_temp = (temp_1 + temp_2 + temp_3) / 3

Ta wersja jest optymalna: najpierw dodane s cakowite wartoci temperatur a dopiero potem
podzielone s przez 3.

1.9. Nadrzdno i kolejno wykonywania dziaa


W kadym wyraeniu pierwszy wykonywany jest ten operator, ktry ma najwyszy priorytet, potem
wykonywane s operatory o coraz niszym priorytecie. Operatory o tym samym priorytecie
wykonywane s od lewej do prawej strony. Nadrzdno w Automation Basic przedstawia si
nastpujco:

21

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Uywajc operatorw naley mie na wzgldzie kolejno ich wykonywania. Uywajc


nawiasw (najwyszy priorytet) kolejno moe by dokadnie ustalona.
Prosty matematyczny przykad:
6 + 7 * 5 3 w zalenoci od kolejnoci wykonywania dziaa albo uycia nawiasw moe da
rne wyniki.

22

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

2. Kontrola wykonywania programu


Program to lista instrukcji, ktra nie jest jednak zawsze wykonywana jedna po drugiej, czasem
wystpuj przeskoki do innych sekcji w zalenoci od rnych warunkw. Istot kontroli
wykonywania jest takie sterowanie programem, by zawsze dokadnie wiadomo byo, co i gdzie
program robi.
Proste wyraenia, bloki wyrae
Wyraenie if
Wyraenie case
Ptle loop
Praca krokowa select
Wyraenie goto

2.1. Proste wyraenia, bloki wyrae


Proste wyraenie to pojedyncza linia instrukcji: przypisanie wartoci, obliczenie albo wywoanie
funkcji.
Przykad:
init = 0
result = (x2 x1)/(y2 y1)

status = DIS_str(0, 1, hello)

Bloki wyrae to wyraenia lub instrukcje zajmujce kilka linii. Zawsze zaczynaj si i kocz
sowem kluczowym.

Przykad:
if (x1 < 3) then
y2 = y2 + 1

23

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

endif

loop (counter = 1 to 20) do


;... statement(s)
endloop

2.2. Wyraenie if
Suy ono do wyraania decyzji. Moe wystpowa w trzech odmianach: if, if-else oraz else if.
if
else
else if

2.2.1. if
if warunek then
wyraenie
endif

Podstawow zasad jest, e jeli warunek jest prawdziwy to wykonywane jest wyraenie (lub
kilka wyrae), jeli natomiast warunek nie jest prawdziwy wykonywane jest wyraenie
(wyraenia) nastpujce po endif. Warunek moe by prosty lub zoony z kilku operatorw, np.
z and czy or. Graf dla wyraenia if pokazany jest poniej:

24

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Uwagi dotyczce zapisu:


if oraz then musz by w tej samej linii,
wyraenia nie mog wystpowa w liniach, w ktrych wystpuje if i then,
endif musi wystpowa jako jedyne w linii.
Spjrzmy na przykad:
Pyn w pojemniku jest podgrzewany przez palnik. Jeeli temperatura przekroczy pewn warto
(max_temp) powinien wczy si alarm.

Program bdzie wyglda nastpujco:


if (curr_temp < max_temp) then
hot_alarm = 0
endif

25

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

if (curr_temp >= max_temp) then


hot_alarm = 1
endif

2.2.2. else
Wyraenie to stosuje si razem z wyraeniem if. Skadnia wyglda nastpujco:
if (warunek) then
wyraenie A (lub kilka wyrae A)
else
wyraenie B (lub kilka wyrae B)
endif

Jeli warunek jest speniony wyraenie A (wyraenia A) jest wykonywane, jeli warunek nie jest
speniony wyraenie B (wyraenia B) jest wykonywane.
Else musi wystpowa w linii jako jedyne sowo.
Graf dla wyraenia if-else pokazany jest poniej:

Uwagi dotyczce zapisu s takie same jak dla if a dodatkowo:


else musi wystpowa w linii jako jedyne sowo.

Program z poprzedniego przykadu mona teraz zapisa:


if (curr_temp < max_temp) then
alarm = 0
else
alarm = 1

26

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

endif

2.2.2.1. Zagniedanie
Jeeli istnieje potrzeba zastosowania kilku warunkw istnieje moliwo zagniedenia wyrae if
else. Oznacza to wstawienie wyraenia if else w inne wyraenie if else.
if (warunek A) then
wyraenie (wyraenia)A
else
if (warunek B) then
wyraenie (wyraenia) B1
else
wyraenie (wyraenia) B2
endif
endif

Najpierw sprawdzany jest warunek A. Jeli jest on speniony wykonywane s wyraenia A po czym
program przechodzi do ostatniego endif. Jeli jednak warunek nie jest speniony, program
przechodzi do drugiego wyraenia if i sprawdza jego warunek (warunek B). Jeli jest on prawdziwy
wykonuj si wyraenia B1 po czym program przechodzi do nastpnej instrukcji za drugim endif.
Jeli natomiast nie jest prawdziwy wykonaj si wyraenia B2, po czym program przejdzie do
nastpnej instrukcji za drugim endif.
Graf dla zagniedonego wyraenia if else wyglda nastpujco:

27

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Zagniedanie jest bardzo przydatne, jeli chcemy sprawdza warunki zalene od innych warunkw.
Trzeba by jednak ostronym i zawsze pamita, e kademu if musi odpowiada endif. Zagnieda
mona dowolnie gboko jednak po kilku zagniedeniach program staje si nieczytelny a po
kilkudziesiciu kompilator moe nie by w stanie przekompilowa listingu ze wzgldu na
ograniczon pami.
Zbyt gbokie zagniedanie jest zym stylem programowania i powinno si w inny sposb
rozwizywa zadania gdzie wystpuj warunki uzalenione od innych warunkw.
Aby poprawi czytelno listingu programu naley uywa wci (tabulatorw) tak jak w
przykadach powyej.
Przykad:
Do poprzedniego przykadu dodalimy teraz alarm niskiej temperatury. Jeli temperatura spadnie
poniej minimalnego poziomu uaktywni si alarm niskiej temperatury, jeli natomiast podniesie si
ponad poziom maksymalny, uaktywni si alarm wysokiej temperatury.

28

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Kod w jzyku Automation Basic wyglda nastpujco:


if curr_temp < min_temp then
too_cold = 1
else
too_cold = 0
if curr_temp >= max_temp then
too_hot = 1
else
too_hot = 0
endif
endif

2.2.3. else if
To wyraenie jest specjaln wersj wyraenia if. Pozwala na wiele warunkw bez koniecznoci
cigego uywania w nowej linii sowa endif co korzystnie wpywa na przejrzysto kodu programu.
Konstrukcja wyglda podobnie do zagniedonego if - else jednak znaczenie jej jest nieco inne.
if (warunek A) then
wyraenie (wyraenia) A
else if (warunek B) then
wyraenie (wyraenia) B
else if (warunek C) then
wyraenie (wyraenia) C
else
wyraenie (wyraenia) D
endif

29

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Jak tylko speniony zostanie jeden z warunkw wykonywane jest odpowiadajce mu wyraenie po
czym program przechodzi za lini endif. W innym przypadku wykonane zostanie wyraenie D po
czym program przejdzie za lini endif.
Uwagi dotyczce if else:

wystpuje tylko jedno endif; else if nie pocztkuje nowego wyraenia if (jest kontynuacj
pierwszego if) i nie potrzebuje zamknicia endif

moe wystpowa wiele else if ale tylko jedno else

kada linia z else if musi by zakoczona sowem then

po spenieniu jednego z warunkw wykonywane jest odpowiadajce mu wyraenie


(wyraenia) po czym program przechodzi do lini programu nastpujcej po sowie endif

Wrmy teraz do naszego przykadu pojemnika z pynem. Zamy, e chcemy go podgrzewa z


rn moc w zalenoci od temperatury. Im nisza temperatura pynu tym wiksza moc grzania.
Pokazuje to rysunek poniej:

Kod w jzyku Automation Basic wyglda nastpujco:


; inicjalizacja
off = 0
low = 1
medium = 2

30

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

high = 3
; program cykliczny
if curr_temp < (set_temp*5/10) then
heat = high
else if curr_temp < (set_temp*8/10) then
heat = medium
else if curr_temp < set_temp then
heat = low
else
heat = off
endif

Uywajc zagniedonej struktury if else naleaoby napisa (cz inicjalizacyjna bez zmian):
if curr_temp < (set_temp*5/10) then
heat = high
else
if curr_temp < (set_temp*8/10) then
heat = medium
else
if curr_temp < set_temp then
heat = low
else
heat = off
endif
endif
endif

Dwie powysze wersje programu dziaaj tak samo jednake wersja zagniedona jest mniej
czytelna. Naley mie na uwadze fakt, e kto inny czytajcy listing programu (albo nawet Ty sam
po jakim czasie) moe mie trudnoci z rozszyfrowaniem zagniedonego kodu. Czasem warto
zastanowi si nad zmian zapisu programu z bardzo zagniedonego na rzecz prociej
wygldajcych wyrae. Jednym z nich moe by case opisane poniej.

31

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

2.2. Wyraenie case


Podobne jest do powielonego wyraenia if - else. Zamiast jednak koniecznoci pisania za kadym
razem warunku, specyfikuje si moliwe odpowiedzi. Podstawowa struktura tego wyraenia
wyglda nastpujco:
case dana of
action n0..n1:
wyraenie (wyraenia) A
endaction
action n2..n3:
wyraenie (wyraenia) B
endaction
action constant:
wyraenie (wyraenia) C
endaction
elseaction:
wyraenie (wyraenia) D
endaction
endcase

Poniszy diagram tumaczy zasad dziaania wyraenia case

32

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Tylko jedna akcja w trakcie dziaania wyraenia case moe by wykonana. Jeli expression nie
mieci si w przedziaach n0n1, n2n3 ani nie jest rwne staej constant to zostan wykonane
wyraenia D.
Przykad:
Napiszmy program, ktry zacza rne moce grzania w zalenoci od temperatury podgrzewanego
pynu i ustawienia zadanej temperatury. Bdziemy dokonywali jednego z poniszych wyborw:
jeli bieca temperatura jest z przedziau (0 49%) wartoci zadanej to
wcz grzanie na poziom high
jeli bieca temperatura jest z przedziau (50 79%) wartoci zadanej to
wcz grzanie na poziom medium
jeli bieca temperatura jest z przedziau (80 99%) wartoci zadanej to
wcz grzanie na poziom low
w innym przypadku
wycz grzanie
zakocz

Kod w jzyku Automation Basic wyglda nastpujco:


; cz inicjalizacyjna
; poziomy grzania
off = 0
low = 1
med = 2
high = 3
; pocztkowy stan grzalki
heat = off
; main program section
case (curr_temp*100/set_temp) of
action 0..49:
heat = high
endaction
action 50..79:
heat = med
endaction
action 80..99:

33

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

heat = low
endaction
elseaction:
heat = off
endaction
endcase

Wartoci action mog by tylko staymi, nie mog by zmiennymi. To, do ktrego zakresu nale
sprawdzane jest tylko jeden raz przy wejciu do wyraenia case.
Wyraenie case jest najlepszym wyjciem, gdy mamy do czynienia z wieloma wyborami. Zapis jest
bardzo przejrzysty i uatwia programicie szybkie zorientowanie si, co i gdzie w danej chwili dzieje
si w programie.

2.3. Ptle
Ptla jest czci programu, ktrej wykonywanie jest powtarzane. O tym, ile razy ma by
powtrzone decyduje licznik ptli lub warunek wyjcia z ptli.
loop todo
loopdowntodo
Warunkowe wyjcie z ptli

2.3.1. loop to do
Podstawowa struktura ptli wyglda nastpujco:
loop PV = liczba to licznik do
wyraenie (wyraenia)
endloop

Po wejciu do ptli PV przyjmuje warto liczby a nastpnie wykonywane s wyraenia i


inkrementowana jest liczba. Czynnoci te bd powtarza si tak dugo a liczba nie przekroczy
wartoci licznik. Wtedy program przejdzie do lini nastpujcej po sowie endloop.
Graf ptli loop wyglda nastpujco:

34

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Przykad:
Otrzymujemy pakiety danych, ktre skadaj si z 10 liczb typu INT i sumy kontrolnej. Naley
oblicza sum kontroln dla kadego pakietu (nazwan check_new) i jeli nie zgadza si ona z t do
nas przesan (check_old) naley zasygnalizowa bd. Sum kontroln liczy si przez zwyke
dodanie wszystkich dziesiciu wartoci do siebie (moe wystpi przepenienie, ale to nie jest w tym
przykadzie wane). Schemat programu wyglda nastpujco:
wylicz check_new
if check_new rni si od check_old then
sygnalizuj bd
endif

Wersja 1:

35

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

check_new = data[0] + data[1] + data[2] + data[3] + data[4] + data[5] + data[6] +


data[7] + data[8] + data[9]
if check_new <> check_old then
error = 1
endif

Jest ona poprawna jednake mao czytelna. Gdybymy mieli np. 500 danych to dodawanie ich w taki
sposb byoby w ogle nieczytelne.
Wersja 2:
check_new = 0
loop index = 0 to 9 do
check_new = check_new + data[index]
endloop
if check_new <> check_old then
error = 1
endif

Ta wersja jest duo lepsza od poprzedniej. Gdybymy chcieli zmieni np. liczb skadnikw sumy
wystarczy zmieni jeden indeks w programie.

2.3.2. loop downto do


Ta ptla dziaa niemal identycznie do ptli przedstawionej powyej, jedyn natomiast rnic jest to,
ze licznik jej nie jest inkrementowany a dekrementowany.

2.3.3. Warunkowe wyjcie z ptli


Jeeli ptla nie ma licznika mwicego ile razy ma si powtrzy, musi mie warunek wyjcia.
Struktura takiej ptli jest nastpujca:
loop
statement(s)A
exitif condition
statement(s)B
endloop

36

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Ta ptla powtarzana jest tak dugo a nie zostanie speniony warunek wyjcia.
Uywanie jej niesie z sob to ryzyko, e jeli warunek wyjcia nigdy nie zostanie speniony,
ptla bdzie wykonywaa si nieskoczenie i program nigdy z niej nie wyjdzie.

Poniszy przykad powinien wyjani rnice midzy ptlami z warunkowym wyjciem a wyjciem
zalenym od licznika.
Prowadzimy kontrol jakoci. Wszystkie sprawdzane artykuy s waone a ich wagi zapisywane.
Nastpnie lista wag jest sortowana od najwikszej do najmniejszej. Pewna waga artykuu jest
minimaln akceptowaln w procesie kontroli jakoci. Zadaniem do zrealizowanie jest procentowe
obliczenie ile produktw zostao zaakceptowanych.
Zapiszmy ten problem w sposb strukturalny:
start od pocztku posortowanej listy
start ptli
sprawd wag artykuu, jeli za maa to wyjd z ptli
sprawd, czy wykorzystano wszystkie artykuy, jeli tak to wyjd z
ptli
inkrementuj liczb dobrych artykuw
koniec petli

37

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Aby powysz struktur zapisa w jzyku BR Automation Basic naley wprowadzi kilka
zmiennych. Liczba wszystkich artykuw w poddanych kontroli to total, lista wag produktw
przechowywana jest w tablicy nazwanej weights. Minimalna akceptowalna waga to min_weight.
total : USINT, count : USINT, min_weight : USINT, weights[100] : USINT,
quality : UINT
total = 99
count = 0
loop
exitif (weights[count] < min_weight)
exitif (count >= total)
count = count + 1
endloop
quality = UINT(count) * 100 / total

Wyjcie warunkowe zamiast wyjcia zalenego od licznika ptli uywamy wtedy, gdy nie jest nam
znana dokadnie liczba, przy ktrej program ma opuci ptl.

2.3. Praca krokowa select


Jest to instrukcja z okrelon liczb stanw. Pozostaje ona w jednym ze stanw tak dugo a nie
otrzyma komendy do jego zmiany. Rezultatem takiego dziaania jest to, e za kadym razem, gdy
program wchodzi w ten obszar kodu tylko aktualny stan jest wykonywany. Dodatkowo umieszczone
w nim s warunki (lub jeden warunek), ktre jeli zostan spenione spowoduj zmian stanu w
nastpnym cyklu. Budowa tej konstrukcji wymaga wyraenia select i wyglda nastpujco:
select
state stan1
wyraenie (wyraenia)1A
when warunek1
next stan2
wyraenie (wyraenia)1B
state stan2
wyraenie (wyraenia)2A
when warunek2

38

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

wyraenie (wyraenia)2B
next stan3
state stan3
wyraenie (wyraenia)13
when warunek3
next stan1
endselect

Tylko jeden stan (state) jest wykonywany podczas dziaania konstrukcji select. Przechodzenie
midzy stanami moliwe jest, gdy speniony jest warunek przejcia aktualnie wykonywanego stanu.
W przykadzie powyej najpierw wykonywany bdzie stan1, czyli wyraenia 1A. Zmiana stanu na
stan2 nastpi, gdy warunek1 zostanie speniony zaczn wtedy by wykonywane wyraenia 2A.
Gdy teraz speniony zostanie warunek2, wykonaj si wyraenia 2B, po czym program przejdzie do
stanu3.
Najlepiej wytumaczy dziaanie konstrukcji select na przykadzie.
Zbudujmy prosty kawomat, ktry moe sprzedawa dla uatwienia tylko czarn lub bia kaw.
Kawa kosztuje 25 centw, maszyna przyjmuje tylko sumy bdce kombinacj monet picio- i
dziesicio- centowych a take wydaje reszt (jeli przyjta suma jest wiksza ni 25 centw).
Najpierw musimy zastanowi si, jakie stany maszyny bd nam potrzebne. Na pewno konieczne
bdzie uycie stanw zwizanych z przepywem pienidzy, czyli 0, 5, 10, 15, 20 i 25 centw.
Zainicjalizowanie dziaania kawomatu odbywa si przez wrzucenie do niego monet lub wcinicie
przycisku wyboru kawy. Diagram jego pracy wyglda nastpujco:

39

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

6 powyszych stanw maszyny okrela cakowit sum wrzuconych do niej monet, przykadowo
T_20 oznacza 20 centw. Przerywane linie oznaczaj wrzucone monety, szare linie to wcinicie
przycisku a czarne strzaki mwi o tym, co maszyna w danej chwili robi (wydaje kaw, wydaje
reszt pienidzy). Maszyna zaczyna i koczy prac w stanie T_0. Pseudokod jej dziaania podany
jest poniej:
state T_0:
when a 5c coin inserted,
change to T_5
when a 10c coin inserted,
change to T_10
state T_5:
when a 5c coin inserted,
change to T_10
when a 10c coin inserted,
change to T_15
state T_10:
when a 5c coin inserted,
change to T_15
when a 10c coin inserted,
change to T_20

40

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

state T_15:
when a 5c coin inserted,
change to T_20
when a 10c coin inserted,
change to T_25
state T_20:
when a 5c coin inserted,
change to T_25
when a 10c coin inserted,
give back 5c and
change to T_25
state T_25:
when a 5c coin inserted,
give back 5c
when a 10c coin inserted,
give back 10c
when the black key is pressed,
dispense black coffee and
change to T_0
when the white key is pressed,
dispense milk and coffee, and
change to T_0

Teraz przetumaczmy powyszy pseudokod na jzyk BR Automation Basic. Musimy napisa select i
endselect oraz stworzy sensownie nazwane zmienne, aby w sposb jasny i zrozumiay mwiy nam
czego dotycz. Wszystkie zmienne mog by typu BOOL, poniewa reprezentuj tylko informacj
TRUE/FALSE (np.: wcinity przycisk tak lub nie, suma pienidzy w kawomacie rwna 25
centw tak lub nie). Program wyglda nastpujco:
select
state T_0
when coin_5 = 1
next T_5
when coin_10 = 1
next T_10
state T_5
when coin_5 = 1
next T_10

41

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

when coin_10 = 1
next T_15
state T_10
when coin_5 = 1
next T_15
when coin_10 = 1
next T_20
state T_15
when coin_5 = 1
next T_20
when coin_10 = 1
next T_25
state T_20
when coin_5 = 1
next T_25
when coin_10 = 1
return_5 = 1
next T_25
state T_25
if coin_5 = 1 then
return_5 = 1
else if coin_10 = 1 then
return_10 = 1
endif
when black_key = 1
coffee = 1
next T_0
when white_key = 1
milk = 1
coffee = 1
next T_0
endselect

Zaawansowana konstrukcja select


Konstrukcja select wraz ze wszystkimi dodatkami wyglda nastpujco:
select gdzie_jestem
wyraenia 0

42

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

state stan1
wyraenia 1A
when warunek1
next stan2
wyraenia 1B
state stan2
wyraenia 2A
when warunek2
wyraenia 2B
next stan3
state stan3
wyraenia 3
when warunek3
next stan1
endselect

Wyraenia 0 wykonywane s przy kadym wejciu do konstrukcji select przed przejciem do


waciwego stanu. W wyraeniach 0 mona take uy warunkw przejcia. Jest to bardzo przydatne
przy sprawdzaniu np. wystpieniu globalnego bdu aczkolwiek nie jest polecane do zwykych
zastosowa.
Zmienna gdzie_jestem (musi by typu UINT) podaje numer stanu, w ktrym aktualnie znajduje si
program. Zmieniajc t zmienn w programie mona przechodzi pomidzy stanami konstrukcji
select, jednake naley robi to bardzo ostronie. Nieoczekiwane wejcie do ktrego ze stanw
spowodowa moe bardzo duo zamieszania, poniewa zmienne mog przyj rwnie
nieoczekiwane wartoci. Operacji na zmiennej gdzie_jestem mona dokonywa tylko wtedy gdy
naprawd jest to uzasadnione i przemylane.

2.4. Wyraenie goto


W jzyku BR Automation Basic wystpuje polecenie skoku (goto) do innej czci programu (label),
ale nie jest zalecane jego stosowanie. Zawsze mona zastosowa inne rozwizanie ni wanie goto.
Naley pamita, e nie jest dobrym stylem stosowanie skokw do innej czci programu.

43

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Przykadem zastosowania goto jest wyjcie z mocno zagniedonej struktury w momencie np.
wystpienia jakiego bdu.
Przykad:
loop ... to ... do
loop ... to ... do
if ... then
loop
if (problem) then
goto recover
endif
endloop
endif
endloop
endloop
...
...
...
recover:
rozwi problem

3. Wskaniki i zoone typy danych


Dotychczas poznawalimy proste typy danych. Czsto jednak ma si do czynienia z typami
zoonymi, ktre maj t zalet, e mog przyspieszy wykonywanie programu i podnosz jego
skuteczno. S nimi:

tablice

acuchy znakw

struktury

adresy

wskaniki

44

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

3.1. Tablice
Zwyk zmienn mona traktowa jak pojedyncze pudeko do przechowywania danej. Jeli mamy
kilka zmiennych mamy take kilka pudeek. Aby mie dostp do nich wszystkich, musimy mie
dostp do wszystkich pudeek osobno. W tablicy natomiast wszystkie zmienne s ze sob
powizane. Oznacza to, e mona odnosi si do nich za pomoc jednej nazwy, co jest podstawow
zalet uywania tablic.
Jeli chcemy dziaa na pewnej liczbie zmiennych tego samego typu, np. zapisywa je, odczytywa
czy przechowywa, naley si mocno zastanowi nad uyciem wanie tablicy. Moe to uproci
program i sprawi, e bdzie on bardziej przejrzysty.
Aby uy zmiennej tablicowej, trzeba poda nie tylko jej nazw, ale take jej indeks wskazujcy, do
ktrego elementu chcemy si odwoa. W pamici tablica wyglda nastpujco:

Jak wida struktura tablicy jest do prosta. Aby dosta si do jej poszczeglnych elementw naley
posuy si nawiasami kwadratowymi, np. aby trzeciemu elementowi zmiennej tablicowej o nazwie
value nada warto 70 naley napisa value[2] = 70 (value[2] a nie value[3] poniewa numeracja
zaczyna si od zera).
Zmiennych tablicowych uywa si gwnie wtedy, gdy mamy do czynienia z operacjami na seriach
danych, np. wyliczenie redniej temperatury ze stu pomiarw.
Przykad:
Mamy maszyn, ktra wydaje 8 rodzajw napoi: col, lemoniad, sok pomaraczowy, cytrynowy,
jabkowy, winiowy, bananowy i wod. Zadaniem programu jest wydanie napoju w zalenoci od
tego, ktry zosta wybrany (kwesti zapaty w tym zagadnieniu pomijamy). Z kadym napojem
powizany jest jeden przycisk, ktry ma warto, 1 gdy jest wcinity a 0 gdy nie jest. Pseudokod
programu wyglda nastpujco:
45

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

sprawd przycisk
jeli przycisk wcinity to wydaj napj i wyjd

Kod w jzyku B&R Automation Basic wyglda nastpujco:


cola : BOOL, lemonade : BOOL, orange : BOOL, lime : BOOL, mineral : BOOL,
cherry : BOOL, banana : BOOL, apple : BOOL
if cola = 1 then
dispense(1)
else if lemonade = 1 then
dispense(2)
else if orange = 1 then
dispense(3)
else if lime = 1 then
dispense(4)
else if mineral = 1 then
dispense(5)
else if cherry = 1 then
dispense(6)
else if banana = 1 then
dispense(7)
else if apple = 1 then
dispense(8)
endif

Powyszy zapis nie jest najlepszy, poniewa kada zmienna musiaa by przetestowana. Gdybymy
mieli tych zmiennych 100 czy 200 program byby bardzo dugi, przez co nieczytelny. Moemy
jednak zapsia tak jak poniej, uywajc ptli:
drinks[8] : BOOL, index : USINT
loop index= 0 to 7 do
if drinks[index] = 1 then
dispense(index+1)
endif
exitif drinks[index] = 1
endloop

46

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

3.2. acuchy znakw


Stanowi specjalny typ tablicy. Jeli chcemy przechowywa informacje do wywietlenia lub druku,
przechowujemy je w tablicy znakw. Pojedynczy znak moe by przechowywany w zmiennej typu
USINT. Jeli wic mamy do czynienia z cigiem znakw (acuchem znakw) potrzebujemy tablicy
typu USINT. Jej rozmiar musi odpowiada dugoci acucha. Znakiem koca cigu znaku jest
warto 0 umieszczona bezporednio za ostatnim elementem acucha (warto zero, nie kod ASCII
liczby zero!), ktra jest informacj, e w danym miejscu koczy si cig (dodatkowy znak na
kocu). Jak wszystkie zmienne, tak i w acuchach znakw naley zainicjalizowa wszystkie jego
elementy. W przeciwnym wypadku na kocu acucha mog si znajdowa mieci.
Istnieje szereg funkcji, ktre operuj na acuchach znakw, np.
strcpy() kopiuje jeden acuch do drugiego,
strcat() dodaje jeden acuch na koniec drugiego (konkatenacja),
strlen() oblicza dugo acucha (do znaku koca),
Szczegowe informacje na temat wszystkich bibliotek, w tym rwnie biblioteki AsString
zawierajcej funkcje na acuchach znakw znajduj si w systemie pomocy B&R Automation
Studio.

3.3. Struktury
Struktura jest zbiorem zmiennych, nawet rnych typw, zebranych razem. Uycie struktur lepiej
organizuje zmienne. Zestawienie zmiennych w logiczne zbiory daje lepsz przejrzysto ni serie
nieuporzdkowanych danych. Struktury s czsto stosowane w jzykach wysokiego poziomu.
Struktury w B&R Automation Basic s podobne do struktur uywanych w jzyku C albo rekordw
w Pascalu.
Przykadem wykorzystania struktur w przemysowej aplikacji pozycjonowania moe by punkt,
ktrego okrelaj wsprzdne x, y, z albo wszystkie informacje zwizane z warunkami
przechowywania pynu w kontenerze: wysoko, szeroko, objto, maks. cinienie, poziom
cieczy, typ cieczy, data napenienia itd. Moliwoci wykorzystania struktur s nieskoczone.
Uporzdkowa mona tak wszystkie grupy albo zestawy zmiennych, ktre nale do jednego zbioru.

47

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Oczywicie elementy struktur mog by rnych typw w rnej kolejnoci. Elementami struktur
mog by zmienne prostych typw, tablice, acuchy znakw oraz inne struktury.
Struktura jest typem danych i ma swoj nazw (jak BOOL, INT itd.).
Definicja typu strukturalnego Struct_name:
Struct_name {element1: TYP, element2: TYP..}
Nazwa zmiennej typu strukturalnego Struct_name:
var_name: Struct_name

Deklaracja zmiennej

Przykad:
Chcemy przechowywa trjwymiarow wsprzdn punktu. Wykorzystujc proste typy danych
potrzebujemy trzech zmiennych:
punkt_x: REAL, punkt_y: REAL, punkt_z: REAL.

Albo zdefiniowa struktur i uywa tylko jednej zmiennej:


WSPOLRZ {x: REAL, y: REAL, z: REAL}
punkt: WSPOLRZ

Przykad:
Mamy prosty system pozycjonowania z 5 punktami docelowymi. Maszyna musi przej przez
wszystkie 5 punktw w odpowiedniej kolejnoci. Znana jest prdko maszyny (w jedn./s) i punkty
docelowe. Naley obliczy cakowit przebyt drog maszyny (w jedn.) i czas potrzebny na
48

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

wykonanie caej operacji. Zakadamy dwuwymiarowy ukad, wic potrzebujemy tylko


wsprzdnych x i y. Ruch odbywa si po nastpujcej ciece:

Dystans pomidzy dwoma punktami wynosi:

dyst = ( x2 x1 ) 2 + ( y 2 y1 ) 2

SQRT(a) jest funkcj obliczajc pierwiastek - ( a ). Do obliczania potg liczb suy funkcja
EXPT(a,b) - ( a b ).
Przy zaoeniu, e mamy dan prdko i punkty docelowe nasz pseudokod wygldaby nastpujco:
ustaw dystans = 0
dla kadej pary punktw
oblicz dystans midzy nimi
dodaj do cakowitej drogi
oblicz czas jako zadany dystans/prdko

Majc algorytm mona przystpi do definicji struktur, deklaracji zmiennych i pisania kodu
programu. Napiszemy dwie wersje programu: pierwsz prost i drug ulepszon wykorzystujc
dotychczas zdobyt wiedz.
Wersja 1:
49

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

WSPOLRZ {x: REAL, y: REAL}


p1: WSPOLRZ, p2: WSPOLRZ, p3: WSPOLRZ, p4: WSPOLRZ, p5: WSPOLRZ
dyst: REAL, prdkosc: REAL, czas: REAL
rozn: REAL, x_rozn: REAL, y_rozn: REAL
if (predkosc = 0) then
predkosc = 10
endif
dyst = 0
x_rozn = p2.x p1.x
y_rozn = p2.y p1.y
rozn = SQRT(EXPT(x_rozn, 2) + EXPT(y_rozn, 2) )
dyst = dyst + rozn
x_rozn = p3.x p2.x
y_rozn = p3.y p2.y
rozn = SQRT(EXPT(x_rozn, 2) + EXPT(y_rozn, 2) )
dyst = dyst + rozn
x_rozn = p4.x p3.x
y_rozn = p4.y p3.y
rozn = SQRT(EXPT(x_rozn, 2) + EXPT(y_rozn, 2) )
dyst = dyst + rozn
x_rozn = p5.x p4.x
y_rozn = p5.y p4.y
rozn = SQRT(EXPT(x_rozn, 2) + EXPT(y_rozn, 2) )
dyst = dyst + rozn
czas = dyst / predkosc

Patrzc na struktur programu, wydaje si ona do nieczytelna, nawet uywajc struktur. Byoby
znacznie lepiej gdyby nie powtarza kawakw programu kilka razy. Co, jeli mielibymy 100 albo
1000 punktw?
Stwrzmy wic tablic punktw, czyli tablic struktur. To uproci program i skrci program.
Wersja 2:
WSPOLRZ {x: REAL, y: REAL}
punkt[5]: WSPOLRZ
dyst: REAL, predkosc: REAL, czas: REAL

50

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

rozn: REAL, x_rozn: REAL, y_rozn: REAL, indeks: USINT


if (predkosc = 0) then
predkosc = 10
endif
dyst = 0
loop indeks = 0 to 3 do
x_diff = punkt[indeks+1].x punkt[indeks].x
y_diff = punkt[indeks+1].y punkt[indeks].y
rozn = SQRT(EXPT(x_rozn, 2) + EXPT(y_rozn, 2) )
dyst

= dyst + diff

endloop
time = dist / speed

Cho na pierwszy rzut oka program wyglda bardziej skomplikowanie, jest on znacznie ulepszony.
Naley zwrci uwag na indeksy i ich odwoanie do poszczeglnych elementw tablicy. W
przypadku wikszej iloci punktw wystarczy zwikszy rozmiar tablicy i liczb koca ptli.
Pamitaj, e 5 elementow tablic indeksuje si od 0 do 4.
Jak wida, mona stosowa same struktury, tablice struktur, struktury struktur itd. Istniej jednak
pewne ograniczenia:

Nie mona zagnieda struktur (tablic struktur, struktur struktur) gbiej ni do 5 poziomu,

Na kadym poziomie moe by maksymalnie 100 elementw,

Struktura nie moe mie wicej ni 32KB pamici (dodane wszystkie elementy nie
zapominajc o rwnaniu bajtw tzw. byte allignment).

3.4. Adresy
Gdy uywamy zmiennych, zazwyczaj odnosimy si do nich za pomoc ich nazw. W rzeczywistoci
zmienna musi by przechowywana gdzie w pamici, do ktrej to odwouje si CPU wanie przez
adresy. Gdy deklarujemy jak zmienn, CPU rezerwuje dla niej pewien obszar pamici. Jeli
zdefiniujemy cztery zmienne, CPU umieci je prawdopodobnie jedn obok drugiej. Nie musi tak

51

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

zrobi; zrobi tak by przestrze wykorzystana zostaa jak najbardziej efektywnie. Pami jest
alokowana w jednobajtowych blokach.
Przykad:
Output : USINT, Wait_time : UINT, Elapse : UDINT, Notify[4] : USINT

Mona tutaj zaobserwowa rozmiar zmiennych w pamici. Adres kadego z blokw pokazany jest
poniej rysunku. Jeli zapytamy o adres zmiennej Wait_time to odpowiedzi bdzie $A002. Czasem
potrzeba zmiennej do przechowywania adresu. Adres zawsze przechowuje si w typie UDINT.
Stwrzmy zmienn an_address i przechowajmy w niej adres zmiennej Wait_time.
Wait_time : UINT, an_address : UDINT
an_address = adr(Wait_time)

an_address zawiera teraz warto $A002. Funkcja adr() znajduje adres zmiennej spomidzy

nawiasw. Funkcja zawsze zwraca adres pierwszego bajtu zmiennej. Jeli zapiszemy:
an_address = adr(Elapse)

an_address wyniesie $A004. Gdy mamy do czynienia z tablic i wykorzystamy funkcj adr() to

zwrcony zostanie adres pierwszego jej elementu. Zapis:


an_address = adr(notify)

zwrci warto $A008. Mona take otrzyma adres ktrego elementu tablicy zapisujc:
an_address = adr(notify[2])

52

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Otrzymamy wtedy: $A00A. Tablice maj kilka specyficznych cech. Jej elementy s zawsze uoone
jeden pd drugim. Oznacza to, e jeli znamy rozmiar kadego elementu i adres pierwszego elementu
mona obliczy adres innych elementw. Znajdmy trzeci element tablicy notify:
an_address = adr(notify)
an_address = an_address + 2

Rezultat tego dziaania jest taki sam jak z poprzedniego przykadu. Funkcja zwracajca adresy dziaa
rwnie na strukturach.
struct{New : USINT, Effort : UINT, Work[26] : USINT, Origin : USINT}
temp_var : struct
an_address = adr(temp_var.Work[8])

an_address zawiera teraz adres smego elementu komponentu Work zmiennej temp_var.

3.5. Wskaniki
Wskanik jest odwoaniem si do zmiennej pod inna nazw. Rysunek poniej prezentuje tak
sytuacj:

Zmienna var_2 ma dynamiczny dostp do zmiennej var_1. Dynamiczny dostp oznacza, e podczas
dziaania programu var_2 jest powizana z var_1. Jakakolwiek zmiana var_1 wie si z tak sam
zmian var_2 i na odwrt, jednake po takim powizaniu korzysta si tylko ze zmiennej
dynamicznej wskazujcej na zmienn statyczn.
Jak przypisa wskanik do zmiennej?

Zmienna wskanikowa musi mie dostp do zmiennej statycznej. Zapis jest nastpujcy:
var_1 : USINT, var_2 : USINT (dynamic)
var_2 ACCESS adr(var_1)

lub podobnie:
var_1 : USINT, var_2 : USINT (dynamic), address : UDINT

53

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

address = adr(var_1)
var_2 ACCESS address

Aby pokaza, jakim narzdziem s wskaniki posuymy si przykadem bez wikszego sensu, ale
trafnie demonstrujcego ten rodzaj zmiennych.
x : USINT, y : USINT, z[10] : USINT
ptr : USINT (dynamic)
x = 2 ;initial assignment
y = 6 ;initial assignment
z[0] = 8 ;initial assignment
ptr access adr(x) ;ptr points to x
y = ptr ;y = 2
ptr access adr(y) ;ptr points to y
ptr = z[0] ;y = 8
ptr access adr(z) ;ptr points to z[0]
ptr = 70 ;z[0] = 70

Wskanik moe wskazywa na rne zmienne, naley jednak pamita, e powinien by tego
samego typu co zmienna, ktr wskazuje. Do czego jeszcze moe by uyty wskanik? Zamiast
uywania tablic struktur, wskaniki mog by uyte do powizania struktur razem. Nazywa si to
zwykle dynamicznie czon list. Dynamicznie dlatego, e moe zmienia si jej rozmiar a czon
dlatego, e elementy musz by ze sob powizane. To wyjanienie stanie si zrozumiae po
przeledzeniu poniszych przykadw.
Mamy trzy zmienne, ktre s prostymi strukturami zawierajcymi liczb i wskanik do nastpnego
elementu. S one uoone w formie listy. Trzeba wyzerowa wszystkie liczby znajdujce si na
licie. Po pierwsze, naley stworzy struktury, wypeni je oraz przyporzdkowa wskaniki.
struct{nxt : UDINT, number : USINT}
var_1 : struct, var_2 : struct, var_3 : struct, current : struct
;fill in the numbers
var_1.number = 26
var_2.number = 8
var_3.number = 70
;assign the pointers
var_1.nxt = adr(var_2)

54

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

var_2.nxt = adr(var_3)
var_3.nxt = 0
current access adr(var_1)

Oznacza to, i nasza lista wyglda teraz tak:

Zmienna wskazuje element na licie, ktry obecnie uywamy. Podobnie jest z indeksem tablicy. Aby
przej przez list naley uy ptli, ktra zostaa ju opisana.
loop
current.number = 0 ;clear the current
;element
exitif current.nxt = 0 ;exit if the end
;of the list
;reached
current access current.nxt ;move to the next
;element in the
;list
endloop

Prosz zauway, e skadnik nxt tej struktury jest adresem kolejnego elementu na licie, w zwizku
z tym nie trzeba znowu uywa funkcji adr(). Spjrzmy na kad iteracj ptli, aby dokadnie
dowiedzie si, w ktre miejsca wskazuj wskaniki i co si dzieje w danym momencie.
Koniec pierwszej iteracji ptli

55

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Biecy wskanik zmieni warto, ktr uy aby wskaza 0. Nastpnie przesun si, aby wskaza
to, co poprzedni element (var_1) wskazywa (var_2).
Koniec powtrzenia drugiej ptli

Jest to koniec ptli, poniewa zosta napotkany warunek wyjcia (nxtcomponent = 0). Zwrmy
uwag na to jak wskaniki poday za naszym biecym wskanikiem, aby porusza si wzdu
listy. Jest kilka dodatkowych, specjalnych wskanikw dla listy. S one po to, aby utrzyma ciek
pocztku listy a moe te i koca listy. Listy posiadaj wskaniki biegnce w obydwu kierunkach,
dlatego te mona porusza si wzdu listy do przodu i do tyu.
Dlaczego wic nie uy tablicy?

Jedn z wielu korzyci uywania wskanikw jest to, e wszystkie informacje pozostaj dokadnie w
tym samym miejscu. Lista moe by przestawiona, ale zmienione zostan tylko wskaniki. Jeeli
uywamy tablicy, kiedy dwa elementy s zamienione, to kady skadnik struktury musi by
skopiowany do nowego miejsca. Jeeli natomiast uywamy listy wskanikowej, to zostawiamy
wszystkie informacje tam gdzie s i przestawiamy tylko wskaniki. Tak samo postpujemy przy
wprowadzaniu elementw do listy. W przypadku tablicy wszystkie elementy po wprowadzeniu

56

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

musz by przesunite, wzdu, ale zamiast tego kiedy uywamy wskaniki, tylko wskaniki musz
by przestawione. Mona to wyranie zaobserwowa na diagramie.

Czasami nie wiadomo ile elementw potrzeba uy w tablicy. Co powinno si wtedy zrobi?
Utworzy tablic tak du jak to moliwe i zmarnowa duo pamici? Utworzy j tak du jak
potrzeba i mie nadziej, e ona tego nie przekroczy? Kiedy uywamy struktur dynamicznych
danych, dodatkowe elementy mog by dodawane podczas uywania, kiedy jest to potrzebne.
Jak dua jest moja zmienna?

Wystpuje jeszcze jedna funkcja, ktr przypisuje si adresom i wskanikom. Podczas uywania
wskanikw nie zawsze wiadomo jak dua jest rzecz, z ktr mamy do czynienia.
Istnieje funkcja, ktra j obliczy. Uywa si jej w podobny sposb do funkcji adr(), czyli tak:
var_size : UINT, var : ANYTHING
var_size = sizeof(var)

Zmienna var_size zawiera liczb bajtw var zajmowan w pamici. Jeli var jest szecioelementow
tablic USINT to var_size te bdzie wynosi 6. Cakiem przydatne jest posiadanie tabeli z liczb
bajtw dla kadego typu danych.

57

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

*) zwraca liczb bitw

Tablice

Teraz powinnimy zna wielko tablicy w bajtach. Trzeba by ostronym, jeeli zmienna jest typu
BOOL, poniewa w tym przypadku sizeof zwrci liczb bitw.
Struktury

Zwrmy uwag na trzeci kolumn w tablicy. Sizeof zawsze zwraca parzyst liczb dla wielkoci
struktury. Dzieje si tak, poniewa kada struktura i wszystkie elementy struktury musz
rozpoczyna si od parzystego adresu. Take, jeli w strukturze element powinien jednak zaczyna
si od nieparzystego adresu, bajt jest pozostawiony wolny a skadnik rozpoczyna si od nastpnego
parzystego adresu. Przykad powinien to wszystko rozjani:
Mamy prost struktur z dwoma skadnikami
struct{item_1 : USINT, item_2 : UDINT}

Deklarujemy zmienn tego typu i wykonujemy sizeof() na niej:


result : UINT, test : struct
result = sizeof(test)

Jaki powinien by rezultat? Patrzc na dugo w powyszej tabeli (kolumna 2), typ USINT ma
dugo 1 a UDINT 4, dlatego te wydaje si, e result powinna wynosi 5. Jednak nie! Wynosi on
6 (uyj kolumny 3 powyszej tabeli). Struktura zawsze zaczyna si od parzystego adresu w pamici.

58

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Oznacza to, e po przydzieleniu bajtu kolejny adres jest nieparzysty. UDINT musi by ustawiony
zaczynajc od parzystego bajtu, wic pusty bajt jest pozostawiony pomidzy.
Jeeli struktura jest zdeklarowana w odwrotny sposb, czyli tak:
struct{item_2 : UDINT, item_1 : USINT}

funkcja sizeof nadal bdzie zwracaa 6. Pusty bajt jest nadal przyczany do koca struktury. Jak
formowana jest struktura, przedstawiona jest poniej.

59

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

4. Funkcje i struktura programu


Rozdzia ten dotyczy czenia wszystkich czci, ktre omwilimy do tej pory, w peny obraz. W
rozdziale zostay opisane take bardzo wartociowe informacje dotyczce funkcji oraz ich tworzenia.
Jest bardzo wane to, aby by zaznajomionym z poprzednimi rozdziaami, ze szczeglnym
uwzgldnieniem rozdziau Wskaniki i zoone typy danych.
Funkcje
Typy funkcji
Struktura programu

4.1. Funkcje
Funkcje s przydatnym narzdziem do pisania programw. Funkcja jest czci kodu, ktry zosta
ju napisany i ktry ma odpowiednie zadanie, np. obliczanie nachylenia kta, umieszczanie tekstu na
wywietlaczu. Funkcja moe przypomina czarn skrzynk. Skrzynka ta ma swoj nazw, ktra
mwi, co ta funkcja robi. Nie trzeba wiedzie co jest w jej rodku, tylko wiedzie jakie s jej wejcia
a jakie wyjcia.

Wystpuj funkcje do przernych zada, takich jak: trygonometria, wywietlanie, operacje na


acuchach, powiadamianie o bdzie, itd.
Co naley zrobi przed uyciem funkcji?

Wikszo bibliotek funkcji musi by importowana do biecego projektu. Jeeli biblioteka


zawierajca funkcj, ktra jest uywana, nie zostaa importowana, to kompilator nie bdzie jej
widzia i zakomunikuje bd. Funkcje przedstawione w przykadach pochodz z systemu, bibliotek
BURTRAP i IEC 1131. Biblioteka systemu jest wbudowana, natomiast dwie pozostae powinny by
60

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

importowane przed uyciem przykadw w tym rozdziale. Prosz odnie si do rozdziau Library
Menager B&R Automation Software Help.
Jak uywamy funkcji?

Funkcj wywouje si jej nazw oraz parametrami wejciowymi i wyjciowymi (umieszczonymi


midzy nawiasami), np.:
DIS_chr(1,0,"O")

To jest funkcja do DISplay (wywietlenia) ChaRacter (znaku) na ekranie B&R 2010 CPU. Funkcja
jest zdefiniowana:
DIS_chr(line, column, char)

Pierwszy parametr line (linia) mwi funkcji, w ktrej linii (0 lub 1) ma by wywietlony znak. Drugi
parametr column (kolumna) mwi funkcji, w ktrej kolumnie ma wywietli znak. Ostatni, trzeci
parametr char jest znakiem, ktry ma by wywietlony zgodnie z lini i kolumn. Zamiast uywa
staych, parametry mog by ustalone zmiennymi.
Jeeli zostanie uyty nieodpowiedni typ zmiennej dla parametru funkcji, to kompilator poinformuje,
e zosta uyty zy typ lub wystpuje za liczba parametrw.
Nazwy funkcji mog by dusze ni 8 znakw, ale tylko pierwszych 8 jest istotnych. Lepiej jest
wpisa ca nazw, poniewa bdzie to bardziej zrozumiae dla nas, jednak nie ma to adnego
znaczenia dla komputera.
Teraz, kiedy znamy ju podstawy funkcji, sprbujmy na kilku przykadach jak wygldaj one w
rzeczywistoci:
Przykad:
Wywietl klasyczny Hello, World!! na wywietlaczu. W tym przykadzie nie s wymagane adne
zmienne i uywamy tutaj nowej funkcji. Pseudokod wyglda nastpujco:
Wywietl Hello w pierwszej linii
Wywietl World w drugiej linii

Kod w jzyku B&R Automation Basic:


DIS_str(0,0,"Hello, ")

61

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

DIS_str(1,0,"World !!")

Funkcja DIS_str wywietla acuch znakw. Jeeli po zdeklarowaniu i skompilowaniu zmiennych


wszystko pjdzie bez bdu na wywietlaczu B&R 2010 powinno pojawi si:

A teraz co bardziej zoonego. Mamy cz sprztu posiadajcego seri alarmw. Wywietl


odpowiedni informacj alarmu. Alarmami s: przegrzewanie, cinienie oleju jest zbyt niskie, nie
ma wystarczajco paliwa. Po tym jak alarm zosta wywoany, wiadomo pozostaje na ekranie do
momentu pojawienia si nastpnej. Oto podstawowy pseudokod:
Jeli wczy si alarm o przegrzaniu to utwrz wiadomo o przegrzaniu
Jeli wczy si alarm o cinieniu oleju to utwrz wiadomo o cinieniu oleju
Jeli wczy si alarm o niskim paliwie to utwrz wiadomo o niskim paliwie
Jeli wczy si jakikolwiek alarm to wywietl skonfigurowan wiadomo
Lub
Wywietl OK.

Kod B&R Automation Basic wyglda nastpujco:


strcpy(message0,"Alarm:")
if too_hot = 1 then
strcpy(message1,"Overheat")
else if oil_press = 1 then
strcpy(message1,"Oil Pres")
else if low_fuel = 1 then
strcpy(message1,"Low Fuel")
endif
if (too_hot=1) or (oil_press=1) or (low_fuel=1)then
DIS_str(0,0,message0)
DIS_str(1,0,message1)
else
DIS_str(0,0,"No Alarm")
DIS_str(1,0," ")

62

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

endif

4.2. Typy Funkcji


Jak dotd okrelenie funkcja byo uywane do opisania wszystkich typw blokw przed
zbudowaniem kodu, ktry moe by wywoany grup parametrw. B&R Automation Basic oferuje
dwa wyranie rne rodzaje funkcji.
Funkcje typu inline
Bloki funkcyjne
Bloki funkcyjne D-I-Y

4.2.1. Funkcje inline


Funkcja inline jest funkcj, ktra zwraca dokadnie jeden element danych (moe to by tablica lub
struktura), ktry moe by uywany jako operand w wyraeniu. Symbolicznie mona przedstawi to
tak:

Przykad:
Masz aplikacj, dla ktrej trzeba znale stopie nachylanie kta dla oblicze matematycznych. W
bibliotekach mona znale funkcj COS okrelon w ten sposb:
result = COS(angle)

gdzie wynik i kt nachylenia s typu REAL. Jeeli uyjesz funkcji tak jak tutaj, nic si nie stanie.
COS(my_angle)

Wynik funkcji jest obliczony i nie jest do niczego przypisany. Najprostszym sposobem na to, aby
uy funkcji prawidowo jest przydzielenie wyniku do zmiennej:
my_result = COS(my_angle)

63

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Wystpuj lepsze i bardziej wydajne sposoby uywania funkcji inlines. Okrelenie inline (kod
wbudowany) oznacza, e wynik moe by uywany natychmiast i moe by operandem w
wyraeniu. Przyjrzyjmy si bardziej zoonemu przykadowi.

Przykad:
W aplikacji wystpuje warto kta angle_X i kta angle_Y, trzeba oceni warto wyraenia.
SIN(angle_X) x COS(angle_Y) + SIN(angle_Y) x COS(angle_X)

Wiadomo, e wynik inline moe by uywany natychmiast, wic mona to napisa w B&R
Automation Basic w taki sam sposb jak normalny matematyczny wzr.
z = SIN(angle_X)*COS(angle_Y)+SIN(angle_Y)*COS(angle_X)

Funkcja inline nie zawiera statycznych danych. Za kadym razem jest wywoywana t sam grupa
parametrw, wynik jest ten sam.
B&R dostarcza kilka bibliotek na temat funkcji z wbudowanym kodem inline z szerokim opisem ich
funkcjonalnoci. System BURTRAP, AsMath oraz biblioteki IEC 1131 zawieraj funkcje inline.
Pena lista wszystkich funkcji w tych bibliotekach jest opisana w systemie pomocy do B&R
Automation Studio.

4.2.2. Bloki funkcyjne


Blok funkcyjny (dalej zwany FBK) dla jzyka sterownikw PLC okrela si jako funkcj, ktra
zwraca jedn lub wicej wartoci. Symbolicznie wyglda to tak:

FBK nie mog by uywane w wyraeniach takich jak funkcje typu inline, poniewa one zwracaj
informacje do grupy zmiennych. Wszystkie wartoci zmiennych wyjciowych i niezbdne zmienne
wewntrzne s trzymane z dala od jednego wywoania FBK do nastpnego. Oznacza to, i
64

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

wywoanie tego samego bloku funkcji z tymi samymi zmiennymi wejciowymi nie zawsze daje
takie same zmienne wyjciowe.

Wystpuj dwie rne metody wywoania FBK: normalna i alias. Na pocztku zajmiemy si
wywoaniem normalnym.

Normalne wywoanie FBK

Przy normalnym wywoaniu FBK wszystkie parametry s w nim wyszczeglnione.. Wyglda to tak
jak normalne wywoanie funkcji. Na przykad uywajc wyszego licznika FBK
CTU(input, reset, limit, limit_reached, counter).
Gdzie input, reset i limit s parametrami wejciowymi a limit_reached i counter s parametrami
wyjciowymi. Nie mona napisa:
Z = CTU(input, reset, limit,limit_reached, counter)

Jest to bezsensowne kompilator poinformuje o bdzie. Funkcja ta posiada grup a nie pojedynczy
parametr, dlatego te nie mona jej przydzieli do zmiennej lub uywa w wyraeniu.
Wywoanie alias

Pozwala na nazwanie poszczeglnych zmiennych funkcji i na dziaania na nich. Nazwa alias musi
przestrzega tych samych zasad, co nazwa zmiennej. Przykad wywoania alias:
counter_1.CU = input
counter_1.R = reset
counter_1.PV = limit
counter_1 FUB CTU()
limit_reached = counter_1.Q
counter = counter_1.CV

Rnice pomidzy wywoaniem alias i normalnym

Normalne wywoanie FBK jest proste do zrozumienia dla kogo, kto dopiero rozpoczyna lub dla
kogo kto jest przyzwyczajony do uywania funkcji w innym jzyku. Wszystko zawarte jest w linii z
wywoaniem. Parametry alias s przydzielane i wczytywane przy uyciu struktury oraz nie s w
ogle widoczne w linii. Wywoania alias s take szybsze, poniewa posiadaj oddzieln przestrze
65

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

pamici, do ktrej dostp ma blok funkcji. Zmienne struktury alias mog by przydzielane take
bezporednio, czyli tak:
counter_1.CU = input
counter_1.R = reset
counter_1.PV = limit
counter_1 FUB CTU()
counter_1.CV = counter_1.CV + 5
counter_1 FUB CTU()
limit_reached = counter_1.Q
counter = counter_1.CV

4.2.3. Bloki funkcyjne D-I-Y


Jest moliwe stworzenie wasnych, przerobionych blokw funkcyjnych (nie funkcji inline). Aby to
zrobi trzeba po prostu napisa kod B&R Automation Basic jako normalny i wywoa edytor FBK w
celu okrelenia wej i wyj.
Przykad:
Nasza funkcja nazywa si ADD_OVER. Stwrzmy prost funkcj dodania USINT, z dodatkiem,
ktry okreli nam czy jest nastpio przepenienie. Nasz algorytm wyglda tak:
result = in_1 + in_2
if result < in_1 or result < in_2 then set overflow flag

Kod w B&R Automation Basicu:


result, in_1, in_2 : USINT, overflow : BOOL
result = in_1 + in_2
if (result < in_1) or (result < in_2) then
overflow = 1
else
overflow = 0
endif

Po napisaniu kodu i zdeklarowaniu zmiennych naley skonstruowa blok funkcji, eby inne
programy wiedziay jakie s wejcia i wyjcia. Musimy uy edytora FBK i powinnimy stworzy
FBK, ktry wyglda tak:
66

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Nasz blok funkcji moe by teraz uywany w ten sam sposb jak FBK dostarczany przez B&R.
Lista parametru przemieszcza si z gry na d, z lewa na prawo, i aby wywoa blok funkcji naley
uy nastpujcego wywoania:
ADD_OVER (input_1, input_2, answer, o_flow)

Testowanie naszego FBK

Zanim stworzymy nasz blok funkcji, dobrym pomysem na pocztek jest wyprbowanie go jako
mini programu. W ten sposb mona najpierw sprawdzi czy zostay popenione jakie bdy. Jeeli
jestemy pewni, e kod dziaa bez zarzutu, to naley skopiowa kod do bloku funkcji i okreli
wejcia oraz wyjcia za pomoc edytora FBK.
Przekazywanie wskanikw do FBK

Potrafimy ju napisa FBK uywajc prostych typw danych, ale co trzeba zrobi jeli chcemy uy
acuchw znakw, tablicy czy struktury jako parametrw wejciowych i wyjciowych? Wtedy
wanie trzeba uy wskanikw. Jeeli nie jest Ci znana sekcja Wskaniki i zoone typy danych
z tego rozdziau to zalecane jest najpierw j przeczyta.
Nie mona przekazywa struktury ani tablicy jako parametru bezporednio do bloku funkcji, ale
mona wysa adres. Wtedy blok funkcji moe zaoy wskanik do tego adresu i moe mie dostp
do informacji bez adnych dalszych problemw.
Przykad:
Mamy string (acuch znakw) i musimy odwrci kolejno liter, tj. podane sowo loot FBK
zamieni na tool. Mamy podany adres zmiennej tekstowej i musimy j zmieni.

67

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Wersja 1
1. Pocz wejciowy adres danej string z docelowym adresem
2. Znajd dugo wejciowej danej string
3. Przejd przez wszystkie elementy na tablicy zaczynajc od koca
3.1

Skopiuj biecy element do nastpnej pozycji w nowej tablicy

3.2

Uaktualnij pozycj w nowej tablicy

Potrzebujemy kilka zmiennych


string[40] : USINT (dynamic), string_out[40] : USINT (dynamic),
length : UINT, new_index : UINT, index : UINT

Kod w jzyku B&R Automation Basic wyglda nastpujco:


; 1 (adr) and 2
length = strlen(adr(string))
; 3
index = length 1
loop new_index = 0 to length1 do
; 3.1
out_string[new_index] = string[index]
; 3.2
index = index 1
endloop

Zwrmy uwag na podwjne uycie wyraenia loop. Jeden licznik jest tak naprawd czci ptli
(new_index) a drugim (index) zajmujemy si oddzielnie.
Kod B&R Automation Basic podany powyej jest ju skoczony, ale trzeba go jeszcze zamieni w
FBK. Powinno to wyglda tak:

68

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

Wszystko jest teraz zrozumiae i moemy uy bloku funkcji. Napiszmy may program, aby go
wyprbowa.
forwards[10] : USINT, backwards[10] :USINT
strcpy(adr(forwards),"Hello")
reverse((adr(forwards),adr(backwards))
DIS_str(0,0,adr(forwards))
DIS_str(1,0,adr(backwards))

Na ekranie CPU powinno si pojawi:

4.2. Struktura Programu


Czym waciwie jest program? Program jest zadaniem, ktre dziaa na PLC. Sowa takie jak
zadanie czy program s stosowane zamiennie w tym opracowaniu, jednak w innych
opracowaniach B&R 2000 SYSTEM uywa si raczej sowa zadania (ang. task).
Program skada si z dwch gwnych czci: sekcji gwnej oraz z sekcji pocztkowej. Maj one
rne wasnoci, jednak nadal s one tylko czciami kodu. Kade zadanie powinno wykonywa
okrelon prac. Jeeli w projekcie znajduje si wicej czci sprztu to powinno zosta napisane
oddzielne zadanie dla kadej czci.
Sekcja Gwna

Ta sekcja kodu wykonuje ca prac programu. Dziaa ona cyklicznie, czyli dziaa stale tak samo, od
pocztku do koca w nieskoczonej ptli. Jest to bardzo wane, aby o tym pamita przy pisaniu
programu. Program musi by napisany tak by dziaa wtedy, kiedy w kko si powtarza. Program
nie moe by umieszczony w ptli Twojego programu. Oto przykad jak nie powinno by:
69

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

Perfection in Automation

...
loop
...
exitif on_switch = 1
endloop

Powstanie problem, jeeli program bdzie obecny w tej ptli i bdzie czeka na wczenie
(prawdopodobnie manualne) przecznika. Moe to zabra duo czasu (kilka minut, godzin, ...). Ten
rodzaj czekajcej ptli nie moe by czci programu. Wanie dlatego specjalna konstrukcja select
B&R Automation Basic jest bardzo uyteczna w aplikacjach na PLC.
Ta sekcja programu powinna by krtka. Jest okrelona maksymalna ilo czasu, ktr program
moe zuy na jeden cykl (czas cyklu zadania).
Sekcja inicjalizacyjna

Sekcja ta dziaa tylko raz, na pocztku programu. Zwykle jest uywana do inicjalizacji staych,
ustawienia wartoci pocztkowych zmiennych i do wykonania jakiej operacji tylko raz.
; czesc inicjalizacyjna programu (wykonywana tylko raz)
...
...
; czesc cykliczna programu
...
...
...

70

B&R Automation Basic


Copyright 2004 by B&R Automatyka Przemysowa Sp. z o.o.
All rights reserved.

You might also like