70
Perfection in Automation B&R Automation Basic Opis języka Document version: 1.0 PL B&R Automation Basic Copyright 2004 by B&R Automatyka Przemysłowa Sp. z o.o. All rights reserved. 1

B&R Automation Basic PL

Embed Size (px)

DESCRIPTION

B&R Automation Basic PL

Citation preview

  • 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.

    1

  • 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.

    2

  • 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.

    3

  • 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.

    4

  • 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.

    5

  • 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.

    6

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

    B&R Automation Basic

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

    7

    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.

  • 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.

    8

  • 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

    B&R Automation Basic

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

    9

  • 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

    B&R Automation Basic

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

    10

  • 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

    = < > >=

  • 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:

    B&R Automation Basic

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

    12

  • 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

    B&R Automation Basic

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

    13

  • 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

    B&R Automation Basic

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

    14

  • 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

    B&R Automation Basic

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

    15

  • 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

    B&R Automation Basic

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

    16

  • 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

    B&R Automation Basic

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

    17

  • 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.

    B&R Automation Basic

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

    18

  • 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

    B&R Automation Basic

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

    19

  • 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.

    B&R Automation Basic

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

    20

    Wersja 1

  • 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:

    B&R Automation Basic

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

    21

  • 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.

    B&R Automation Basic

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

    22

  • 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

    B&R Automation Basic

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

    23

  • 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:

    B&R Automation Basic

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

    24

  • 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

    B&R Automation Basic

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

    25

  • 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

    B&R Automation Basic

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

    26

    alarm = 1

  • 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:

    B&R Automation Basic

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

    27

  • 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.

    B&R Automation Basic

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

    28

  • 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

    B&R Automation Basic

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

    29

  • 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

    B&R Automation Basic

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

    30

  • 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.

    B&R Automation Basic

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

    31

  • 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

    B&R Automation Basic

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

    32

  • 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:

    B&R Automation Basic

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

    33

  • 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:

    B&R Automation Basic

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

    34

  • 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:

    B&R Automation Basic

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

    35

  • 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

    B&R Automation Basic

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

    36

  • 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

    B&R Automation Basic

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

    37

  • 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

    B&R Automation Basic

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

    38

    when warunek2

  • 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:

    B&R Automation Basic

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

    39

  • 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

    B&R Automation Basic

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

    40

  • 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

    B&R Automation Basic

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

    41

  • 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

    B&R Automation Basic

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

    42

  • 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.

    B&R Automation Basic

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

    43

  • 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

    B&R Automation Basic

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

    44

  • 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:

    B&R Automation Basic

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

    45

  • 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

    B&R Automation Basic

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

    46

  • 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.

    B&R Automation Basic

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

    47

  • 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

    B&R Automation Basic

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

    48

  • 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:

    212

    212 )()( yyxxdyst +=

    SQRT(a) jest funkcj obliczajc pierwiastek - ( a ). Do obliczania potg liczb suy funkcja

    EXPT(a,b) - ( ). ba

    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:

    B&R Automation Basic

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

    49

  • 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

    B&R Automation Basic

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

    50

  • 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

    B&R Automation Basic

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

    51

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

    B&R Automation Basic

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

    52

  • 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

    B&R Automation Basic

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

    53

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

    B&R Automation Basic

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

    54

  • 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

    B&R Automation Basic

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

    55

  • 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

    B&R Automation Basic

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

    56

  • 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.

    B&R Automation Basic

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

    57

  • 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.

    B&R Automation Basic

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

    58

  • 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.

    B&R Automation Basic

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

    59

  • 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

    B&R Automation Basic

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

    60

  • 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, ")

    B&R Automation Basic

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

    61

  • 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," ")

    B&R Automation Basic

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

    62

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

    B&R Automation Basic

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

    63

  • 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

    B&R Automation Basic

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

    64

  • 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

    B&R Automation Basic

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

    65

    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

  • 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:

    B&R Automation Basic

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

    66

  • 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.

    B&R Automation Basic

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

    67

  • 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:

    B&R Automation Basic

    Copyright 2004 by B&R Automatyka Przemysowa