Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki MATERIAŁY POMOCNICZE DO ZAJĘĆ LABORATORYJNYCH ŚRODOWISKO LABVIEW. ELEMENTY JĘZYKA PROGRAMOWANIA GRAFICZNEGO Laboratorium z przedmiotu: Metody Identyfikacji i Diagnostyki (dla kierunku Elektrotechnika sem. VII) Kod: ES1C721 359 Opracowali: dr inż. Andrzej Sobolewski (Białystok, jesień 2010 r.) dr hab. inż. Mirosław Świercz (Białystok, jesień 2015 r.)
1. LABVIEW JAKO ŚRODOWISKO PROGRAMOWE Pakiet LabView jest ukierunkowany na programowanie systemów kontrolnoprogramowych w których wykorzystuje się akwizycję danych. Istotą działania programu jest używanie graficznego języka programowania algorytmów komunikacji i wymiany danych pomiędzy urządzeniami wchodzącym w skład systemu kontrolno- pomiarowego. Bardzo często program LabView jest nazywany przyrządem wirtualnym (ang. virtual instrument) lub krótko programem VI. Wynika to z możliwości stosowania aplikacji napisanych w tym środowisku do pełnienia funkcji rzeczywistych przyrządów pomiarowych, takich jak multimetry, oscyloskopy i wiele innych. Każdy wirtualny instrument VI zawiera takie same elementy jak rzeczywiste urządzenie z tą różnicą, że operowanie nimi jest dokonywane za pomocą myszy i klawiatury komputera, na którym uruchomiony jest program. Po zgromadzeniu danych można, korzystając z biblioteki wirtualnych przyrządów pomiarowych, przetworzyć wyniki pomiarów za pomocą różnorodnych procedur np. cyfrowej analizy danych, filtracji cyfrowej, analizy statystycznej, analizy numerycznej, itd. Można również sterować oprogramowaniem i prezentacją wyników pomiaru poprzez interaktywny panel przyrządu pomiarowego. LabView jest w pełni przystosowany do komunikacji z fizycznymi urządzeniami pomiarowymi poprzez oprogramowanie interfejsów cyfrowych, takich jak: GPIB, VXI, PXI, RS485, RS232 integracja środowiska pomiarowego z fizycznymi przyrządami tworzy Cyfrowy System Pomiarowy. LabView jest również przystosowany do połączenia z internetem za pomocą narzędzia LabView web server i standardów programowych takich jak TCP/IP oraz ActiveX. LabView zawiera podstawowe biblioteki narzędziowe do akwizycji, analizy i prezentacji danych. Pozwala również analizować i śledzić poprawność wykonywanego programu, tak jak to się odbywa w językach programowania tekstowego. 2. OPIS ŚRODOWISKA LABVIEW Pakiet LabView składa się z dwóch komponentów: Pulpitu (front panel), który stanowi graficzny interfejs użytkownika i zawiera wszelkie wirtualne narzędzia do komunikacji programu ze światem zewnętrznym ; 2
Rys. 2. 1. Wygląd pustego panelu frontowego projektu Diagramu (block diagram), który stanowi edytor programu i zawiera strategię działania aplikacji zaprogramowaną w języku graficznym G. Rys. 2. 2. Podział rodzajów ikon ze względu na ich funkcje programowe Działanie programu jest możliwe dzięki wykorzystywaniu: Terminali (terminals) są one portami wejściowymi i wyjściowymi przesyłającymi informacje pomiędzy pulpitem i diagramem. Dane wprowadzone do elementów kontrolnych pulpitu wpływają do diagramu przez końcówki wejściowe (kontrolne). Dane wpływające do końcówek wyjściowych (wskaźnikowych) opuszczają diagram i przechodzą do odpowiednich elementów prezentacyjnych pulpitu. Końcówka jest generowana automatycznie w diagramie w momencie umeiszczenia elementu kontrolnego lub prezentacyjnego na pulpicie. Reprezentuje ona port do określonego elementu pulpitu oraz typ danych wchodzących lub wychodzących, np. DBL - double. 3
Węzłów (nodes), które są obiektami wyposażonymi w wejścia i wyjścia danych realizującymi określone operacje podczas działania programu. W języku graficznym pełnią podobne role jak wyrażenia, operatory, funkcje i procedury w językach tekstowych. Przewodów (wires), które służą do budowania połączeń (dróg przepływu danych) pomiędzy elementami diagramu. Każde połączenie może mieć tylko jedno źródło danych, lecz może być rozgałęzione do wielu punktów odbioru danych. W zależności od typu przesyłanych danych połączenia są wyróżniane kolorami, stylem linii łączącej oraz jej grubością. Złe połączenia są automatycznie zaznaczane czarną linią przerywaną. Konstrukcji sterujących (structures) języka graficznego, które zapewniają specyficzny sposób wykonania fragmentów kodu. Pozwalają one realizować powtarzanie bloków kodu (pętle), warunkowy wybór wykonania bloków kodu (case) lub określić sekwencję wykonania bloków kodu. 4
W każdym z dwóch paneli programu dostępne są dwie palety narzędzi do wykorzystywania podczas tworzenia aplikacji, dostępne z Menu głównego okna pulpitu. Palety Pulpitu: Rys. 2. 3. Okna Tools i Controls, dostępne w panelu frontowym 5
Palety Diagramu Blokowego: Rys. 2. 4. Okna Tools i Functions dostępne w panelu diagramu blokowego W paletach znajdują się narzędzia (podprogramy, tzw. SubVi), łatwe do wykorzystania w postaci Ikon. Ikona jest więc swego rodzaju odpowiednikiem procedury w tekstowych językach programowania. Strumień przepływu danych LabView działa na zasadzie przekazywania danych z jednego węzła diagramu do drugiego. Kolejność działania poszczególnych elementów programu jest więc zależna 6
od ukierunkowania strumienia przepływu danych. Węzeł bloku diagramu wykona przypisaną mu operację, kiedy wszystkie jego wejścia będą skompletowane i dostępne. Wówczas dane wejściowe zostają przetworzone i przekazane jako dane wyjściowe bloku do następnego węzła. 3. ELEMENTY JĘZYKA PROGRAMOWANIA GRAFICZNEGO G Instrukcje sterujące Podstawą programowania w języku G jest zrozumienie i opanowanie stosowanie konstrukcji sterujących, do których zaliczamy: konstrukcję sterującą Sequence, konstrukcję sterującą Case, konstrukcję Formula Node, pętlę For Loop, pętlę While Loop oraz operator Shift Register. Struktura Sequence Konstrukcja Sequence odpowiada instrukcji grupującej {} (nawiasowi) w języku C. Służy ona do grupowania obiektów języka G, co zwiększa przejrzystość programu i umożliwia wprowadzenie zależności czasowych pomiędzy fragmentami wykonywanego kodu. Struktura sekwencyjna składa się z jednej lub wielu ramek, które mogą zawierać kody programów wykonywanych etapowo, w kolejności rosnącej zgodnie z numerem ramki sekwencji. Dane opuszczają strukturę w momencie, kiedy ostatnia ramka kończy czynność. Wyjście danych poza strukturę odbywa się poprzez tunel, który może być podłączony tylko do jednego źródła informacji. Dane na wejściu tunelu są dostępne dla wszystkich ramek. 7
Rys. 3. 1. Ramka (frame) struktury Sequence Tworzenie nowych ramek odbywa się poprzez wybranie z menu podręcznego (dostępnego po kliknięciu prawym przyciskiem myszy) opcji Add Frame After bądź Add Frame Before albo Duplicate Frame. Do usunięcia wskazanej ramki służy opcja Remove Frame. Do przenoszenia danych pomiędzy jedną ramką a ramkami niższego poziomu ( podsekwencyjnymi ) służą sekwencje lokalne. Aby utworzyć sekwencję lokalną wybiera się opcję Sequence Local>>Add. Pojawiają się wówczas strzałki na krawędziach ramek, a kierunek strzałek będzie wskazywał na ramkę źródłową i ramki w sekwencjach lokalnych. Struktura wyboru Case Konstrukcja sterująca Case jest odpowiednikiem instrukcji wyboru if i switch w języku C. Konstrukcja ta umożliwia wykonanie odpowiedniego fragmentu kodu programu w zależności od wyników realizacji kodu programu wykonanego wcześniej. Konstrukcja sterująca Case umożliwia realizację jednej z wielu zdefiniowanych operacji. Każda zdefiniowana operacja znajduje się w osobnej ramce konstrukcji sterującej Case. Wybór aktywnej ramki jest dokonywany przez odpowiednie pole 8
selektora. W przypadku, gdy do pola selektora jest dołączone wyrażenie logiczne (typ Boolean ), wybór następuje spośród dwóch: wartości FALSE i TRUE. Jeżeli do selektora jest dołączona wartość liczbowa, struktura może mieć od 0 do 32767 wartości (przypadków). Jeżeli do selektora jest dołączony element typu Numeric, dla każdego elementu musi istnieć jeden podschemat. Konstrukcja sterująca jest identyfikowana tak samo jak nazwa pozycji elementu typu Numeric. Rys. 3. 2. Ramka (frame) struktury Case Selektor można umieścić w dowolnym miejscu obramowania, może on również pozostać niepodłączony. Selektor automatycznie dostosowuje się do typu danych. Jeżeli zmieni się wartość połączenia do selektora z Numeric na Boolean, przypadki 0 i 1 zmienia się na FALSE i TRUE. Pętle w LabView Pętle są realizowane przez konstrukcje For Loop i While Loop i wraz z operatorem Shift Register odpowiadają instrukcją iteracyjnym do... while i for w języku C. Konstrukcje te służą do wielokrotnego wykonywania tego samego fragmentu kodu programu. Po zastosowaniu elementu Shift Register można je wykorzystać do obliczeń iteracyjnych. 9
Pętla For W LabView pętla For pozwala na zdefiniowanie określonej liczby iteracji przez podłączenie do wejścia N stałej o wartości całkowitej, oraz pozwala na odczyt wartości licznika iteracji przez podłączenie się do wyjścia i. Pętla While Rys. 3. 3. Przykład pętli For Podobnie jak w językach tekstowych, pętla While posiada licznik iteracji i, który może być wykorzystywany na przykład do wyznaczenia warunku końca działania pętli. Istnieje również możliwość zdefiniowania innego warunku końca działania pętli. Pętla While wykonuje się, dopóki wartość logiczna elementu podłączonego do warunku końca pętli będzie miała wartość FALSE. Pętla sprawdza wartość warunku końca po zakończeniu każdej iteracji. 10
Rys. 3. 4. Przykład pętli While Rejestry przesuwne ( Shift registers ) Zarówno pętla For, jak i pętla While mogą być wyposażone w rejestry przesuwne (Rys. 3. 4.). W symbolu bloku pętli pojawiają się wówczas prostokąty na przeciwległych krawędziach ramek, ze strzałkami w dół lub górę. Rejestrów przesuwnych używa się do przejścia danych z aktualnego warunku do następnej iteracji. Operatory rejestru przesuwnego są to elementy przesyłu informacji, będące lokalnymi zmiennymi, które przechowują informacje z poprzednich iteracji. Historia danych sięga tak daleko, ile elementów rejestru zostanie zdeklarowanych. Operator rejestru przesuwnego składa się z dwóch pól oznaczonych przez strzałki skierowane przeciwnie. Informacja wychodząca z rejestru przesuwnego, tzn. elementu ze strzałką w górę, jest doprowadzona do elementu ze strzałką skierowaną w dół. Formuła węzła ( Formula Node ) Bardzo ciekawym narzędziem jest formuła węzła. Pozwala ona na realizację zależności matematycznej pomiędzy danymi wejściowymi a wyjściowymi. Innymi słowy formuła ta służy do wyznaczania wartości funkcji jednej bądź wielu zmiennych. Określenie argumentów funkcji jak i jej wartości odbywa się za pomocą podręcznego menu. 11
Rys. 3. 5. Ramka formuły węzła Formula Node Formula Node może więc służyć do wprowadzania wyrażeń znanych z języka C. W obrębie tego obiektu można stosować następujące operatory: arytmetyczne: + - znak plus, - - znak minus, ++ - inkrementacja, -- - dekrementacja, + - dodawanie, - - odejmowanie, * - mnożenie, / - dzielenie, % - reszta z dzielenia, ** - wykładnik potęgi (operator niedostępny w C); logiczne:! - negacja (NOT), && - koniunkcja argumentów (AND), - alternatywa argumentów (OR); bitowe: ~ - negacja zestawu bitów, 12
& - koniunkcja zestawu bitów, ^ - różnica symetryczna zestawu bitów, - alternatywa zestawu bitów, >> - przesunięcie w prawo, << - przesunięcie w lewo, relacji: == - równy,!= - różny, < - mniejszy, > - większy, <= - mniejszy bądź równy, >= - większy bądź równy. inne:?: - operator warunkowy. Dostępne są również funkcje wbudowane: abs, acos, acosh, asin, asinh, atan, atanh, ceil, cos, cosh, cot, csc, exp, expm1, floor, getexp, getman, int, intrz, ln, lnp1, log, log2, max, min, mod, rand, rem, sec, sign, sin, sinc, sinh, sqrt, tan, tanh. 13