Lab View
Lab View
Lab View
124
Podstawy programowania
wLabView (2)
Ptla for
Ptla for wykonuje si zadan liczb razy. Decyduje otym
warto przekazana do ikony N. Liczb iteracji ptli moemy poda jako sta lub wylicza j podczas dziaania
programu. Moliwa jest te sytuacja, w ktrej nie musimy jej podawa, ale o tym dalej. Wewntrz ptli jest
dostpny licznik, z ktrego moemy pobra numer aktualnej iteracji. Licznik zaczyna zliczanie od 0 idlatego
zwraca warto N-1.
Najlepiej pozna waciwoci ptli w sposb praktyczny dla tego otwrzmy sobie LabView nowy, czysty
dokument. Przechodzimy na diagram iklikajc prawym
przyciskiem myszy otwieramy palet funkcji. Wybieramy
Programming -> Structures -> For Loop iwstawiamy j
na nasz diagram. Tym razem robimy to nieco inaczej ni
zwykle. Nie przecigamy jej na diagram, ale po klikniciu wikon ptli izmianie wygldu kursora przechodzimy do okna diagramu i rysujemy prostokt obejmujcy
fragment kodu, ktry ma si wykonywa w ptli. My
oczywici nie mamy jeszcze adnego diagramu, dlatego rysujemy niewielki prostokt. Zwrmy uwag na
przycisk Run natychmiast sygnalizuje bdy. Powodem
jest brak liczby iteracji.
Do ikony N znajdujcej si wlewym, grnym rogu
musimy przekaza warto okrelajc liczb iteracji ptli. Wnaszym wypadku bdzie to staa rwna 10. Wtym
celu najedamy na ikon i gdy wygld kursora zmieni
si na szpulk, wybieramy Create Constant iwpisujemy warto 10. Poczmy teraz ikon i zkrawdzi p-
124-129_labview.indd 124
2013-04-30 10:38:01
tli. Na krawdzi powstanie tzw. tunel wyjciowy przekazujcy dane zptli na zewntrz. Po zewntrznej stronie
ptli naley korzystajc zCreate Indicator wygenerowa
wskanik. Tak samo wewntrz ptli na poczeniu naley
wygenerowa wskanik mona nazwa go wewntrzny.
Jeszcze raz poczmy ikon zkrawdzi ptli. Tym razem
kliknijmy prawym klawiszem myszki na powstaym tunelu wyjciowym iwybierzmy Tunnel Mode -> Last Value (w starszych wersjach LabView Disable Indexing).
Na zewntrz ptli przy tym tunelu kreujemy wskanik
inazywamy go zewntrzny. Diagram powinien wyglda jak na rysunku11.
Proponuj umieszczenie obok siebie okien, wczenie animacji (przycisk Highlighting Execution) iuruchomienie programu. Oczywicie, ptla wykona si 10 razy,
a wskanik nazwany wewntrzny bdzie wywietla
numery kolejnych iteracji od 0 do 9. Jego warto bdzie aktualizowana przy kadym obiegu ptli. Wskaniki
umieszczone na zewntrz ptli wywietl wartoci dopiero po 10 iteracjach, wskanik zewntrzny wskazuje
numer ostatniej iteracji, natomiast Array jest tablic zawierajc numery wszystkich iteracji.
Skd wzia si tablica? Ot jest to jedna zcech ptli
umoliwiajca automatyczne tworzenie tablic. Po kadej
iteracji dane gromadzone s wtablicy mog zniej by
rwnie pobierane.
Wspomniaem wczeniej, e nie zawsze musimy
okrela liczb iteracji ptli. Kiedy pobieramy dane
z tablicy ptla wykona si tyle razy, ile elementw si
w niej znajduje. Sprawdmy to, tworzc nowy czysty
diagram Vi. Umiemy na diagramie ptl for proponuj zpoprzedniego programu skopiowa tablic Array.
Nastpnie, w oknie diagramu, klikajc na niej prawym
przyciskiem myszy naley wybra Change to Constant.
Uzyskamy w ten sposb sta tablicow, do ktrej proponuj wpisa kilka przykadowych liczb. Podczamy j
do krawdzi ptli. Zwrmy uwag, e wtym momencie
przycisk Run nie jest ju przeamany, wic moemy uruchomi nasz program bez okrelania liczby iteracji.
Dodajmy jeszcze kilka elementw. Diagram powinien
wyglda jak na rysunku 12. Bdzie on dodawa do elementw ztablicy po lewej stronie numer iteracji izapisywa do wskanika wyniki. Wskanik Iteracje zawiera
numer ostatniej iteracji (pamitajmy, e jest to N-1).
Rejestry przesuwne
Ptle w LabView, oprcz gromadzenia elementw w tablicach, maj jeszcze inne waciwoci niedostpne wtypowych jzykach programowania. Mona za ich pomoc
tworzy rejestry przesuwne. Okrelenie to bardziej jest
znane elektronikom ni programistom. Zadaniem rejestrw jest przekazywanie informacji pomidzy poszczeglnymi iteracjami ptli.
Otwrzmy nowy dokument i umiemy w nim ptl for. Skonfigurujmy j w taki sposb, aby wykonaa
si 4 razy. Aby umieci rejestr przesuwny klikamy na
krawdzi ptli prawym przyciskiem myszy i z menu
wybieramy Add Shift Register. Zlewej strony do rejestru
przesuwnego doczamy sta iwpisujemy 0. Wewntrz
umieszczamy funkcj inkrementacji iwskanik wywietlajcy dane na panelu czoowym. Gotowy diagram pokazano na rysunku 13.
Proponuj uruchomienie programu w trybie animacji iprzeledzenie jego dziaania. Przy pierwszej iteracji
do rejestru przesuwnego
zostanie przekazana warto pocztkowa, ktra
wewntrz ptli jest pobierana od lewej strony.
Nastpnie, po zwikszeRysunek 12. Ptla for pobieranie
niu o 1, jest zapisywana danych ztablicy
do rejestru przesuwnego
zprawej strony. Przy kolejnej iteracji
poprzednio zapisana warto jest dostpna wrejestrze przesuwnym zlewej strony itd. Pokazany tutaj przykad inicjalizuje rejestr przesuwny
Rysunek 13. Ptla for
wartoci 0. Mona pomin inicjali- Rejestr przesuwny
zacj (wpewnych przypadkach
jest to wskazane), ale musi to
by zrobione wiadomie, poniewa przy kolejnych uruchomieniach (wywoaniach) programu rejestr bdzie przechowywa wartoci zpoprzedniego Rysunek 14. Rejestr przesuwny
wywoania, co moe skutkowa przykad 2
niespodziewanymi
rezultatami dziaania. Dlatego zawsze,
jeli jest to moliwe,
naley inicjalizowa
rejestr wartoci poRysunek 15. Sprzenie zwrotne
cztkow.
Z m o d y f i ku j m y
teraz program, aby wyglda jak na rysunku 14. Wtym
celu klikamy na rejestrze przesuwnym prawym klawiszem myszy iwybieramy Add Element lub rozcigamy go
tak, aby zawiera 4 elementy. Umiemy wrodku ptli
wskaniki. Na panelu czoowym proponuj uoenie elementw, tak jak na rysunku 14. Wskanik SR1 odpowiada elementowi 1 SR2 elementowi 2 itd.
Po uruchomieniu programu wida jak przesuwaj si
wartoci wrejestrze. Zmniejszaj si przy kadej iteracji
o 1. W ten sposb mona uzyska informacj nie tylko
o danych z poprzedniej iteracji, ale rwnie wczeniejszych.
Feedback Node
Podobne dziaanie do rejestrw przesuwnych ma Feedback Node, czyli sprzenie zwrotne. Dziki niemu moemy rwnie uzyskiwa informacje owyniku ostatniej
iteracji, ale diagram jest znacznie bardziej przejrzysty
izrozumiay. Jeli potrzebujemy danych zjeszcze wczeniejszych iteracji, to jest korzystniej stosowa rejestry
przesuwne. Struktura ta jest dostpna wpalecie struktur.
Aby umieci j wptli naley przecign zpalety do
wntrza ptli.
Przygotujmy program jak na rysunku 15 iprzeledmy jego dziaanie. Po umieszczeniu struktury Feedback
Node wewntrz ptli wyglda ona inaczej ni na rysunku. Terminal do inicjalizacji znajduje si pod strzak.
Mona to zmieni klikajc prawym przyciskiem myszy
iwybierajc Move Initialize One Loop Out. Teraz terminal, do ktrego przekazujemy warto pocztkow znajduje si zlewej strony ptli. Podobnie jak wdla rejestru
przesuwnego polecam dbao oinicjowanie zawartoci,
poniewa obowizuj tutaj takie same zasady, jak dla rejestrw przesuwnych.
124-129_labview.indd 125
125
2013-04-30 10:38:01
Struktura case
Kolejnym elementem jzyka G jest struktura Case. Funkcjonalnie odpowiada ona instrukcji switch znanej zjzyka C. Na podstawie wartoci zmiennej umoliwia wybranie i wykonanie waciwego fragmentu programu. Akceptuje zmienne logiczne, numeryczne i tekstowe oraz
specjaln zmienn niosc informacje obdzie. Ma posta nakadajcych si na siebie ramek. Wkadej znich
umieszcza si kod odpowiadajcy danemu przypadkowi.
Sprbujmy sprawdzi dziaanie struktury. W nowym, czystym dokumencie na panelu czoowym zpalety Ring & Enum wstawiamy Text Ring. Klikajc prawym
przyciskiem myszki wybieramy Edit Items. Teraz klikamy
na przycisk Insert i w podwietlonym polu wpisujemy
np. literk D. Nastpnie ponownie naciskamy Insert
i wpisujemy literk C, ponownie B i ponownie
A. Zamykamy okno przyciskiem OK. Nasz Text Ring
zawiera teraz cztery pola wyboru opisane za pomoc liter
A, B, C iD. Po wybraniu opcji A, funkcja zwrci warto
0, dla opcji B warto 1 itd. Przejdmy teraz na diagram
izpalety Structures wstawiamy Case Structure (tak samo,
jak ptl). Podczamy nasz Text Ring do terminala ze
znakiem pytajnika na lewej krawdzi ptli. Struktura zawiera teraz dwie ramki, opisane jako 0 i1. Pomidzy
ramkami mona przechodzi za pomoc grnej krawdzi
ptli klikajc wmae strzaeczki lub rozwijajc list wyboru. Do ramki 0 wstawmy z palety String -> String
Constant iwpiszmy tekst Wybrano opcj A. Nastpnie
podczmy sta do krawdzi ptli. Pojawi si tunel wyj-
126
ciowy z biaym kwadratem w rodku. Zwrmy uwag, e przycisk Run jest przeamany sygnalizujc bd.
Przyczyn bdu jest nieokrelenie wartoci zwracanej
przez tunel wyjciowy wprzypadku, gdy wykona si kod
zawarty wramce 1. Przejdmy do ramki 1 ipodczmy
do tego samego tunelu sta tekstow, wpiszmy Wybrano
opcj B. Teraz ju nie ma informacji obdzie. Dla kadego przypadku jest niezbdne okrelenie wartoci tuneli
wyjciowych.
Tunele wejciowe mog przekazywa wartoci tylko
do jednej ramki. Klikajc prawym przyciskiem myszy na
krawdzi ramki wybierzmy Add Case After. Spowoduje to
dodanie ramki znumerem 2 tam rwnie wstawmy sta
podczon do tunelu wyjciowego iwpiszmy Nieoczekiwana warto. Znw klikamy na krawdzi ptli, zmenu
wybieramy Make This The Default Case. Obok liczby 2
pojawi si napis Default. Oznacza to, e dla niezdefiniowanych przypadkw wykona si kod zawarty wtej ramce.
Tu bdzie to dla opcji C iD. Nie wymaga si okrelania,
ktra zramek jest okrelona jako Default tylko wwypadku
zmiennych logicznych. Na rysunku 17 pokazano przykadowy program, wywietlajcy wpolu string napis zaleny
od wybranej wartoci wkontrolce ring.
Ptla while
Struktura sequence
Struktura sekwencji umoliwia wykonanie instrukcji
w odpowiedniej kolejnoci. Jest szczeglnie przydatna
w miejscach, w ktrych fragmenty kodu nie s ze sob
bezporednio poczone, to znaczy nie przekazuj sobie adnych parametrw. Takie funkcje bd wykonywane pseudorwnolegle. Nie jestemy wstanie okreli,
ktra wykona si pierwsza. Z pomoc przychodzi nam
struktura Sequence. W LabView zostaa zaimplementowana wdwch postaciach. Flat Sequence Structure charakteryzuje si tym, e na diagramie widoczne s jednoczenie wszystkie ramki ifunkcje wnich zawarte. Daje to
przejrzysto kodu iumoliwia atw analizie. Dane pomidzy ramkami przekazywane s watwy sposb przez
tunele. Druga posta to Stacked Sequence Structure.
Jest wniej tylko jedna ramka, apozostae s ukryte pod
spodem. Przekazywanie wartoci pomidzy ramkami odbywa si zwykorzystaniem specjalnego zacisku. Korzystanie zniej jest korzystne wwypadku, gdy kod zawarty
wramce jest duy iramki nie mieszcz si na monitorze.
Struktur sekwencji czsto wykorzystuje si podczas
komunikacji zprzyrzdem pomiarowym, gdzie po wysaniu polecenia musimy odczeka pewien czas, aby urzdzenie mogo np. wykona pomiar iodesa wynik. Poniewa nie wszyscy dysponuj przyrzdem pomiarowym
i nie umiemy ich jeszcze programowa, przygotujemy
prosty przykad polegajcy na zawieceniu dwch diod
LED w odpowiedniej kolejnoci: zawiecenie si LED 1
symbolizuje wysanie polecenia do przyrzdu, a LED 2
otrzymanie odpowiedzi.
Program powinien:
zapali diod LED 1
odczeka 0.5s
zapali diod LED 2
Otwrzmy teraz nowy Vi. Woknie diagramu umieszczamy dwie diody zpalety Boolean. Na diagramie zpalety Timing pobieramy funkcj Wait, podpinamy do niej
sta iwpisujemy 500 spowoduje ona zwok 500 ms.
Do diod podpinamy sta owartoci 1. Diagram powinien
wyglda jak na rysunku 18.
124-129_labview.indd 126
2013-04-30 10:38:01
Dociekliwi mog
sprawdzi, e na kolejno wykonywania
programu nie wpywa
umieszczenie ikon na
diagramie ani kolejno ich wstawiania.
Rysunek 19. Przykad uycia
Flat Sequence
To rodowisko decyduje, w jakiej kolejnoci
zostan wykonane wszystkie procedury. Uruchamiajc program zauwaymy
jednoczesne, natychmiastowe zawiecenie si diod
ipsekundowe opnienie
Rysunek 20. Przykad
przed zakoczeniem prouycia Stacked Sequence
gramu. Dzieje si
tak,
poniewa
funkcje umieszczone na diagramie s wykonywane rwnolegle, jak
Rysunek 21. Przykad uycia
niezalene prograFormula Node
my. Aby uzyska
podan kolejno wykonywania instrukcji naley uy
sekwencji. Korzystajc ze struktury Flat Sequence Structure, dostpnej w palecie struktur, zmodyfikujmy nasz
diagram, aby wyglda jak na rysunku 19.
Po wstawieniu struktury klikamy prawym przyciskiem myszki i wybieramy Add Frame After (dodaje
ramk po aktualnej) lub Add Frame Before (dodaje ramk
przed aktualn). Teraz wszystko wykona si we waciwej
kolejnoci. Diagram jest przejrzysty aprzekazywanie danych jest zrozumiae.
Zrbmy taki sam program korzystajc ze struktury Stacked Sequence Structure. Program bdzie dziaa
dokadnie tak samo, a rnice polegaj na wygldzie
struktury oraz przekazywaniu parametrw pomidzy
ramkami. Aby przesa warto ze staej znajdujcej si
w pierwszej ramce do kolejnych, musimy klikn prawym przyciskiem myszki na krawdzi ramki z menu
lokalnego i wybra Add Sequence Local. Spowoduje to
wstawienie na krawdzi ramki zacisku, do ktrego doczamy przekazywany parametr. Po tej operacji, w terminalu zostanie wywietlona strzaka skierowana na zewntrz ramki, oznaczajca miejsce przekazania wartoci
do zacisku. Od tej pory w kolejnych ramkach znajduje
si zacisk ze strzak skierowan do orodka, z ktrego
wdowolnej ramce moemy pobiera przekazywany parametr. Struktura ta jest wykorzystywana w przypadku
duej liczby sekwencji, aby ograniczy wielko diagramu. Przykad uycia Stacked Sequence pokazano na rysunku20.
Formula Node
Formula Node jest struktur przydatn podczas wykonywania oblicze matematycznych. Umoliwia zapisanie
kodu wpostaci podobnej do tradycyjnych jzykw programowania i pozwala na uniknicie tworzenia duych
diagramw wwypadku skomplikowanych oblicze.
Skadnia jest podobna do jzyka C, dostpne s funkcje matematyczne, takie jak sinus, cosinus i inne oraz
instrukcje warunkowe np. if, ptle Do, While, For iinne
elementy dostpne wjzyku C. Linie kodu mog zawie-
124-129_labview.indd 127
127
2013-04-30 10:38:01
128
Zmienne lokalne
Zmienna lokalna jest dostpna tylko w obrbie jednego diagramu. Pozwala na zapis lub odczyt wartoci wrnych jego miejscach bez prowadzenia pocze. Zmienn identyfikuje si po nazwie elementu
na panelu czoowym. Moe by przypisana zarwno
do kontrolki (controls) jak ido wskanika (indicator).
Zapis wartoci do zmiennej zwizanej z kontrolk
pozwala na jej uycie jako wskanika jest moliwa
rwnie sytuacja odwrotna.
Zmienn lokaln mona utworzy na dwa sposoby. Pierwszy polega na wstawieniu w oknie diagramu symbolu zmiennej lokalnej zpalety Structures po
klikniciu myszk i wskazaniu na licie zmiennej,
ktr ma reprezentowa. Drugi polega na klikniciu
prawym klawiszem myszy na ikonie elementu zpanelu czoowego iwybraniu opcji Create -> Local Variable. Wtedy zostanie wygenerowana zmienna lokalna
reprezentujca dany element. Klikajc na symbolu
zmiennej prawym przyciskiem myszki mona wybra
czy dane maj by do niej zapisane (Change To Write), czy z niej odczytywane (Change To Read). Gdy
ramka symbolu zmiennej jest pogrubiona i terminal
znajduje si z prawej strony, to jest skonfigurowana
w taki sposb, aby odczytywa z niej dane. Gdy jest
cienka, aterminal zlewej strony, to mona zapisywa
do niej dane.
Przygotujmy teraz przykad, wktrym za pomoc
zmiennej lokalnej bdziemy sterowali dwiema ptlami. W nowym Vi umiemy obok siebie dwie ptle
While. Dodajmy przycisk Stop, podczmy go do zacisku kontynuacji (czerwona kropka) jednej z ptli.
Korzystajc z opisu powyej umiecimy zmienn
lokaln reprezentujc przycisk Stop i podczmy j
do zacisku kontynuacji drugiej ptli. W obu ptlach
wstawmy funkcj opniajc Wait oraz wskanik Waveform Chart. Nastpnie trzeba go doczy do licznika iteracji i. Gotowy program powinien wyglda
jak na rysunku 24.
Poniewa pojawi si bd zwizany z niewaciw akcj przycisku Stop, naley klikajc prawym
przyciskiem myszki na przycisku woknie panelu czoowego wybra opcj Mechanical Action -> Switch
124-129_labview.indd 128
2013-04-30 10:38:01
Zmienne globalne
(Global Variable)
Rysunek
25. Wygld
panelu
czoowego
zmiennej
globalnej.
Rysunek 26. Przykad zastosowania zmiennej globalnej program zapisujcy dane do zmiennej
Podsumowanie
Do tej pory poznalimy rodowisko oraz podstawowe
funkcje strukturalne jzyka G. Wkolejnej czci zajmiemy si operacjami na tablicach iklastrach danych.
Wiesaw Szaj
[email protected]
124-129_labview.indd 129
129
2013-04-30 10:38:01