1. CEL ĆWICZENIA Celem ćwiczenia jest zapoznanie studentów ze środowiskiem LabVIEW oraz podstawami programowania w języku graficznym G. 2. MATERIAŁ NAUCZANIA 2.1. Opis środowiska LabVIEW LabVIEW jest zintegrowanym środowiskiem programowania opracowanym przez firmę National Instruments. Jest to pakiet oprogramowania służący do projektowania wirtualnych przyrządów pomiarowych (ang. virtual instruments, VI). LabVIEW jest wyposażony w zestaw narzędzi gromadzących, analizujących, obrazujących oraz archiwizujących dane. W LabVIEW można stworzyć własny interfejs, np. przedni panel sterujący, wyposażony w kontrolery i wskaźniki. Kontrolerami mogą być pokrętła, przyciski, pola numeryczne oraz inne mechanizmy umożliwiające wprowadzanie danych wejściowych. Wskaźnikami mogą być wykresy, diody LED oraz inne urządzenia obrazujące sygnał wyjściowy. Po zbudowaniu interfejsu należy odpowiednio go zaprogramować, używając kodu i struktur tak, aby spełniał swoje zadanie. Programowanie odbywa się poprzez tworzenie diagramów blokowych. 2.2. Tworzenie nowego projektu i elementy programu VI Po uruchomieniu programu w oknie startowym w celu utworzenia nowego projektu należy wybrać opcję BlankVI. Na ekranie pojawią się dwa podstawowe okna programu VI: Front Panel (okno z szarym tłem) oraz Błock Diagram (okno z białym tłem). Okno Front Panel stanowi interfejs użytkownika korzystającego z programu napisanego w LabVIEW. Przy jego pomocy tworzymy panel, na którym możemy umieścić przyciski, przełączniki, wskaźniki, okna dialogowe, okna z wynikami, wykresy. Przy pomocy tego okna użytkownik programu steruje wykonaniem programu i odczytuje wyniki wykonania programu. Okno Błock Diagram zawiera kod programu napisany w języku G. Wszystkie instrukcje języka graficznego LabView posiadają swoją reprezentację graficzną (obiekty graficzne). Programowanie polega na wyborze odpowiednich instrukcji i ich łączeniu zgodnie z kolejnością przepływu danych lub kolejnością wykonywania obliczeń. [1] Na rys. 2.1. pokazano przykład palety Controls dostępny dla okna Front Panel (uruchomienie palety następuje poprzez naciśnięcie prawego przycisku myszy w obszarze okna Front Panel). Paleta Controls zawiera wszystkie standardowe kontrolki (ang. control) oraz indykatory (ang. indicator). Uwaga! Nazwa palety Controls może prowadzić do dwuznaczności, ponieważ zawiera ona zarówno kontrolki, jak i indykatory. Controls zostało tu użyte w znaczeniu obiektów prezentacji bądź akwizycji danych i nie należy mylić go z kontrolką używaną do wprowadzania danych wejściowych VI. Rys.2.1. Widok panelu Controls Rys.2.2. Widok panelu Functions
Kontrolkami są nazywane w LabVIEW przyciski oraz wszelkie pola edycyjne, czy też wyboru natomiast wszystkie pola wyświetlające jakąś wartość noszą nazwę indykatorów. Najczęściej używane grupy kontrolek to: numeryczne (Numeric) elementy pozwalające na przekazywanie zmiennych numerycznych np. za pomocą suwaków czy pokręteł, logiczne (Boolean) elementy przekazujące zmienne logiczne np. jako przełączniki czy wskaźniki w postaci diody LED, tekstowe (String & Path) elementy przekazujące zmienne tekstowe oraz ścieżki dostępu do pliku, tablice i klastry danych (Array, Matrix & Cluster) - elementy przekazujące tablice i klastry danych (odpowiednik struktury w języku C), graficzne (Graph) elementy wyświetlające dane w postaci graficznej, wykresy. Przygotowując diagram posługujemy się paletą funkcji (Functions). Na rys. 2.2 przedstawiono przykład palety funkcji dostępnej dla okna Błock Diagram zawierającej standardowe elementy diagramu blokowego (uruchomienie palety następuje po kliknięciu prawym przyciskiem w obszarze diagramu blokowego). Wybrane funkcje umieszczamy na diagramie przeciągając je myszką. Najczęściej wykorzystywane są funkcje z zakładek: struktury (Structures) zawiera funkcje strukturalne, zmienne globalne i lokalne, tablice (Array) - zawiera funkcje do obsługi tablic, klaster, klasa (Custer, Class & Variant) zawiera funkcje do obsługi elementów typu klaster. numeryczne (Numeric) funkcje operujące na liczbach, logiczne (Boolean) funkcje operujące na zmiennych logicznych, łańcuch (String) funkcje operujące na zmiennych tekstowych, porównanie (Comparison) operacje porównania. (Timing) zawiera funkcje związane z odmierzaniem czasu, pliki (File I/O) zawiera funkcje do obsługi plików. [2] 2.3. Typy danych W języku graficznym podobnie jak w innych językach zdefiniowano kilka typów danych. Określają one, jakiego rodzaju informacje mogą przechowywać zmienne i jaki jest ich zakres. Postarano się, aby w łatwy sposób można było rozpoznać, jaki typ reprezentuje zmienna. Zrobiono to poprzez przypisanie zmiennym kolorów. Dzięki temu, patrząc na diagram, możemy od razu zauważyć, z jaką zmienną mamy do czynienia. O jej rodzaju informuje nas również wygląd ikon na diagramie. Po wyglądzie zmiennej możemy również rozpoznać czy jest to kontrolka (źródło danych, jej obrys jest pogrubiony i terminal połączeniowy znajduje się z prawej strony), czy indykator (element wyświetlający dane, obrys jest cieńszy a terminal znajduje się z lewej strony). Istnieją również stałe, które są pokazane tylko na diagramie. Wygląd zmiennej można ustalić na dwa sposoby: może ona być ikoną lub terminalem. W pierwszym wypadku ikona reprezentująca zmienną jest większa, ale niesie więcej informacji, ponieważ możemy rozpoznać związany z nią element na panelu czołowym. W drugim wypadku jest mniejsza, ale nie zaciemnia nam diagramu. Zmianę wyglądu uzyskujemy klikając na niej prawym klawiszem myszy i zaznaczając lub odznaczając w menu lokalnym opcję View As Icon. Na rys. 2.3 przedstawiono ikony i typy kilku podstawowych zmiennych. [2]
Rys.2.3. Typy zmiennych [2] Rys.2.4. Zmiana reprezentacji danych zmiennej numerycznej Zmienną definiujemy przez wstawienie odpowiedniego elementu na panelu czołowym. Wybierające element reprezentujący dane logiczne, np. przycisk, tworzymy zmienną logiczną przekazującą jedną z dwóch wartości: 0 lub 1. Wybierając element zawierający dane numeryczne np. pokrętło czy suwak tworzymy zmienną numeryczną reprezentującą liczby zmiennoprzecinkowe, całkowite lub zespolone. W przypadku zmiennych numerycznych należy zdefiniować, które dane są reprezentowane. Możemy to zrobić na panelu czołowym lub na diagramie. W pierwszym wypadku, klikamy prawym przyciskiem myszy na wstawionym elemencie wybieramy opcję Representation (rys. 2.4) i wskazujemy właściwy typ. To samo można zrobić na diagramie, klikając w tym wypadku na ikonie. 2.4. Linijka przycisków narzędziowych Zarówno na panelu czołowym oraz na diagramie u góry znajduje się linijka przycisków narzędziowych. (rys.2.5) Większość z nich jest taka sama (w oknie diagramu znajduje się kilka dodatkowych umożliwiających śledzenie wykonania programu). Rys.2.5. Widok linijki przycisków narzędziowych w panelu czołowym Poszczególne przyciski pełnią następujące funkcje: Run - przycisk rozpoczyna wykonywanie programu (biała strzałka sygnalizuje gotowość do uruchomienia, zaczerniona wykonywanie programu, przełamana błąd na diagramie, kliknięcie w tym momencie w strzałkę wyświetla listę błędów), Run Continuously - rozpoczyna wykonanie programu w trybie ciągłym. Program wykonuje się tak, jakby pracował w pętli, Abort Execution - zatrzymanie wykonywania programu, Pause - wstrzymanie/wznowienie wykonywania programu,
Highlighting Execution - włącza/wyłącza animację danych na diagramie (można zaobserwować przepływ danych i kolejność wykonywania instrukcji; program wykonuje się znacznie wolniej i można go obserwować nie używając pułapek; aktywna funkcja jest podświetlona, tak samo jak przekazywane dane). Step Into - praca krokowa, po naciśnięciu przycisku wykonywana jest jedna instrukcja; jeśli na diagramie znajdują się instrukcja zagnieżdżone, to program otwiera je i wykonuje również krok po kroku, Step Over - praca krokowa, po naciśnięciu przycisku jest wykonywany pojedynczy krok programu; podprogramy znajdujące się na diagramie nie są otwierane, a wykonywane jak jedna instrukcja, Step Out - zakończenie pracy krokowej, aktualny diagram jest wykonywany do końca, Text Settings - ustawienia czcionki, Align Objects - wyrównanie elementów, Distribute Object - wyrównanie odległości pomiędzy elementami, Resize Object, zmiana wymiarów zaznaczonych obiektów, Reorder - zmiana kolejności nakładających się na siebie obiektów, Show Context Help - włączenie/wyłączenie okienka pomocy kontekstowej. 3. PRZEBIEG ĆWICZENIA 3.1. Utworzenie programu do generowania liczb losowych z przedziału od 0 do 1 a) Utworzenie interfejsu użytkownika Uruchomić program LabVIEW, a następnie w oknie Getting Started wybrać Blank VI W oknie Front Panel wstawić przycisk Stop (prawy przycisk myszy Boolean Stop) Z palety Controls wstawić obiekt Waveform Chart. Zmienić nazwę Waveform Chart na Liczby Losowe ( double click na tekst nazwy). Zmienić skalę na osi Y na 0 1 (prawy klawisz myszy na obiekcie Y scale Formating Scales, a następnie zmienić parametry zgodnie z rys. 2.6) Rys.2.6. Formatowanie skali osi Y b) Utworzenie i uruchomienie programu w języku graficznym Przejść do okna Błock Diagram. Obiekty Stop i Liczby Losowe są odpowiednikami obiektów wstawionych w oknie Front Panel. Z palety Functions wstawić obiekt Rundom Number (0-1) (prawy klawisz myszy Functions Numeric Random Number (0-1)). Najechać kursorem na obiekt Rundom Number (0-1) i połączyć linią z obiektem Liczby Losowe.
Wstawić pętlę While Loop (Functions Programming Structures While Loop). Wybrany obiekt przenieść do okna Błock Diagram. Nacisnąć i zwolnić lewy przycisk myszy. Przesuwając kursor myszy objąć powstałym prostokątem obiekty, które będą wykonywane w pętli ("Random Namber 0-1", "Liczby Losowe", "Stop"). Obiekt Loop Condition (ikona w postaci czeronego kółka) połączyć z przyciskiem Stop. (rys. 2.7) Sprawdzić czy aktywna jest opcja Stop if True (prawy klawisz myszy na Loop Condition). Pętla While Loop jest wykonywana gdy na wejście przerywające wykonywanie pętli jest podana wartość logiczna TRUE. Obiekt "Stop" generuje wartość "TRUE" po jego uaktywnieniu. Dlatego należy sprawdzić ustawienie pętli Continue if True / Stop if True. Zapisać program pod nazwą losowe.vi. Przejść do okna losowe.vi Front Panel. Wcisnąć przycisk Run, a następnie Stop. Rys.2.7. Diagram programu c) Dodanie taktowania do programu losowe.vi Wrócić do okna losowe.vi Błock Diagram. Wstawić wewnątrz pętli obiekt Wait Until Next ms Multiple (Functions Programming Timing Wait Until Next ms Multiple). Dodać obiekt Numeric Constans (Functions Programming Numeric Numeric Constans). Wpisać w oknie Numeric Constans wartość 100. Połączyć z obiektem Wait Until Next ms Multiple. Zapisać zmiany wprowadzone do programu w pliku losowe2.vi (Save As Rename). Uruchomić program i sprawdzić jego działanie. Co się zmieniło? Jak będzie działał program jeśli wpiszemy inną wartość w oknie Numeric Constans? Wrócić do okna Błock Diagram. Uruchomić program (Run), uaktywnić przycisk Higlight Execution/DoNot Higlight Execution. Jaki jest teraz efekt działania programu? d) Analiza wyników, zapis w pliku, testowanie programu. Z palety Functions wybrać obiekt Mean (Mathematics Probability&Statistic Mean) i umieścić na zewnątrz pętli While Loop (uwaga obiekt Mean został umieszczony na zewnątrz pętli w celu obliczenie wartości średniej po przerwaniu pętli). Wstawić obiekt Write To Spreadsheet File (Functions Programming File I/O Write To Spreadsheet File) i umieścić również na zewnątrz pętli While Loop. Kursorem najechać na prawy górny róg obiektu Mean i kliknąć prawym przyciskiem myszy. Z menu obiektu wybrać Create Indicator. Zarówno w oknie Błock Diagram, jak i w oknie Front Panel pojawi się obiekt mean służący do wyświetlania wyników obliczeń, który automatycznie zostanie połączony z obiektem Mean. Zmienić nazwę obiektu mean na Wartość średnia.
Połączyć wyjście obiektu Random Number (0-1) z wejściem obiektu Mean. Połączenie zostanie narysowane przerywaną linią z czerwonym przekreśleniem co sygnalizuje, że zostały połączone piny reprezentujące różne typy danych. W podobny sposób połączyć wyjście Random Number (0-1) z wejściem ID data obiektu Write To Spreadsheet File. Należy wybrać wejście ID data ponieważ pętla While Loop tworzy jednowymiarową tablicę danych z liczb losowych generowanych przez obiekt Random Number (0-1). Połączenie zostanie również narysowane przerywaną linią z czerwonym przekreśleniem, co sygnalizuje, że zostały połączone piny reprezentujące różne typy danych - rys. 2.8. Rys.2.8. Diagram programu Pomarańczowe kwadraty w prostokącie symbolizującym pętlę While Loop reprezentują dane generowane przez pętlę, które są przekazywane do dalszej części programu po przerwaniu pętli. Kursorem najechać na pomarańczowy kwadrat i kliknąć prawym przyciskiem myszy. Z menu wybrać Tunnel Mode Indexing. Zmiana tej opcji spowoduje, że pętla będzie gromadziła dane w postaci tablicy jednowymiarowej. Jak program sygnalizuje zmianę tej opcji? Tablica jednowymiarowa może być wprowadzona na połączone w omawianym przykładzie wejścia obiektów Mean i Write to Spreadsheet File. Linia przerywana łącząca obiekty zmieni się na pomarańczową linię ciągłą ponieważ niezgodność typów danych została usunięta. Zapisać zmiany wprowadzone do programu w pliku losowe3.vi. Uruchomić program i sprawdzić jego działanie. Po naciśnięciu przycisku stop pojawi się okno dialogowe, w którym należy wpisać nazwę pliku do którego zostaną zapisane wyniki. 4. LITERATURA 1. Chruściel M., LabVIEW w praktyce, Wydawnictwo BTC, Legionowo, 2008 2. Szaj W., Podstawy programowania w LabView, ELEKTRONIKA PRAKTYCZNA 4/2013, s. 99-103