Lab. 3 Typy danych w LabView, zapis do pliku 1 Wprowadzenie 1.1 Tworzenie projektu (wersja 0.4) Filip A. Sala, Marzena M. Tefelska W celu utworzenia projektu należy uruchomić środowisko LabView i wybrać Create Project. Następnie wybrać Blank Project i kliknąć w przycisk Finish. Pojawi się wtedy okno projektu (Project Explorer). W celu dodania nowego VI należy kliknąć File New VI. W celu dołączenia do projektu zapisanego wcześniej pliku należy prawym klawiszem myszy kliknąć na My computer i z menu kontekstowego wybrać Add File. Pliki takie jak na przykład *.vi czy *.ctl można również dodawać metodą Drag & Drop przeciągając pliki *.vi na diagram blokowy (ang. Block diagram), a *.ctl (kontrolki) na panel przedni (ang. Front panel). 1.2 Klastry Klastry są obiektami, które grupują elementy różnych typów. Na przykład różne rodzaje przycisków, przełączników, wskaźników itp. (patrz rys 1). Rysunek 1: Ikona klastra (po lewej) oraz wygląd przykładowego klastra na panelu przednim (po prawej). Wskazówka: Klastrów należy szukać w oknie Controls Modern Array, Matrix & Cluster Uwaga: Klaster może być albo kontrolką (ang. control) albo wskaźnikiem (ang. indicator). Nie może zawierać i kontrolek i wskaźników jednocześnie. Elementy klastra posiadają ściśle określoną kolejność zgodną z kolejnością dodawania obiektów. Pierwszy dodany obiekt jest elementem 0, kolejny 1 itd. Kolejność obiektów decyduje o kolejności w jakiej elementy pojawiają się jako terminale klastra. Kolejność tę można zmienić otwierając definicję typu (klikając prawym klawiszem myszy na brzeg klastra i wybierając Open Type Def.), a następnie w nowo otwartym oknie ponownie klikając na brzeg klastra i wybierając Reorder Controls In Cluster. Klastry z założenia mają łączyć w sobie elementy różnych typów. Na przykład mogą to być pola zwracające jakąś wartość np. kierunek wiatru i jego prędkość. Cały klaster zatem przekazuje nam i kierunek wiatru i jego prędkość w postaci jednego strumienia danych. Zazwyczaj jednak chcielibyśmy wyodrębnić (rozgrupować) takie dane. Gdy będziemy chcieli znowu wysłać kilka danych do klastra to zajdzie konieczność ich zgrupowania w jeden strumień. Do tych celów służą cztery funkcje Bundle, Bundle by Name, Unbundle, Unbundle by Name (rys. 2). Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 1
Rysunek 2: Ikony funkcji służących do grupowania i rozgrupowania danych. Funkcja Bundle grupuje elementy i tworzy z nich klaster zgodnie z kolejnością podłączenia elementów do terminala. Jeżeli na wejściu podłączymy istniejący już klaster to jego elementy zostaną zastąpione nowymi. Rozmiar klastra oraz liczba podłączonych elementów muszą być zgodne. Funkcja Bundle by Name natomiast, zastępuje istniejące w klastrze elementy na podstawie ich nazwy (a nie kolejności podłączenia do terminala). W przypadku tej funkcji konieczne jest podłączenie klastra wejściowego. Funkcja Unbundle rozgrupowuje elementy klastra na podstawie ich kolejności. Funkcja Unbundle by Name rozgrupowuje elementy klastra na podstawie nazw elementów. 1.3 Funkcja Select Funkcja Select posiada dwa wejścia danych t oraz f, a także wejście logiczne s. Jeżeli na wejściu s panuje stan PRAWDA (ang. TRUE) to do wyjścia przekazywana jest wartość z wejścia t. Jeżeli na wejściu s panuje stan FAŁSZ (ang. FALSE) to do wyjścia przekazywana jest wartość z wejścia f. Przykład działania funkcji Select znajduje się na rysunku 3. Wskazówka: Funkcji Select należy szukać w Functions Programming Comparison Rysunek 3: Przykład działania funkcji Select. Na rysunku a) na wejściu s panuje stan PRAWDA, zatem na wyjście przekazana zostanie wartość 123 (wartość z wejścia t). Na rysunku b) przedstawiony jest przykład gdy na wejściu s panuje stan FAŁSZ, zatem do wyjścia przekazana zostanie wartość 456 (wartość z wejścia f). 1.4 Tworzenie własnej kontrolki Gdy chcemy utworzyć własną kontrolkę należy w oknie projektu (Project Explorer) wybrać File New..., a następnie Custom control. Na potrzeby naszych zajęć kontrolka powinna być oznaczona jako Ścisła Definicja Typu (ang. Strict Type Definition) - (patrz rys. 4). Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 2
Rysunek 4: Oznaczenie kontrolki jako ścisła definicja typu Możliwe jest również stworzenie kontrolki poprzez utworzenie definicji typu z klastra. W tym celu należy utworzyć klaster, umieścić w nim obiekty (kontrolki, wskaźniki), a następnie kliknąć prawym klawiszem myszy na brzegu klastra (rys. 5) i wybrać Make Type Def.. Do projektu dodany zostanie wtedy nowy plik z kontrolką. Rysunek 5: Tworzenie kontrolki (definicji typu) z klastra Uwaga: Ścisła Definicja Typu różni się od Definicji Typu jedynie tym, że wygląd kontrolki nie może być zmieniony, jest stały. Ustalone, na etapie tworzenia ikonki, właściwości takie jak kolor, rozmiar itp. nie będą mogły być zmienione z poziomu Panelu przedniego. W celu zmiany właściwości kontrolki należy otworzyć definicję typu (klikając prawym klawiszem na brzeg kontrolki/klastra i wybierając Open Type Def.). Następnie należy dokonać zmian (koloru, rozmiaru, zakresów itp.), po czym zapisać zmiany i zamknąć okno. Wtedy dopiero, wprowadzone zmiany zostaną zastosowane. 1.5 Typy danych W poniższej tabeli przedstawione są podstawowe typy zmienno- i stałoprzecinkowe używane w LabView. Wiele kontrolek i wskaźników ma możliwość zmiany reprezentacji (typu) obsługiwanych danych. Na przykład jeżeli mamy jakiś wskaźnik, który ma nam wyświetlać wartość rzeczywistą (zmiennoprzecinkową) to należy również reprezentację tego wskaźnika zmienić na jeden z typów zmiennoprzecinkowych. W tym celu klikamy prawym klawiszem myszy na nasz obiekt i wybieramy z menu kontekstowego Representation. Pojawia się wtedy lista dostępnych typów (rys. 6). Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 3
Typ Liczba Zakres bitów Single-precision, floating-point 32 +1.40e 45 do +3.40e+38 oraz 1.40e 45 do 3.40e+38 Double-precision, floating-point 64 +4.94e 324 do +1.79e+308 oraz 1.79e+308 do 4.94e 324 Extended-precision, floating-point 128 +6.48e 4966 do +1.19e+4932 oraz 1.19e+4932 do 6.48e 4966 Byte signed integer 8-128 do 127 Word signed integer 16-32768 do 32767 Long signed integer 32 2 147 483 648 do 2 147 483 647 Quad signed integer 64 1e19 do 1e19 Byte unsigned integer 8 0 do 255 Word unsigned integer 16 0 do 65 535 Long unsigned integer 32 0 do 4 294 967 295 Quad unsigned integer 64 0 do 2e19 Rysunek 6: Wybór typów (reprezentacji) dostępny w LavView 1.6 Pętla for Działanie pętli for w LabView (rys. 7) jest bardzo podobne do pętli for w innych języków programowania. Obiekt posiada jedno wejście, na które podajemy liczbę iteracji jaka ma zostać wykonana oraz jedno wyjście, które podaje numer aktualnie wykonywanej iteracji. W pętli wykonują się jedynie funkcje znajdujące się w obrębie pętli. Rysunek 7: Przykład pętli for, która zostanie wykonana N = 10 razy. Numer iteracji wyświetlany będzie na wskaźniku. Numer iteracji przyjmie wartości od 0 do 9 (czyli od 0 do N 1). Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 4
1.7 Indeksowanie tablic przy użyciu pętli Do automatycznego indeksowania tablicy można użyć pętli for lub while. Przykład wykorzystanie pętli for znajduje się na rysunku 8. Wystarczy utworzyć tablicę oraz podłączyć ją do krawędzi pętli. Na wejściu otrzymujemy automatycznie już indeksowaną tablicę. W tym przypadku na wyjściu również jest tablica tyle, że wskaźników (indykatorów) na panelu przednim. Należy pamiętać o odpowiednim doborze typów danych. Jeżeli korzystamy z automatycznego indeksowania przy użyciu pętli for, nie jest konieczne podawanie liczby iteracji ponieważ zostanie ona ustawiona automatycznie na rozmiar tablicy. W przypadku podłączenia kilku tablic, liczba iteracji będzie odpowiadała rozmiarowi najmniejszej tablicy. Rysunek 8: Automatyczne indeksowanie tablicy. Po lewej diagram blokowy, po prawej wynik działania programu. Do każdego elementu tablicy dodana została stała wartość, w tym przypadku 5. Na rysunku 9 znajduje się przykład indeksowania tablicy przy użyciu pętli while. Zarówno w przypadku indeksowania przy użyciu pętli while jak i for należy pamiętać o ustawieniu trybu tunelowania na indexing. W tym celu należy kliknąć prawy klawiszem myszy na tunel (kwadracik) a następnie wybrać odpowiedni tryb. W poniższym przykładzie przedstawiono również sposób na utworzenie tablicy dwuwymiarowej. Na wyjściu pętli zastosowana została funkcja Build Array w celu utworzenia tablicy dwuwymiarowej z dwóch tablic jednowymiarowych. Należy przy tym pamiętać aby funkcja ta miała odznaczoną opcję Concatenate Inputs. W przeciwnym razie zostanie utworzona tablica jednowymiarowa. Rysunek 9: Przykład zastosowania pętli while do indeksowania tablicy oraz funkcji Build Array do utworzenia tablicy dwuwymiarowej. 1.8 Zapis danych do pliku Do zapisu danych do pliku można posłużyć się funkcją Write to Spreadsheet File (rys. 10). Ma ona wejście dla danych jednowymiarowych (1D) oraz dwuwymiarowch (2D). Stan logiczny na terminalu append? decyduje o tym czy dane mają być dopisywane do pliku czy plik ma być zapisywany od początku. Jeżeli do terminala append? dołączymy stan PRAWDA (TRUE) to kolejne dane będą dopisywane na końcu pliku. Funkcja posiada Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 5
też terminal path do którego należy dołączyć ścieżkę do pliku. Jeżeli ścieżka nie zostanie podana to podczas działania programu w momencie wywołania funkcji pojawi się okno dialogowe, w którym należy podać nazwę pliku. Rysunek 10: Opis funkcji Write to Spreadsheet File 2 Zadania do wykonania Celem tego laboratorium jest stworzenie aplikacji do wizualizacji oraz zapisu danych ze stacji meteo. Dane pogodowe symulowane będą za pomocą przygotowanych subvi (dostępnych w materiałach do ćwiczenia). 1. Stwórz pusty projekt o nazwie Stacja Pogodowa 2. Stwórz plik VI o nazwie WeatherStation. 3. Dodaj do projektu pliki ReadTemp, ReadRain, ReadWind. Z tych podprogramów pochodzić będą dane o temperaturze, opadach oraz prędkości i kierunku wiatru. Następnie, pliki te należy dodać do programu. W tym celu można, na przykład, przeciągnąć pliki z okna projektu Project Explorer na diagram blokowy Block Diagram i upuścić (metoda Drag & Drop). 4. Utwórz klaster zawierający następujące dane: aktualna data i godzina, temperatura, opady, prędkość wiatru. Wykorzystaj graficzne kontrolki do prezentacji danych podobnie jak na rysunku 11. (1.5 pkt.) 5. Zapisz klaster jako ścisłą definicję typu (ang. Strict Type Def.) (0.5 pkt.) 6. Narysuj schemat blokowy, tak aby program wyświetlał w pętli co 300 ms dane pogodowe. Program powinien się zatrzymywać w chwili naciśnięcia przycisku STOP. (1 pkt.) 7. Dodaj do programu funkcję wyświetlania ostrzeżenia o gołoledzi, dużej sile wiatru oraz o upałach. Program powinien wyświetlić następujące informacje: (1.5 pkt.) Uwaga ryzyko gołoledzi gdy T < 2 C Uwaga silny wiatr gdy V wiatru > 30km/h Uwaga upały gdy T > 35 C Ostrzeżenia mogą być wyświetlane poza klastrem w dowolny sposób (np. tekstowy czy graficzny). 8. Dodaj możliwość zapisywania wszystkich pomiarów temperatury oraz opadów do pliku. Zapis powinien odbywać się po naciśnięciu przycisku STOP. Do zapisu pliku wykorzystaj funkcję Write to spreadsheet file. Dane powinny być zapisane w dwóch kolumnach. (1.5 pkt.) 9. Zadanie dodatkowe: Zapisz do pliku tekstowego nagłówek według przykładu z pliku tekstowy.txt. Wykorzystaj funkcję Write to Text File oraz Refnum to Path. W funkcji Write to Spreadsheet File ustaw flagę append jako true. (2 pkt.) Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 6
10. Zadanie dodatkowe: Dodaj do programu funkcję umożliwiającą prezentację kierunku wiatru. W tym celu stwórz nową własną kontrolkę i użyj kontrolki Classic Ring & Enum Pict Ring umożliwiającej wyświetlanie obrazków. Do kontrolki dołącz odpowiednie obrazki (strzałki wskazujące kierunek wiatru w kolejności N, E, W, S). Strzałki można wykonać samodzielnie w programie graficznym lub skorzystać ze strzałek dostępnych w palecie Controls Modern Decorations. Ustaw kolor kontrolki na przezroczysty (T od ang. transparent). Należy w tym celu skorzystać z narzędzia malowania, w palecie Tools (patrz rys. 12). Tak utworzoną kontrolkę zapisz jako Ścisła definicja typu (Strict Type Def.) i dodaj do klastra z danymi pogodowymi. Zmień kolejność elementów w klastrze tak aby element Kierunek wiatru znajdował się przed elementem Siła Wiatru. Zapisz zmiany w kontrolce i odpowiednio zmodyfikuj program stacji pogodowej. (2 pkt.) Rysunek 11: Przykład klastra prezentującego dane pogodowe Rysunek 12: Wybór koloru przezroczystości Wydział Fizyki, Politechnika Warszawska - Podstawy Projektowania Przyrządów Wirtualnych 7