Laboratorium wirtualne 1/Moduł 1 - ćwiczenie 1

From Studia Informatyczne

wersja beta 02


LABORATORIUM WIRTUALNE 1

Ćwiczenie 1 - Środowisko programistyczne LabVIEW

Grafika:LW1_M1_Slajd_intro.png

Grafika:LW1_M1_Slajd01.png

LabVIEW jest jednym z najpopularniejszych środowisk przeznaczonych do tworzenia szeroko aplikacji przeznaczonych do rejestracji, przetwarzania i prezentacji danych pomiarowych. Budowanie aplikacji nie jest oparte na klasycznym języku programowania (C , BASIC lub Pascal) a polega na kodowaniu zadanych czynności w sposób graficzny (język G). Najlepszym sposobem zdobycia umiejętności posługiwania się tym środowiskiem (ale dotyczy to w równym stopniu każdego innego oprogramowania) są praktyczne ćwiczenia począwszy od prostych przykładów poprzez bardziej wyrafinowane do zaawansowanych. Poniższa prezentacja ma właśnie taki cel. Przybliża ona składniki środowiska, ich przeznaczenie oraz sposób obsługi, a następnie omawia technikę programowania w oparciu o proste aplikacje.


Grafika:LW1_M1_Slajd02.png

Głównymi oknami środowiska LabVIEW są: okno płyty czołowej (Front Panel) oraz okno diagramu (Block Diagram). Pierwsze z nich służy do projektowania płyty czołowej (panelu) aplikacji, drugie natomiast jest oknem, w którym buduje się w sposób graficzny kod programu. Na slajdzie przedstawiono okna te z uruchomioną już przykładową aplikacją. Zwykle po uruchomieniu okna te będą puste. Aplikacje stworzone w środowisku LabView często nazywane są Wirtualnymi Przyrządami (Virtual Instruments). Przez producenta oprogramowania są one nazywane VI (wi aj).


Grafika:LW1_M1_Slajd03.png

Przykładowe okno płyty czołowej przedstawia slajd. Standardowymi jego elementami są: charakterystyczny dla LabVIEW pasek narzędzi oraz ikona programu. Pasek narzędzi spełnia wiele funkcji (omówionych w dalszej części prezentacji) niezbędnych w trakcie „pisania” testowania i uruchamiania programu. Ikona aplikacji, reprezentuje w sposób graficzne dany program i jest szczególnie przydatna, gdy program ten jako funkcja zostaje wykorzystany w innej aplikacji. Na slajdzie widać ponadto umieszczone na płycie czołowej dwa elementy: przełącznik dwupozycyjny (Power) oraz ekran oscyloskopowy (Temperature History). Pierwszy z nich może być (oprócz sterowania programowego) przełączany przez użytkownika. Powszechnie stosowanymi nazwami dla tego typu elementów są: element aktywny, zadajnik, kontrolka. Jeśli zaś chodzi o ekran oscyloskopowy to przeznaczony jest on jedynie to prezentacji danych (choć istnieje możliwość zmiany jego właściwości tak aby także odbierał pewne informacje od użytkownika). Tego typu elementy nazywa się biernymi lub po prostu wyświetlaczami. Pozostałe elementy: opcje wykresu i legenda wykresu służą do zmiany jego opisu i sposobu prezentacji danych.


Grafika:LW1_M1_Slajd04.png

Podobnie jak w przypadku okna płyty czołowej tak i w oknie diagramu obowiązkowymi jego elementami: pasek narzędzi oraz ikona programu. Funkcje pełnione przez te składniki są analogiczne jak dla okna płyty czołowej. Dodatkowo na pasku narzędzi znajdują się przyciski służące pracy w trybie śledzenia przepływu danych (testowanie) programu. Każdy element płyty czołowej będący: kontrolką bądź wyświetlaczem ma swoją ikonę (terminal) na diagramie. Slajd prezentuje przykładowe okno diagramu, na którym umieszczono potrzebne funkcje i stałe, pętlę while oraz bloki o „tajemniczej” nazwie subVI. Tą nazwą producenci środowiska LabVIEW określają klasyczne funkcje, wykorzystane w bieżącej aplikacji.


Grafika:LW1_M1_Slajd05.png

W środowisku istnieje rozbudowany system pomocy. Podstawową pomoc można uzyskać poprzez wybór z menu Help -> Show Context Help i naprowadzeniu myszy na wybrany element diagramu. W dedykowanym oknie pojawi się opis wybranego składnika.

Grafika:LW1_M1_Slajd06.png

Grafika:LW1_M1_Slajd07.png

Pomoc (Help) dostępna jest również z menu kontekstowego wyświetlanego po naciśnięciu prawym klawiszem myszy na wybranym elemencie. Ten sam efekt można uzyskać poprzez wybór z menu Help -> VI, Function, & How- To Help...

Grafika:LW1_M1_Slajd08.png

Grafika:LW1_M1_Slajd09.png

Dostęp do dokumentacji w formie popularnych plików „pdf” uzyskać można poprzez wybór z menu Help -> Search the LabVIEW Bookshelf...


Grafika:LW1_M1_Slajd10.png

Środowisko LabVIEW oferuje obszerny zestaw przykładów dostępny w postaci uporządkowanej tematycznie biblioteki. Jest ona dostępna z menu Help -> Find Examples...


Grafika:LW1_M1_Slajd11.png

Począwszy od wersji 7.0 w LabVIEW dostępne są funkcje o nazwie Express VI. Dotyczą one najpopularniejszych operacji wysokiego poziomu, wykonywanych przy pozyskiwaniu, przetwarzaniu i prezentowaniu danych pomiarowych. Charakterystyczną ich cechą jest okno konfiguracyjne, dzięki któremu można sprawnie dokonać niezbędnych ustawień konfiguracyjnych. Poza tym LabView wyposażone jest w ogromy zestaw funkcji określanych mianem Standard VI. W odróżnieniu od Express VI nie posiadają własnego okna konfiguracyjnego. Wykorzystanie obydwu typów funkcji czyni strukturę aplikacji modułową, co czyni ją prostą w rozbudowie, analizie i łatwiejszą w optymalizacji. Cechą charakterystyczną omówionych funkcji jest sposób ich prezentacji na diagramie. Zestaw parametrów wejściowych i wyjściowych umieszczony jest w dolnej części symbolu w postaci listy. Parametry wejściowe oznaczone są z lewej strony strzałeczką w kierunku do wewnątrz bloku, natomiast parametry wyjściowe oznaczane są z prawej strony strzałeczką w kierunku na zewnątrz bloku. podstawowe instrukcje i funkcje jak np.: mnożenie czy sin(x) posiadają jedynie piktogram symbolizujący daną funkcje.


Grafika:LW1_M1_Slajd12.png

Z oknem diagramu stowarzyszone jest okno funkcji programu. W tym oknie znajdują się uporządkowane tematycznie, wszystkie dostępne w LabVIEW stałe, instrukcje, struktury, pętle i funkcje. Wybór następuje poprzez kliknięcie lub przeciągnięcie wybranej funkcji do obszaru okna diagramu blokowego. Analogicznie, z oknem płyty czołowej stowarzyszone jest okno elementów płyty czołowej, za pomocą którego wybrane elementy można umieszczać na panelu tworzonej aplikacji.


Grafika:LW1_M1_Slajd13.png

Ostatnim głównym oknem występującym w środowisku LabVIEW jest paleta narzędzi, potrzebnych w czasie pracy przy budowie aplikacji. Począwszy od wersji 6.0 środowisko wyposażone jest w moduł automatycznego wyboru narzędzia pracy (można go włączyć i wyłączyć za pośrednictwem palety), które intuicyjnie podmienia używane przybory. W trybie ręcznego wyboru należy po prostu kliknąć na żądanym elemencie. Początkującemu użytkownikowi zaleca się korzystanie z ręcznego wyboru narzędzi.


Grafika:LW1_M1_Slajd14.png

Paski narzędzi dostępne w oknach: diagramu i płyty czołowej pozwalają na uruchomienie, zatrzymanie/kontynuację i zakończenie wykonywania programu. Pozwalają także na wykonywanie programu trybie śledzenia przepływu danych. Pasek okna płyty czołowej pozwala dodatkowo na uporządkowanie (wyrównanie i równomierne rozmieszczenie) elementów, które tam się znajdują.


Grafika:LW1_M1_Slajd15.png

W dalszej części omówiona zostanie prosta aplikacja wyznaczająca sumę i różnicę dwóch wielkości wejściowych.


Grafika:LW1_M1_Slajd16.png

Na płycie czołowej należy umieścić dwa pola numeryczne (Okno Controls -> Num Ctrls -> Num Ctrl) i opisać je jako A i B. W tym samym oknie należy umieścić dwa pola numeryczne odczytowe (Okno Controls -> Num Inds -> Num Ind). Należy pamiętać o utrzymywaniu porządku na panelu aplikacji. Dobrym zwyczajem jest intuicyjne rozplanowanie elementów płyty czołowej. Po tych operacjach w oknie diagramu pojawią się 4 ikony (terminale) odpowiadające poszczególnym elementom panelu. Zauważyć łatwo iż dwa z nich mają pogrubioną obwódkę i strzałkę w kierunku na zewnątrz ikony - to te, w których użytkownik może wpisać swoje wartości. Pozostałe, mające obwódkę bez pogrubienia i strzałkę w kierunku do wewnątrz ikony służą jedynie do wyświetlenia wyników. Sumowanie i odejmowanie wykonywane w czasie programu zrealizowane zostanie przy pomocy odpowiednich funkcji znajdujących się w oknie Functions -> All functions -> Numeric.


Grafika:LW1_M1_Slajd17.png

Aby połączyć wszystkie elementy zgodnie ze schematem należy użyć narzędzia „wiring tool” - szpulki z nicią. Wcześniej dla zobrazowania sposobu łączenia, należy kliknąć prawym klawiszem np.: na funkcji odejmującej i z pozycji Visible Items wybrać Terminals. Symbol funkcji odejmującej zmieni kolor na pomarańczowy i podzielony zostanie na trzy pola przy czym jedno z nich otoczone jest grubszym obramowaniem. Kolor pomarańczowy przyporządkowany jest danym zmiennoprzecinkowym (w języku C jest to typ double). Każdy argument funkcji ma swoje pole. Ogólna zasada jest taka że wejścia umieszczane są w miarę możliwości po lewej stronie symbolu funkcji a wyjścia po prawej. Dodatkowo pola argumentów wejściowych są otoczone cienkim obramowaniem a pola argumentów wyjściowych grubym. Można teraz powrócić do pierwotnego wyglądu funkcji odejmowania. Chcąc połączyć ze sobą wybrane elementy należy umieścić szpulkę na polu rozpoczynającym połączenie - pole to zacznie migać. Należy wtedy nacisnąć lewy klawisz myszy i przytrzymując go przeciągnąć połączenie do elementu je kończącego. Gotowość do połączenia tego elementu sygnalizowana jest również poprzez jego miganie. Po wykonaniu wszystkich połączeń widocznych na slajdzie 16 można, przy użyciu narzędzia obsługi płyty czołowej (Operating Tool - symbol wskazującego palca) wprowadzić dane liczbowe i uruchomić program.


Grafika:LW1_M1_Slajd18.png

W LabVIEW można skorzystać z automatycznego łączenia elementów. W tym celu należy odpowiednie wejście umieszczanej na schemacie blokowym funkcji zbliżyć do odpowiedniego wyjścia bloku, który już jest na schemacie. Połączenie zostanie ustanowione automatycznie. Aby zaznaczyć fragment lub całe połączenie należy korzystając z narzędzia przenoszenia/skalowania (strzałka) kliknąć na nim tak jak na slajdzie. Połączenia również warto porządkować - poprawia to czytelność schematu blokowego.


Grafika:LW1_M1_Slajd19.png

Czasami zdarzyć się może, że schemat blokowy został zbudowany w sposób nieprawidłowy. W szczególności mogły zostać wykonane zostały połączenia niedozwolone (symbolizowane przez połączenia przerywane). W tego typu sytuacjach również ikona służąca uruchamianiu programu będzie miała postać przerwanej strzałki. Wybór tego symbolu spowoduje wyświetlenie listy błędów. Może zdarzyć się również, że poprawny składniowo program wykonuje swoje zadanie w sposób błędny. W tym przypadku warto jest wykonać go w trybie śledzenia przepływu danych z włączonym śledzeniem wartości wybranych zmiennych programu.


Grafika:LW1_M1_Slajd20.png

Uruchomienie programu w trybie pokazującym przepływ danych, pokazuje iż bloki funkcjonalne programu wykonują się w ściśle określonych chwilach czasowych wyznaczonych przez momentami dostarczenia danych do wszystkich argumentów tych funkcji. Wyjątkiem są niektóre argumenty wejściowe, które nie są podłączone ale mają ustawioną wartość domyślną. Jeżeli w programie występuje wiele niezależnych ścieżek połączeń, to każdej z nich przydzielony jest osobny wątek. W związku z tym wzajemne relacje czasowe pojawiania się danych na poszczególnych etapach tychże ścieżek są nieokreślone. Jeżeli niezbędne jest zachowanie określonej kolejności, bądź synchronizacji niezależnych ścieżek należy stosować odpowiednie struktury (np.: Sequence) dostępne w LabVIEW.


Grafika:LW1_M1_Slajd21.png

Poniżej przedstawiono sposób uruchomienia przykładowego programu poprzez Example Finder. W zakładce Search po wpisaniu słowa signals z listy wyników wybrano program: Signal Generation and Processing.vi. program ten można również uruchomić w trybie z „podświetleniem” przepływu danych, zaobserwować sposób działania programu. Można również dokonać własnych modyfikacji programu, nie wyłączając celowego uszkodzenia i ewentualnie następującego po nim przywrócenia stanu pierwotnego.

Grafika:LW1_M1_Slajd22.png

Grafika:LW1_M1_Slajd23.png

Kolejny przykład polegać będzie na przeliczeniu wartości temperatury podanej w stopniach Celsjusza na stopnie w skali Fahrenheita,zgodnie z równaniem: oF = 9/5 * oC + 32. Następnie program ten jako funkcja (SubVI) wykorzystany będzie w innej aplikacji. Ta z kolei poddana zostanie rozbudowie o symulator rejestrowanych danych i ekran wyświetlający historię pomiarów.


Grafika:LW1_M1_Slajd24.png

Po wybraniu z menu File -> New VI otworzą się okna dla nowego programu. W oknie płyty czołowej należy umieścić dwa elementy typu Numeric: Control oraz Indicator i nadać im stosowne nazwy zgodnie ze slajdem.


Grafika:LW1_M1_Slajd25.png

Diagram programu będzie miał postać jak na slajdzie. Funkcja mnożenia dostępna w oknie Functions -> All Functions -> Numeric. W tym samym miejscu dostępne są również stałe. Po umieszczeniu ich na ekranie należy z menu kontekstowego wybrać Representation i dalej typ DBL (Double Precision). Dzięki temu domyślny typ stałej: całkowitoliczbowy, reprezentowany kolorem niebieskim zostanie zamineiony na typ zmiennoprzecinkowy. Stowarzyszone z elementami panelu aplikacji terminale, które znajdują się na diagramie mogą być wyświetlane w postaci uproszczonej lub ikon. Zmina możliwa jest poprzez menu kontekstowe.


Grafika:LW1_M1_Slajd26.png

Po wykonaniu wszystkich czynności można wpisać wartość temperatury w stopniach Celsjusza i odczytać wynik w stopniach Fahrenheita. Przed przystąpieniem do stworzenia funkcji (subVI) z bieżącej aplikacji dobrze jest zmienić jej ikonę z postaci domyślnej. Można to uczynić klikając prawym klawiszem myszy na polu ikony w oknie panelu lub diagramu i z menu wybierając Edit Icon....


Grafika:LW1_M1_Slajd27.png

Aby z aplikacji utworzyć funkcję (subVI) należy przejść do okna płyty czołowej programu. Tam klikając prawym klawiszem na nowo utworzonej ikonie z menu wybrać trzeba pozycję Show connector. Teraz za pomocą myszy należy przyporządkować elementowi wejściowemu i wyjściowemu odpowiednie pola na „konektorze” zgodnie ze slajdem. Jeżeli zaszła by potrzeba modyfikacji „konektora”, to można jej dokonać poprzez dostępne w menu kontekstowym pozycje. Po wykonaniu powyższych czynności należy program zapisać. Użyta nazwa będzie jednocześnie nazwą nowopowstałego subVI’a.


Grafika:LW1_M1_Slajd28.png

Można już przystąpić do stworzenia aplikacji, w której wykorzystany zostanie zbudowany wcześniej subVI. Płyta czołowa aplikacji może wyglądać podobnie to tej ze slajdu.


Grafika:LW1_M1_Slajd29.png

Diagram programu powinien być zgodny z tym przedstawionym na slajdzie. Nowym elementem jest funkcja wyboru Select dostępna w oknie Functions -> All functions -> Comparision. Funkcja ta na swoje wyjście przesyła dane z wejścia TRUE bądź FALSE w zależności os stany wejścia sterującego ?. Podłączenie tego wejścia do przełącznika logicznego symbolizowane jest kolorem zielonym, przydzielonym w LabVIEW właśnie dla zmiennych logicznych. Aby umieścić stworzoną uprzednio funkcję konwersji temperatury należy wybrać z menu Functions -> All functions -> Select a VI, odszukać w drzewie katalogów zapisany plik funkcji i zatwierdzić wybór. Dalej można funkcję tę wykorzystywać jak każdą inną, wbudowaną funkcję LabVIEW.


Grafika:LW1_M1_Slajd30.png

W programie zamieniono „źródło danych”. W miejsce pola, do którego wprowadzane były wartości wejściowe wstawiony został symulator generatora sygnałów. Dostępny jest on poprzez okno Functions -> Input ->Simulate Signal. W oknie konfiguracyjnym finkcji typu Express VI warto jest zmienić wartość amplitudy i składowej stałej tak aby odwzorować zakres temperatur np.: od 0 do 100 oC. Typ przebiegu jest dowolny. Funkcja Simulate Signal jak i inne funkcje typu ExpressVI zwraca na wyjściu dane w postaci typu dynamicznego. Aby umożliwić działanie funkcji konwertującej oC do oF należy dokonać konwersji do wielkości skalarnej typu zmiennoprzecinkowego (zmiennej tego typu oczekuje napisana wcześniej funkcja). Operacji tej dokonać można za pomocą funkcji From DDT dostępnej w menu Functions -> Signal Manipulation. W oknie konfiguracyjnym tej funkcji należy wybrać odpowiednią postać danych po konwersji (Single scalar).

]
Grafika:LW1_M1_Slajd31.png

Kolejną modyfikacją jest dodanie do aplikacji ekranu oscyloskopowego, którego zadaniem jest prezentacja graficzna „historii” pomiarów. Ekran wykorzystany w bieżącej wersji aplikacji dostępny jest z okna Controls -> Graph Inds -> Chart.

Grafika:LW1_M1_Slajd32.png

Grafika:LW1_M1_Slajd33.png

Aby program wykonywał się w sposób ciągły a kolejne iteracje wykonywane były w ściśle określonych chwilach czasowych, należy dokonać kolejnych modyfikacji. Pierwszą z nich jest objęcie całego dotychczasowego kodu programu pętlą while. Stosowanie pętli w LabVIEW sprowadza się do objęcia jej zasięgiem (reprezentowanym przez graficzny symbol) obszaru kodu, który ma się wykonywać w tej pętli. Pętle i inne struktury dostępne są w oknie Functions ->All functions -> Structures. Tam też znajduje się pęlta while. Aby ją umieścić na ekranie należy przesunąć wskaźnik myszy w miejsce przyszłego narożnika pętli i trzymając wciśnięty lewy klawisz myszy objąć jej obszarem wybrane funkcje. Wraz z symbolem obramowania pętli na ekranie w dolnych jej narożnikach pojawiły się dwa symbole. Lewy to zmienna przechowująca numer iteracji. Prawy terminal służy do zakończenia działania pętli. Do niego podłącza się sygnał logiczny niosący informację o tym czy należy zakończyć pętlę. W bieżącym programie będzie to po prostu przycisk, wybrany poprzez pozycję Create Control n menu kontekstowego tego terminala. Drugą modyfikację stanowi funkcja timera wprowadzająca raster czasowy wykonywania kolejnych iteracji. Funkcja ta nazywa się Wait until Next ms Multiple i dostępna z okna Functions -> All Functions -> Time & Dialog. Rozbudowany program pozwala na ciągłe wykonywanie symulacji pomiarów temperatury w określonych interwałach czasowych.


Grafika:LW1_M1_Slajd34.png

Przykład programu przedstawionego na slajdzie ilustruje wyświetlanie wielu wykresów na jednym ekranie oscyloskopowym. Wykorzystano tu funkcję Merge Signals (Functions - > Signal Manipulation). Ten sam efekt (wstawienia ww funkcji) można uzyskać poprzez podłączenie do już istniejącej ścieżki danych dynamicznych kolejnego źródła danych dynamicznych.


Grafika:LW1_M1_Slajd35.png

Na slajdzie przedstawiono elementarny program wykorzystujący pętlę for. Charakterystyczna dla tej pętli jest ikona w lewym górnym rogu (symbol litery N). Jest to zmienna do której należy wpisać liczbę iteracji, które pętla ma wykonać. W przykładowym programie jest ich 10. Wewnątrz pętli generator liczb losowych (dostępny w oknie Functions -> All Functions -> Numeric) zwraca w każdej z iteracji jedną wartość. Wynik, po zakończeniu działania pętli przesyłany jest osobno do dwóch pól odczytowych: jednego dla wielkości skalarnych i drugiego dla tablic. Należy zauważyć, że miejsca opuszczenia obszaru pętli (kółko czerwone i niebieskie) są oznaczone w inny sposób. Oznaczony czerwonym kółkiem symbol przekazywania danych poza pętlę for polega na tym, że z kolejnych wartości wyjściowych tworzony jest wektor danych o rozmiarze równym liczbie iteracji. Jest to tryb pracy z włączonym indeksowaniem. Powstały wektor jest przesyłany do wyświetlacza. Sposób przekazywania danych oznaczony niebieskim kółkiem, dotyczy trybu pracy z włączonym indeksowaniem. Kolejne dane wyjściowe nie tworzą wektora. Na wyjściu po zakończeniu działania pętli pojawia się wynik działania ostatniej iteracji. Można to zweryfikować porównując zawartość pola odczytowego Numeric z ostatnim polem wyświetlacza tablicowego.


Grafika:LW1_M1_Slajd36.png

Przestawiony tu program jest analogiczny do poprzedniego, z tą różnicą, iż dotyczy przypadku tablicy dwuwymiarowej na uwagę zasługuje sposób rozróżniania poprzez grubość linii rozmiarów danych: wielkości skalarnych - linia cienka , tablice jednowymiarowe (linia gruba) i dwuwymiarowe (linia podwójna).


Grafika:LW1_M1_Slajd37.png

Na zakończenie zestawiono przykładowe źródła szczegółowych informacji dotyczących LabVIEW.