Wydział Inżynierii Materiałowej
i Ceramiki AGH
Katedra Chemii Analitycznej
Komputery w pracach eksperymentalnych
Przedmiot obieralny
Instrukcja do ćwiczenia: Przyrządy wirtualne. System LabVIEW i możliwości jego zastosowania w programowaniu eksperymentu
Opracowanie:
dr Małgorzata Jakubowska
Kraków 2001
Wstęp
Zintegrowany system programowania LabVIEW umożliwia specjalistom z różnych specjalności technicznych tworzenie systemów pomiarowych, sterowanie nimi, zbieranie wyników i ich analizę. Jego istota i nowoczesność - w ogromnym uproszczeniu rzecz ujmując - polega na tym, że bardzo prostymi środkami graficznymi można tworzyć skomplikowane struktury zarówno wirtualne, jak i współpracujące z działającą aparaturą. LabVIEW znajduje zastosowanie w wielu dziedzinach szeroko pojętej techniki i nauki: w laboratoriach automatyki, w telekomunikacji, elektrotechnice, mechanice stosowanej, fizyce, chemii, biologii, fizjologii, psychologii, w fabrykach i pracowniach naukowych. Zintegrowane środowisko programowania LabVIEW ma swoje źródła w USA, gdzie pojawiło się na początku lat 90., a następnie zaczęło się rozpowszechniać w Europie.
LabVIEW jest środowiskiem do programowania podobnym do C, BASIC lub LabWindows. Aczkolwiek LabVIEW różni się od tych aplikacji pod jednym bardzo ważnym względem. Inne środowiska programistyczne wykorzystują tekstowe języki programowania by tworzyć kolejne linie kodu, podczas gdy LabVIEW używa graficznego języka G do tworzenia programów w formie schematów blokowych.
LabVIEW jest środowiskiem ogólnego zastosowania z obszernymi bibliotekami funkcji oraz mechanizmami wspomagającymi programowanie. LabVIEW zawiera również specjalistyczne biblioteki umożliwiające akwizycję danych, kontrolę portów interfejsów pomiarowych, analizę, prezentację i zapis wyników. Możliwe jest również sprawdzanie wykonywania programu, ustawianie przerwań, śledzenie przechodzenia sygnałów. LabVIEW jest przeznaczone przede wszystkim do zastosowań pomiarowych.
Podstawy programowania w środowisku LabVIEW
Środowisko LabVIEW charakteryzuje się graficznym językiem programowania przeznaczonym dla systemów kontrolno - pomiarowych, gdzie istotną rolę odgrywa akwizycja i wizualizacja danych. Dzięki graficznemu językowi programowania możliwe jest szybkie opracowanie algorytmów sterujących oraz procedur odpowiedzialnych za obrazowanie wyników i komunikację z operatorem. Po zgromadzeniu danych można przetworzyć wyniki pomiarów za pomocą różnorodnych procedur, np. cyfrowej analizy danych, filtracji cyfrowej, statystyki i analizy numerycznej, itd. Istotna zaletą proponowanych rozwiązań jest możliwość sterowania oprogramowaniem i prezentacją wyników pomiaru poprzez interaktywny panel przedni przyrządu wirtualnego. Okazuje się, że przyjęte koncepcje pozwalają na prostsze - w stosunku do innych rozwiązań - tworzenie oprogramowania.
Wszystkie programy napisane w środowisku LabVIEW to tzw. przyrządy wirtualne (ang. virtual instruments - VI). Na każdy z przyrządów wirtualnych składa się panel frontowy oraz schemat blokowy (diagram przepływu danych). Do projektowania tych dwóch wymienionych struktur służą narzędzia graficzne, które umieszczone są trzech w paletach.
Środowisko LabVIEW charakteryzuje się dwoma oknami edycyjnymi oraz trzema paletami narzędzi. Dwa wbudowane edytory to:
edytor graficznego interfejsu użytkownika czyli panelu frontowego przyrządu wirtualnego (rys. 1)
edytor programu w języku G czyli schematu blokowego (rys. 2).
Rys. 1. Okno edycji panelu frontowego przyrządu wirtualnego.
Panel frontowy (ang. front panel) jest graficznym interfejsem przyrządu wirtualnego zaprogramowanego w środowisku LabVIEW. Interfejs ten pozwala na sterowanie przyrządem poprzez ustawienie odpowiednich parametrów lub opcji oraz wizualizację wyników. Panel frontowy zawiera m.in. przyciski, pokrętła, kontrolki oraz wskaźniki liczbowe i graficzne.
Rys. 2. Okno edycji schematu blokowego (diagramu przepływu danych).
Schemat blokowy (ang. block diagram) zawiera graficzny kod programu realizującego funkcje przyrządu wirtualnego. Stanowi on odzwierciedlenie poszczególnych obiektów wejścia i wyjścia umieszczonych w panelu frontowym. Wskazuje jak poszczególne kroki mają być realizowane i przy użyciu jakich funkcji lub struktur.
Palety (ang. palettes) dostarczają użytkownikowi narzędzi do tworzenia oraz edycji panelu frontowego oraz schematu blokowego.
|
Paleta narzędzi (ang. tools palette) jest używana podczas tworzenia oraz edycji panelu frontowego oraz schematu blokowego |
Paleta kontrolek (ang. controls palette) jest używana jedynie podczas tworzenia panelu frontowego. Zawiera kontrolki oraz wskaźniki, które stanowią części składowe interfejsu użytkownika. |
|
|
Paleta funkcji (ang. functions palette) zawiera elementy używane podczas tworzenia schematu blokowego. Obiekty zestawione w niej pozwalają na napisanie zasadniczego programu działania instrumentu wirtualnego. Poszczególne funkcje realizują operacje arytmetyczne, wejścia i wyjścia pomiarowego, obsługi plików oraz akwizycji danych. |
Przepływ sterowania (ang. data flow) w instrumencie wirtualnym odbywa się na podstawie schematu blokowego (rys. 3). Schemat taki składa się z węzłów (ang. nodes) oraz z drutów (ang. wires), które łączą węzły. Obiekty te definiują przepływ danych podczas wykonania programu. Wykonanie procedury pojedynczego węzła odbywa się, kiedy wszystkie jego wejścia są określone (dostępne). Po zakończeniu wykonania programu w węźle wszystkie jego wyjścia są zwalniane i dane przekazywane są do dalszego przetwarzania w kolejnych węzłach.
Rys. 3. Przykładowy schemat blokowy instrumentu wirtualnego z zaznaczonym kierunkiem przepływu danych.
Przykładowy przyrząd wirtualny - ćwiczenie I
Poniższy przykład ilustruje jak w prosty sposób zbierać, analizować i przechowywać dane środowisku LabVIEW. Aby wytworzyć graficzny interfejs użytkownika należy posłużyć się narzędziami dostępnymi w palecie kontrolek.
Po uruchomieniu środowiska LabVIEW należy w wyświetlonym okienku dialogowym wybrać opcję New VI. Krok ten pozwoli na rozpoczęcie tworzenia oprogramowania nowego przyrządu wirtualnego.
W oknie edytora panelu frontowego należy wybrać Edit >> Select Palette Set >> basic.
W celu umieszczenia na panelu frontowym przycisku włączającego zasilanie (ang. power) należy wybrać Vertical Toggle Switch z Controls >> Boolean. Ikonę z palety wybiera się podobnie jak funkcję z menu.
Następnie trzeba przesunąć wskaźnik na panel frontowy i kliknięciem myszy umiejscowić pobrany z palety przycisk.
Etykietę przycisku należy opisać jako Power. Jeżeli etykieta nie jest widoczna należy wykonać funkcję Show Label z menu kontekstowego powiązanego z elementem przycisku, do którego dostęp umożliwia nam prawy przycisk myszy. Do zmiany wielkości oraz położenia obiektów i połączeń używamy Positioning Tool
z palety narzędzi.
Do prezentacji danych jednowymiarowych zbieranych przez program posłuży wykres pobrany z palety poprzez Contols >> Graph >> Waveform Chart.
Należy umiejscowić wykres w panelu kontrolnym i wpisać etykietę Random Plot.
Do zmiany skali wykresu można wykorzystać Operating tool
z palety narzędzi. Jeżeli paleta ta jest niewidoczna należy wybrać Windows >> Show Tools Palette. Następnie wystarczy podwójnie kliknąć na napisie 10.0 na osi Y wykresu Random Plot i wpisać liczbę 1.0.
Po utworzeniu panelu kontrolnego nowego przyrządu wirtualnego należy przystąpić do programowania schematu blokowego.
Do edytora schematu blokowego przechodzimy poprzez Show Diagram z menu Windows lub poprzez kliknięcie w obszarze okna tego edytora. Dwa obiekty widoczne w oknie odpowiadają przełącznikowi zasilania oraz wykresowi, umieszczonemu w panelu frontowym przyrządu wirtualnego.
W tym ćwiczeniu jako wejścia przyrządu wirtualnego użyjemy generatora liczb losowych, który dostarcza liczb z zakresu 0.0 do 1.0. Należy wybrać Random Number (0-1) z palety Functions >> Numeric. Jeżeli paleta funkcji jest niewidoczna należy wykonać Windows >> Show Functions Palette.
Należy umiejscowić obiekt realizujący funkcję Random Number na schemacie blokowym.
Dla zapewnienia wielokrotnego wykonania niektórych kroków algorytmu należy użyć instrukcji pętli while (ang. while loop), wybierając z palety Functions >> Structures >> While Loop. Działanie tej pętli polega na wykonywaniu kroków nią objętych dopóki warunek określany jako Conditional Terminal
pozostaje prawdziwy. Jeżeli wartość funkcji warunkowej zmienia się na fałsz, wtedy sterowanie opuszcza pętlę while - nie jest ona już wykonywana.
Należy umieścić wskaźnik w oknie edytora schematu blokowego w miejscu, gdzie chcemy zakotwiczyć lewy górny róg pętli. Pętlę należy następnie powiększać diagonalne tak, aby objęła wszystkie pozostałe obiekty na schemacie.
Kolejny etap realizacji programu przyrządu wirtualnego polega na zdefiniowaniu połączeń w celu określenia drogi przepływu danych w schemacie blokowym. Służy do tego mechanizm Wiring tool
.
Należy wybrać Wiring tool z palety narzędzi.
Trzeba połączyć obiekt Random Number z obiektem Random Plot. W celu wykonania połączenia należy kliknąć pierwszy obiekt, przesunąć wskaźnik do drugiego obiektu i kliknąć ponownie w celu zakończenia połączenia (drutu).
Następnie należy połączyć przycisk zasilania z polem warunku pętli while.
W celu uruchomienia zaprojektowanego przyrządu wirtualnego należy wybrać Operating tool
z palety narzędzi oraz przejść do panelu frontowego i załączyć przycisk zasilania (przełączyć do pozycji TRUE).
Następnie kliknąć przycisk Run
na pasku narzędzi okna edytora graficznego.
W celu zatrzymania programu przyrządu wirtualnego należy przełączyć przycisk zasilania do pozycji dolnej (wyłączony, FALSE). Ponieważ pętla while wykonuje się tak długo dopóki warunek pozostaje prawdziwy, zmiana ustawienia przełącznika spowoduje przerwanie wykonania pętli.
W kolejnym etapie tworzenia instrumentu wirtualnego dodamy opóźnienie czasowe, które spowoduje, że wartości z generatora liczb losowych będą pobierane co pewien zaprogramowany odcinek czasu, zaś wykres obserwowanej zależności będzie rysował się wolniej.
Należy przejść do okna schematu blokowego i wybrać Wait Until Next ms Multiple z palety Functions >> Time & Dialog.
Należy umieścić funkcję Wait Until Next ms Multiple wewnątrz pętli while.
Z menu kontekstowego powiązanego z elementem Wait Until Next ms Multiple należy wybrać Create Constant. Menu to można rozwinąć poprzez naciśnięcie prawego przycisku myszy w momencie, gdy kursor jest ustawiony po lewej stronie elementu, którego ma dotyczyć. W przeciwnym przypadku utworzone pole stałej nie będzie powiązane z funkcją opóźnienia.
W polu edycyjnym należy wpisać wartość 250, co oznacza, że opóźnienie pomiędzy generacją poszczególnych punktów w generatorze liczb losowych wyniesie 250 milisekund.
Przed rozpoczęciem kolejnego testu można wyzerować obszar wykresu, wywołując z menu kontekstowego powiązanego z tym elementem funkcję Data Operations >> Clear Chart. W celu zaobserwowania efektu opóźnienia należy przejść do panelu frontowego i załączyć przycisk zasilania. Po zakończeniu testu przycisk wyłączyć. Zmodyfikowany program obsługi przyrządu wirtualnego należy zapisać w pliku, np. Random Number Test.vi, wywołując odpowiednią funkcję z menu edytora graficznego.
W kolejnym etapie wzbogacimy program przyrządu wirtualnego o pewien element analizy danych. Dodamy obiekt graficzny, który umożliwi obliczenie średniej arytmetycznej otrzymywanych z generatora liczb. Na koniec uzupełnimy nasz algorytm o procedurę zapisu wyników do pliku.
Należy przejść do edytora schematu blokowego, w którym umieszczony jest aktualnie diagram tworzonego przez nasz przykładowego przyrządu wirtualnego. Jeżeli nie jest on załadowany trzeba odczytać go z pliku Random Number Test.vi.
Element Mean.vi, pozwalający na obliczanie średniej arytmetycznej należy wybrać z palety Functions >> Analysis >> Probability and Statistics.
Ikonę Mean.vi pobraną z palety należy umieścić na zewnątrz pętli while.
Z menu kontekstowego powiązanego z elementem Mean.vi należy wybrać Create Indicator. Operacja ta spowoduje, że na panelu frontowym utworzony zostanie wskaźnik, w którym będzie wyświetlana wartość średniej arytmetycznej badanego ciągu liczb. Podczas otwierania menu kontekstowego kursor musi być ustawiony w prawym górnym roku etykiety.
Następnie należy wybrać obiekt Write To Spreadsheet File.vi z palety Functions >> File I/O.
Element Write To Spreadsheet File.vi należy umieścić w schemacie blokowym, poza pętlą while.
Używając narzędzia Wiring tool
należy połączyć „drutem” funkcję Random Number z wejściem X elementu Mean.vi. Należy zwrócić uwagę, że segment drutu miga, gdy Wiring tool jest umieszczony prawidłowo w celu założenia nowego połączenia z istniejącego fragmentu.
W kolejnym kroku należy utworzyć kolejne odgałęzienie z odcinka drutu narysowanego w kroku poprzednim. Segment ten powinien kończyć się na wejściu 1D data obiektu Write To Spreadsheet File.vi. Używamy wejścia 1D data ponieważ pętla while dostarcza nam jednowymiarowego strumienia danych, pochodzącego z generatora liczb losowych.
Czarny tunel w pętli while daje możliwość wyprowadzenia danych poza wnętrze pętli. Z menu kontekstowego związanego z tym czarnym tunelem należy wybrać Enable Indexing. Drut zaznaczony linią przerywaną zamieni się w ciągła pomarańczowa linię. Mechanizm Enable Indexing pozwala pętli while na gromadzenie danych w swoim wnętrzu i przekazanie ich na zewnątrz, do elementu Mean.vi dopiero po zakończeniu działania pętli.
Na koniec należy przejść do panelu kontrolnego przyrządu i używając Operating tool
załączyć zasilanie przyrządu wirtualnego.
Po zakończeniu testu i wyłączeniu zasilania w okienku opisanym etykietą mean pojawi się średnia arytmetyczna wygenerowanego ciągu liczb oraz okno dialogowe, w którym należy podać nazwę pliku, do którego mają być zapisane wyniki (np. data.txt). W celu wykonania zapisu należy nacisnąć przycisk wirtualny Save.
Odczytanie pliku z wynikami data.txt możliwe jest przy użyciu dowolnego edytora tekstowego.
2