Projektowanie i uruchamianie prostego systemu pomiarowego z

Transkrypt

Projektowanie i uruchamianie prostego systemu pomiarowego z
LABORATORIUM SYSTEMÓW POMIAROWYCH
KTP
IR
PW
ŚRODOWISKO PROGRAMOWE
LabView
(materiały pomocnicze do ćwiczenia)
Opracowali:
mgr inż. Piotr Bilski
dr inż. Wiesław Winiecki
Warszawa 2003
1. Wstęp
LabVIEW jest zintegrowanym środowiskiem programowania opracowanym (i sukcesywnie
uprawnianym) przez firmę National Instruments. Jest to pakiet oprogramowania służący do
projektowania wirtualnych przyrządów pomiarowych. Obecnie najnowszą dostępną wersją
pakietu jest wersja 7.0. Główne cechy środowiska LabVIEW to:
-
-
-
-
-
obiektowe podejście do programowania (każdy element płyty czołowej, fukcji
wewnętrznej programu lub podprzyrządu traktowany jest jak obiekt z właściwościami i
metodami z nim związanymi),
programowanie odbywa się w języku graficznym „G”, który w przeciwieństwie do
klasycznych języków oferuje ikony funkcji łączone na diagramach przy pomocy „nitek”
zamiast formy tekstowej
wykorzystywanie bibliotek dołączanych dynamicznie (DLL) umożliwia korzystanie z
funkcji standardowo niedostępnych w pakiecie LabVIEW. Jest to przydatne podczas
tworzenia skomplikowanego lub nietypowego przyrządu wirtualnego
łączność ze specjalizowanymi urządzeniami takimi jak karta akwizycji danych odbywa
się przy pomocy standardu bibliotecznego wejścia/wyjścia VISA. Jest to standard
uwzględniający wszystkie najważniejsze interfejsy wykorzystywane w metrologii,
zapewniający uniwersalność pisanych aplikacji
gotowy program może zostać skompilowany do postaci samodzielnego programu dzięki
jednemu z wewnętrznych narzędzi pakietu. Dzięki temu może on być uruchamiany na
komputerach bez zainstalowanego środowiska LabVIEW, jednak z pewnymi
obostrzeniami (wymagana jest instalacja na stanowisku docelowym środowiska
uruchomieniowego LabVIEW Run-Time)
Przedstawione cechy czynią z LabVIEW środowisko niezwykle popularne, dostępne na
wielu platformach programowych i sprzętowych (poczynając od Windows, poprzez UNIX-a,
a kończąc na komputerach typu Macintosh). Pakiet jest stosunkowo łatwy w obsłudze, a
intuicyjny sposób tworzenia kodu sprawia, iż jest w on w obrębie zainteresowań nie tylko
inżynierów, ale również osób na co dzień nie związanych z projektowaniem przyrządów.
2. Opis wybranych ikon narzędziowych i funkcyjnych
LabVIEW uruchamia się poprzez dwukrotne kliknięcie myszą na ikonie:
lub też wybranie odpowiedniej pozycji z menu START
Każdy przyrząd wirtualny (Virtual Instrument) od strony programowej składa się z dwóch
głównych elementów: płyty czołowej przyrządu oraz okna (zwanego diagramem) edycji
kodu. Pomiędzy tymi dwoma obiektami istnieje ścisły związek, bowiem elementy
umieszczane na płycie czołowej są reprezentowane przez swoje odpowiedniki na diagramie.
Podobnie, wyniki działania poszczególnych funkcji mogą być wizualizowane na płycie
czołowej.
2
Obsługa obu przedstawionych okien odbywa się niemal wyłącznie przy pomocy myszy.
Podczas pracy projektowej niezbędne stają się dodatkowe okienka, z których każde zostanie
przedstawione poniżej:
2.1. Okno narzędziowe
Okno to jest przydatne zarówno podczas pracy w trybie płyty czołowej, jak
i diagramu. Najważniejsze ikonki znajdujące się w nim to:
narzędzie operacyjne – służy do wybierania elementów, zmiany
nastaw kontrolek itp.
narzędzie pozycjonowania – służy do wybierania elementów,
zmiany ich wielkości, przemieszczania itp.
narzędzie tekstowe – służy do wpisywania tekstu w kodzie oraz na płycie czołowej,
pozwala łatwo zmienić wartości kontrolek.
narzędzie połączeniowe – służy do łączenia obiektów w diagramie „nitkami”
przenoszącymi dane
narzędzie przemieszczania – służy do sprawnego przesuwania obszaru płyty czołowej
lub diagramu
narzędzie zatrzymania programu – pozwala ustawić punkt przerwania (breakpoint) i
sprawdzić np. stan zmiennych w wybranym momencie działania programu
narzędzie pobierania koloru – służy do ustalania aktywnego kolory poprzez wybranie
dowolnego punktu w oknie
3
2.2. Okno kontrolek
Jest to okno aktywne tylko podczas pracy z płytą czołową.
Zawiera wszystkie elementy potrzebne do stworzenia
przejrzystego i funkcjonalnego panelu. Znajdują się tutaj
kontrolki (czyli obiekty służące do zmiany nastaw przyrządu)
oraz wskaźniki (obiekty wyświetlające wyniki działania
przyrządu). Dodatkowo znajdują się tu również elementy
dekoracyjne. Najważniejsze grupy obiektów to:
kontrolki i wskaźniki numeryczne umożliwiające
ustawienie lub odczytanie wartości liczbowych
dowolnego typu obsługiwanego przez LabVIEW
kontrolki i wskaźniki binarne, służące zwykle jako
przełączniki wyzwalające przyrząd, uruchamiające
poszczególne partie programu lub zatrzymujące pracę
przyrządu
kontrolki i wskaźniki tekstowe służące do umieszczania w zmiennych napisów
oraz ścieżek dostępu do plików
wyświetlacze graficzne służą do umieszczania na panelu wykresów dwu- i
trójwymiarowych
kontrolki cykliczne wykorzystywane są do tworzenia list, w których wybiera się
jedną spośród kilku dostępnych opcji (np. kształt sygnału, rodzaj filtru itp.)
Każda grupa elementów zawiera kilka kontrolek lub wskaźników, a także czasami kolejne
podgrupy, dzięki czemu wszystkie elementy ułożone są w strukturze hierarchicznej. Ułatwia
to znacząco dotarcie do wybranych obiektów.
PRZYKŁAD
Grupa wykresów (Graph) zawiera oprócz kilku rodzajów rysunków grupę kontrolek
(controls), ta z kolei przechowuje grupę typów danych (datatypes). Dotarcie do tych ostatnich
wymaga pojedynczych kliknięć lewym przyciskiem myszy na każdej z odpowiednich ikon:
4
2.3. Okno funkcji
To okno aktywne jest tylko podczas pracy w trybie diagramu.
Udostępnia ono wszystkie obiekty, jakie mogą zostać
umieszczone na w kodzie, począwszy od zmiennych, poprzez
funkcje, a skończywszy na podprzyrządach (subVI’s). Podobnie
jak w przypadku okna kontrolek są one pogrupowane według
kategorii i zhierarchizowane. Najważniejsze grupy to:
obiekty sterowania przepływem programu (struktury).
Tutaj znajdują się wszystkie obiekty potrzebne do
zapewnienia właściwego przepływu danych pomiędzy
funkcjami. W ogólności są to sekwencje, pętle, struktury
decyzyjne.
funkcje, zmienne i stałe związane z numerycznymi
typami danych, takie jak mnożenie, dodawanie,
zaokrąglanie, funkcje trygonometryczne, logarytmiczne
itp.
funkcje, zmienne i stałe związane z binarnym typem danych, takie jak operatory
logiczne i funkcje zaokrąglenia.
funkcje, zmienne i stałe związane z działaniami na łańcuchach znaków. Tutaj
znajdują się funkcje konwersji, łączenia łańcuchów, wyszukiwanie wzorca itp.
funkcje, zmienne i stałe związane z działaniami na macierzach i wektorach Tutaj
znajdują się operacje inicjalizacji macierzy, zmiany wymiaru, łączenia, dodawania i
mnożenia macierzy.
operatory porównania. Tutaj znajdują się wszystkie potrzebne funkcje sprawdzające
warunki logiczne, a także wyszukujące wartości ekstremalne w wektorze danych,
sprawdzające typ danych itp.
funkcje związane z tworzeniem i działaniem okien dialogowych oraz operacjami
czasowymi. Tutaj znajdują się funkcje mierzące czas, opóźniające działanie
programu, gotowe okna dialogowe, a także okna obsługi błędów.
funkcje przetwarzania sygnałów. Ta bardzo obszerna grupa zawiera operacje
związane z generacją sygnałów (konieczne podczas symulacji) a także funkcje
standardowo wykorzystywane podczas analizy sygnału (okienkowanie, filtrowanie,
transformaty, operacje statystyczne, takie jak liczenie średnich, odchyleń standardowych itp.)
funkcje komunikacji ze sprzętem. Tutaj znajdują się gotowe sterowniki urządzeń (w
razie potrzeby mogą zostać doinstalowane kolejne) oraz procedury umożliwiające
komunikację z przyrządami zewnętrznymi poprzez magistralę GPIB, łącze
szeregowe, a także uniwersalny standard VISA.
5
funkcje komunikacji zdalnej. Tutaj znajdują się procedury służące do ustanowienia
komunikacji przez sieć komputerową (protokoły TCP, IP, UDP), łącze
podczerwieni, Internet (mechanizm ActiveX itp.).
funkcje obsługi przebiegów sygnałowych. Jest to nowość od wersji 6i, w której
wprowadzono szereg ułatwień dla operacji na wektorach sygnałów. Znajdują się tu
operacje generacji przebiegów, działań matematycznych (dodawanie, mnożenie itp.),
uzyskiwania informacji o ich parametrach, działań z dziedziny cyfrowego przetwarzania
sygnałów itp.
Wszystkie trzy przedstawione okna mogą być zarówno ukrywane, jak i sprowadzane na
pierwszy plan.. Można tego dokonać w menu Window (komendy Show Functions Palette,
Show Controls Palette oraz Show Tools Palette). Dodatkowo, okna kontrolek i funkcji
mogą zostać przywołane w każdej chwili przy pomocy prawego klawisza myszy (musi być
naciśnięty na tle okna panelu czołowego lub diagramu).
2.4. Ikony sterowania programem
Istnieją dwa dodatkowe obszary projektowe, które okazują się niezwykle pomocne podczas
tworzenia nowego przyrządu wirtualnego. Pierwszym z nich jest pozioma belka pod menu
tekstowym w górnej części obu okien:
Ikony po lewej stronie odpowiadają procedurom uruchamiania i zatrzymywania pracy
przyrządu. Są to odpowiednio:
przycisk jednorazowego uruchomienia przyrządu. Po jego naciśnięciu przyrząd raz
wykona zadanie, do którego został stworzony i zakończy działanie (chyb że zawiera
pętle zmuszające go do dalszej pracy)
przycisk pracy ciągłej. Po jego naciśnięciu przyrząd będzie działał w nieskończonej
pętli aż do naciśnięcia przycisku zatrzymania
przycisk zatrzymania pracy przyrządu. Jego naciśnięcie powoduje zakończenie pracy
programu bez względu na jego stan wewnętrzny.
przycisk wstrzymania (pauzowania) pracy przyrządu. Jego naciśnięcie powoduje
zastopowanie pracy programu, jednak wszystkie zmienne pozostają w pamięci.
Ponowne naciśnięcie przycisku spowoduje kontynuację pracy programu.
Przycisk jednorazowego uruchomienia przyrządu posiada też właściwość sygnalizującą, iż w
programie są błędy uniemożliwiające działanie przyrządu. W takiej sytuacji przycisk
wygląda następująco:
Jest to informacja dla użytkownika, iż musi poprawić kod.
Przyciski na belce znajdujące się po prawej stronie służą do zmiany czcionki, jaką pisany jest
tekst w kodzie i na panelu czołowym oraz grupowania na nim obiektów. Z kolei w oknie
diagramu belka wygląda nieco inaczej:
6
Znajdują się tu cztery dodatkowe przyciski:
Przycisk wizualizujący przepływ danych w kodzie. Początkujący programiści
wykorzystują go aby dowiedzieć się, w jakiej kolejności wykonywane są
poszczególne fragmenty kodu
przyciski służące do sekwencyjnego uruchamiania kodu. Przydatne są w momencie,
gdy do kodu wstawione zostaną punkty zatrzymania (breakpoints), dzięki czemu
można obserwować uruchamianie kolejnych funkcji. Program zatrzymuje się po
dotarciu do każdej funkcji i czeka na działanie projektanta.
Drugie okno to okno pomocy kontekstowej. Jeśli jest ono otwarte, uaktywnienie większości
funkcji (zaznaczenie ich poprzez kliknięcie na nich lewym przyciskiem myszy) powoduje
pokazanie opisu funkcji wraz z omówieniem terminali. Pomoc kontekstowa uruchamiana jest
poprzez komendę Show Context Help z menu Help.
2.5. Pętle i struktury sterujące
Ze względu na krytyczne znaczenie tego bloku funkcji zostanie on przedstawiony nieco
szerzej. Sterowanie kodem ilustrowanym na diagramie związane z przepływem danych
pomiędzy funkcjami odbywa się również w postaci graficznej. Zarówno pętle, jak i struktury
decyzyjne wykorzystywane są w następujący sposób: użytkownik wybiera jedną ze struktur
sterujących z menu podręcznego, a następnie obramować kursorem o zmienionym wyglądzie
ten fragment kodu, który ma znajdować się w jej obrębie. Wszystkie opcje dotyczące struktur
dostępne są po naciśnięciu prawego przycisku myszy na krawędzi struktury. Następujące
struktury sterujące dostępne są w menu:
sekwencja stertowa (stacked sequence) – w LabVIEW do wersji 6.1 włącznie była to
jedyna struktura synchronizująca przepływ danych. Należy ją wykorzystywać w
większości przypadków, zwłaszcza wtedy, kiedy wydarzeń następujących po sobie
jest dużo. Tworzone są tu po kolei „klatki filmowe”, które ułożone są w określonym
porządku względem innych klatek. Dzięki temu projektant może zapewnić uruchamianie
konkretnych funkcji przed innymi. W sekwencji stertowej jednocześnie widoczna jest tylko
jedna klatka. Istnieje możliwość przekazywania danych pomiędzy klatkami przy pomocy
zmiennej lokalnej sekwencji (sequence local).
sekwencja płaska – nowość w LabVIEW 7.0, działa bardzo podobnie jak sekwencja
stertowa, jednak wszystkie klatki ustawione są na diagramie obok siebie i widoczne
jednocześnie. Należy jej używać wtedy, kiedy planowana liczba klatek jest
stosunkowo niewielka. Poza tym sekwencja płaska ma takie samo znaczenie funkcjonalne jak
sterowa.
struktura decyzyjna CASE – ma ona takie samo znaczenie jak struktura CASE w
każdym innym języku programowania, gdzie pole wyboru ma charakter
wyliczeniowy. W LabVIEW można podejmować zarówno decyzje dwuwartościowe,
jak i wielowartościowe. Uwaga: brak podłączenia nitki danych do pola wyboru generuje błąd
kompilatora!
pętla FOR - w LabVIEW istnieją tylko dwa rodzaje pętli. Pierwsza wykorzystywana
jest w sytuacji, kiedy liczba iteracji została z góry ustalona. Możliwe jest wzajemne
zagnieżdżanie pętli for, dzięki czemu da się np. tworzyć wielowymiarowe macierze.
7
pętla WHILE – ten rodzaj pętli używany jest w przypadku, kiedy liczba iteracji jest z
góry nieznana, bądź też ustala się dopiero po uruchomieniu pętli. W tym przypadku
konieczne jest podanie warunku zatrzymania. Pętla WHILE bardzo często
wykorzystywana do tworzenia głównej pętli programu (przyrząd działa do momentu
naciśnięcia przycisku STOP).
struktura tworzenia wzorów (formula node) – LabVIEW umożliwia w prosty sposób
tworzenie specjalnych rodzajów funkcji, których wykonanie polega na bezpośrednim
obliczeniu wartości z podanych wzorów.
PRZYKŁAD (UŻYCIE SEKWENCJI)
Chcąc wyświetlić dwa okna dialogowe, jedno po drugim w ustalonej kolejności, należy w
kodzie programu umieścić obiekt sekwencji (z grupy Structures np. Flat Sequence
Structure). Następnie należy dodać drugą ramkę, klikając prawym przyciskiem myszy na
krawędzi ramki i wybierając z menu kontekstowego opcję Add Frame After. Posiadając
dwie ramki do obu trzeba wstawić funkcję okna dialogowego z grupy Time & Dialog
(polecenie One Button Dialog) oraz stałe znakowe, do których wprowadzi się napisy
wyświetlane w oknach dialogowych. Po wykonaniu wszystkich czynności kod powinien
wyglądać następująco:
Przykład wykorzystania pętli podany zostanie w dalszej części instrukcji.
2.6. Typy danych
LabVIEW obsługuje większość typów danych właściwych innym językom programowania.
W przeciwieństwie do nich, tutaj deklaracja typu reprezentowana jest przez kolor obiektu lub
nitki łączącej. Generalnietypy danych można podzielić na proste i złożone
1. Podstawowe typy proste to:
•
•
•
•
•
typ całkowitoliczbowy. Obejmuje on zarówno typy ze znakiem (integer 8-, 16- i 32bitowy), jak i bez znaku (unsigned integer 8-, 16- i 32-bitowy). W kodzie reprezentowany
jest on przez kolor niebieski.
typ zmiennoprzeciwnkowy. Obejmuje zarówno liczby pojedynczej, jak i podwójnej
precyzji. Reprezentowany jest przez kolor pomarańczowy..
typ binarny. Dotyczy obiektów o logice dwuwartościowej. Reprezentowany jest przez
kolor zielony.
typ łańcuchowy. Odpowiada za wszystkie operacje na łańcuch znakowych i
pojedynczych znakach. Reprezentowany jest przez kolor fioletowy.
typ wyliczeniowy. Dotyczy obiektów mogących posiadać tylko kilka wartości. Ponieważ
typowi temu odpowiadają liczby całkowite, jest on również reprezentowany przez kolor
niebieski.
8
•
•
•
typ ścieżkowy. Właściwa dla LabVIEW odmiana typu łańcuchowego, która służy niemal
wyłącznie do podawania ścieżek do plików i katalogów.
Typ identyfikatora sesji VISA. Odmiana typu łańcuchowego służąca do obsługi funkcji
odpowiedzialnych za sesję VISA. Reprezentuje ją kolor bordowy.
W obrębie większości typów danych istnieje subtelne rozróżnienie pomiędzy typami
jedno- i wielowymiarowymi. Te ostatnie mają ten sam kolor, co odpowiadające im typy
jednowymiarowe, jednak ich nitki są grubsze. Do obsługi takich danych są oczywiście
potrzebne inne kontrolki na panelu czołowym.
PRZYKŁAD
Chcąc stworzyć wektor wypełniony dowolną wartością (operacja taka nazywana jest
inicjalizacją macierzy) można skorzystać z funkcji Initialize Array w menu Array. Wymaga
ona dwóch argumentów: wartość wypełniająca oraz liczba elementów wektora. Ta pierwsza
może być losową liczbą z przedziału (0;1), generowaną przez funkcję Random Number w
menu Numeric. Drugi argument może być stałą typu integer o wartości np. 10. Po połączeniu
zmiennych z funkcją należy jeszcze na panelu czołowym dodać kontrolkę wyświetlającą
zawartość wektora. Dokonuje się tego przy pomocy kontrolki Array z menu Array &
Cluster okna kontrolek panelu czołowego. Na płycie czołowej powstaje wówczas pusty
prostokąt, który trzeba jeszcze wypełnić odpowiednim typem danych. W tym celu należy
wybrać odpowiedni wyświetlacz, np. cyfrowy (Numeric Indicator) z menu Numeric i
„upuścić” go nad prostokątem wektora. Wówczas pojawi się dopiero pełnowartościowa
kontrolka obsługująca wygenerowany wektor:
Na diagramie powinien znajdować się następujący kod:
W przypadku gdybyśmy chcieli wygenerować nie wektor, lecz macierz, musimy dodać jeden
argument do funkcji Initialize Array. W tym celu trzeba kursorem myszy uchwycić
niebieski punkt na środku dolnej krawędzi ikony i przeciągnąć go w dół. Dzięki temu można
będzie podać drugi wymiar macierzy, który powinien, tak jak poprzednio, być stałą typu
integer. Aby program dał się skompilować trzeba jeszcze dodać wymiar do kontrolki na
panelu czołowym. Należy prawym klawiszem myszy wywołać menu podręczne kontrolki i
wybrać opcję Add Dimension. Wówczas można podłączyć wyjście funkcji generującej
macierz z wejściem wyświetlacza.
9
Należy zwrócić uwagę na dwie rzeczy: nitka łącząca wyjście funkcji z wyświetlaczem jest
grubsza niż poprzednio. Oznacza to, iż jest nią przesyłana macierz. Druga kwestia to
możliwość rozciągania kontrolki wyświetlającej zawartość macierzy lub wektora. Wystarczy
uchwycić ją na rogu i pociągnąć w dół lub na boki.
2. Typy złożone (inaczej klastry) to odpowiedniki struktur w klasycznych językach
programowania. Są to zmienne zawierające w sobie więcej niż jedną zmienną (mogą być one
różnych typów). Charakteryzują je grube, prążkowane linie.
•
struktura obsługi błędów, zawierająca trzy najważniejsze komponenty:
- informacja o wystąpieniu błędu (typ binarny)
- numer błędu (liczba całkowitoliczbowa: dodatnia, jeśli wystąpiło ostrzeżenie,
ujemna dla błędu)
- opis źródła błędu (zmienna łańcuchowa)
Struktura obsługi błędów jest reprezentowana przez kolor fioletowy.
• typ przebiegów sygnałowych (waveform). Jest to rodzaj klastra, który zawiera
specyficzne dane dotyczące wektora sygnału. Są to przede wszystkim:
- t0 – moment rozpoczęcia generacji sygnału (decyduje o offsecie)
- dt – odległość na osi czasu między próbkami sygnału (determinowana przez
częstotliwość próbkowania)
- Y – wektor próbek sygnału
Typ przebiegów sygnałowych jest reprezentowany przez kolor brązowy
PRZYKŁAD (wykorzystanie typu waveform)
Podczas projektowania prostego generatora sygnałowego w kodzie umieszczona została
funkcja Basic Function Generator z grupy Waveform -> Waveform Generation. Aby
uzyskać informacje na temat charakteru wygenerowanego sygnału, należy wykorzystać
funkcję Get Waveform Components z grupy Waveform, a następnie połączyć ją z funkcją
generacji sygnału. Aby uzyskać trzy terminale wyjściowe (odpowiadające t0, dt i Y), należy
uchwycić ikonę Get Waveform Components za prawy dolny róg i pociągnąć w dół.
Odczytanie uzyskiwanych wartości jest możliwe po umieszczeniu na panelu czołowym trzech
wskaźników i połączeniu ich nitkami z terminalami poprzedzającej je funkcji.
10
Jedną z ważniejszych operacji na typach złożonych (klastrach) jest uzyskiwanie dostępu do
zmiennych składowych oraz tworzenie klastra z kilku zmiennych prostych. Operacji tych
dokonuje się poprzez funkcje bundle oraz unbundle (względnie bundle by name i
unbundle by name) dostępnych w grupie Cluster w oknie Functions Palette.
PRZYKŁAD (użycie funkcji dostępu do składowych klastra)
Mając w kodzie klaster obsługi błędu możemy uzyskać dostęp do jego składowych używając
funkcji unbundle (wyższa na rysunku) oraz unbundle by name. Należy zauważyć, że obie
funkcje dopasowują liczbę terminali wyjściowych do liczby zmiennych składowych klastra.
Różnica między funkcjami polega tylko na wizualnym oznaczeniu terminali wyjściowych
(przez typ zmiennej, bądź jej nazwę w klastrze).
LabVIEW oferuje wygodną lecz czasem zdradliwą właściwość automatycznej konwersji
danych do typu akurat wymaganego. Oznacza to, że projektant, nie musi troszczyć się o
ręczną zamianę typu, środowisko programowe zrobi to za niego. W niektórych sytuacjach
może jednak dojść do niebezpiecznego w skutkach nieporozumienia, dlatego też na ogół
zaleca się ręczną konwersję przy pomocy dostępnych w LabVIEW funkcji.
3. Struktura programu
Najistotniejszymi elementami kodu LabVIEW są funkcje oraz podprzyrządy, które wykonują
większość zadań programu. Zasadnicza funkcja między funkcjami a podprzyrządami test
taka, że te ostatnie zawierają płytę czołową, przy pomocy której można dokonywać nastaw.
Dodatkowo, mogą też działać jako samodzielne programy. W LabVIEW 7.0 wprowadzono
nowy rodzaj przyrządu zwany ekspresowym. Po jego umieszczeniu w kodzie natychmiast
pojawia się płyta czołowa umożliwiająca konfigurację.
11
Uwaga:
Jakkolwiek przyrządy ekspresowe są bardzo wygodnymi narzędziami ze względu na
wyjątkową prostotę obsługi, ze względu na niewielką kontrolę projektanta nad sposobem
działania, nie zaleca się używania ich w wielu profesjonalnych zastosowaniach, np.
wymagających synchronizacji czasowej (praca w trybie Real-Time).
Interakcja pomiędzy płytą czołową i oknem diagramu ma charakter zdarzeń jednocześnie
zachodzących na obu obiektach. Przykładem może być umieszczenie kontrolki na płycie
czołowej. Operacji odpowiada pojawienie się w oknie kodu zmiennej związanej z tą
kontrolką. Należy zauważyć, że kontrolki związane są z wejściami obiektów programowych,
podczas gdy wyświetlacze odpowiadają wyjściom tych obiektów. Każdy obiekt w kodzie
posiada zestaw wejść/wyjść zwanych terminalami. Odpowiadają one argumentom oraz
wartościom zwracanym funkcji w klasycznych językach programowania. Oczywistym jest,
że możliwe jest łączenie wyłącznie wejść z wyjściami, każda inna kombinacja wywołuje
sprzeciw kompilatora. Łączenie obiektów programowych odbywa się przy pomocy narzędzia
połączeniowego (po jego wybraniu kursor zmienia się kołowrotek). Po jego wybraniu należy
najechać na obiekt, którego wyjście chcemy połączyć. Wówczas pokazane zostaną wszystkie
terminale, rola użytkownika sprowadza się zaś do wybrania konkretnego. Następnie należy
przemieścić kursor (od tej chwili będzie się za nim „ciągnąć” przerywana linia – „nitka”) nad
obiekt, którego wejście chcemy połączyć z uprzednio wybranym wyjściem. Analogicznie
trzeba dokonać wyboru odpowiedniego terminala. Jeśli wszystko zostało wykonane
prawidłowo, w oknie kodu powinna pokazać się kolorowa linia łącząca obiekty. Jej kolor
odpowiada konkretnemu typowi danych. W przypadku popełnienia błędu, np. połączenia
dwóch terminali tego samego typu, pojawi się przerywana linia przekreślona czerwonym
krzyżykiem. Oznacza to, że operacja została wykonana niewłaściwie a połączenie należy
poprawić.
PRZYKŁAD
Stworzenie dwóch prostych kontrolek numerycznych na płycie czołowej wymaga użycia
grupy Numeric w oknie kontrolek. Należy zwrócić uwagę na wybór odpowiedniego obiektu
(kontrolki w przeciwieństwie do wyświetlaczy mają dwie małe strzałki po lewej stronie
wyświetlacza, które pozwalają zmieniać jego wartość). Wybór odbywa się poprzez kliknięcie
lewym przyciskiem myszy na odpowiednim obiekcie (kursor zmienia wówczas kształt na
kontur tego właśnie obiektu), przeniesienie go nad okno płyty i powtórne kliknięcie w
wybranym miejscu (co powoduje jego upuszczenie). Z kolei umieszczenie wskaźnika
odbywa się w sposób analogiczny, należy jedynie pamiętać, aby wybrać obiekt bez strzałek
po lewej stronie. W wyniku tych działań na oknie panelu powinny pojawić się trzy
wyświetlacze, na diagramie zaś trzy odpowiadające im zmienne:
12
W celu stworzenia programu obliczającego iloczyn dwóch liczb należy jeszcze dodać funkcję
mnożenia, dostępną w oknie funkcji, w grupie numerycznych typów danych:
ostatnią operacją jest łączenie odpowiednich terminali. Funkcja mnożenia posiada dwa
wejścia i jedno wyjście. Te pierwsze zostaną połączone z zmiennych powiązanych z
kontrolkami, to ostatnie zaś ze zmienną odpowiadającą wskaźnikowi. Łączenie odbywa się w
sposób pokazany na rysunku:
13
Ostatecznie kod powinien wyglądać w sposób następujący:
Warto zauważyć, że w momencie umieszczenia w diagramie funkcji mnożenia przycisk
uruchomienia programu zmienił postać na „zepsutą”, informując użytkownika, że w kodzie
znajdują się błędy i w takiej postaci program nie zostanie skompilowany. Dopiero po
połączeniu wszystkich terminali program może zostać uruchomiony, co sygnalizuje „cała”
strzałka na przycisku uruchomienia.
W przypadku popełnienia błędu przez projektanta oba okna LabVIEW mogą wyglądać
następująco:
Chcąc stworzyć program, który będzie działał cały czas (do momentu zatrzymania przez
użytkownika), a nie tylko jednorazowo, należy wzbogacić powyższy diagram o pętlę
WHILE. Wystarczy wybrać ją z menu podręcznego i objąć cały kod, aby otrzymać diagram o
następującym wyglądzie:
14
Aby przyrząd działał prawidłowo, trzeba jeszcze dodać przycisk STOP, zatrzymujący jego
pracę i połączyć go z warunkiem zatrzymania (czerwony kwadrat w prawym dolnym rogu
pętli). Przycisk STOP znajduje się w grupie boolean okna kontrolek. Ostatecznie okna
diagramu i płyty czołowej powinny wyglądać następująco:
Błędy
Kiedy projektant zdaje sobie sprawę z istnienia błędów w diagramie, jednak nie zna ich
przyczyny, powinien skorzystać z okna listy błędów, w którym znajdują się opisy wszystkich
problemów uniemożliwiających kompilację. Może ono zostać uruchomione poprzez
polecenie Show Error List w menu Window, bądź też w wyniku naciśnięcia przycisku
jednorazowego uruchomienia programu w momencie, kiedy strzałka na jego ikonie jest
„złamana”. Każdy wiersz oznacza tam jeden błąd, przy czym jeden problem może być
przyczyną wielu błędów. Dwukrotne kliknięcie lewym przyciskiem myszy na każdym
wierszu (lub naciśnięcie przycisku Show Error) przenosi do obszaru diagramu, który należy
poprawić.
Lista wygląda następująco:
15
Sterowniki
Specjalną odmianą funkcji są sterowniki programowe sprzętu dołączonego do komputera PC.
Traktowane są one tak samo, jak wszystkie inne obiekty programowe, ich interpretacja jest
jednak nieco inna. Sterownik to zestaw programów (funkcji) służących do komunikacji ze
sprzętem, zatem każde jego użycie pociąga za sobą reakcję urządzenia zewnętrznego. W
ramach sterownika znajdują się funkcje konfiguracji i wyzwolenia przyrządu, można je
jednak rozbudować o dodatkowe możliwości. Przykładem sterownika jest instalowany
standardowo w LabVIEW sterownik multimetru HP34401 (dostępny w grupie Instrument
I/O w podgrupie Instrument Drivers). Zawiera on funkcje potrzebne do oprogramowania
urządzenia od wstępnej konfiguracji, poprzez sterowanie jego pracą, aż po kończenie sesji.
PRZYKŁAD (sterowanie pomiarami przy pomocy multimetru HP 34401)
Chcąc zaprojektować aplikację wykonującą pomiary w trybie ciągłym aż do wyłączenia
przyrządu, potrzebujemy cztery funkcje wchodzące w skład sterownika multimetru. Są to:
HP 34401A Initialize, HP 34401A Configure Measurement, HP34401A Read Meas oraz
HP34401A Close. Wszystkie one można znaleźć w grupie funkcji Instrument I/O w
podgrupie Instrument Drivers. Funkcję inicjującą pracę multimetru umieszczamy przed
główną pętlą programu, zaś kończącą jego pracę – za tą pętlą. Wewnątrz umieszczamy
pozostałe funkcje, które działają do momentu naciśnięcia przycisku STOP. Wszystkie
funkcje łączymy poprzez identyfikator sesji VISA (brązowa linia łącząca górne części ikon
funkcji) oraz obsługę błędów poprzez obsługę błędów (fioletowa linia na dole). Uwaga: by
zapewnić prawidłową obsługę błędów, należy ją umieścić zarówno wewnątrz pętli, jak i na
zewnątrz, za ostatnią funkcją. Jeśli zabraknie jej wewnątrz pętli, do momentu zatrzymania
programu nie będzie wiadomo, że wystąpił błąd!
16
Przepływ danych
W przeciwieństwie do klasycznych języków programowania LabVIEW nie jest związany ze
sztywnym sekwencyjnym uruchamianiem kodu. Wynika to z faktu, iż czasami trudno jest
określić, które funkcje zostaną wywołane jako pierwsze. Ogólna zasada środowiska związana
jest z istnieniem (lub nie) danych potrzebnych do uruchomienia funkcji na jej wejściu.
Zawsze najpierw rozpoczynają działanie te funkcje, które mają dane na wszystkich
terminalach wejściowych. Jeśli jednak jest to prawdą dla kilku funkcji, powstaje problem
ustalenia, w jakiej kolejności zadziałają. Jeśli projektant chce wymusić określoną sekwencję,
powinien użyć do tego celu struktury sekwencji
4. Informacje dodatkowe
4.1. Konfigurowanie obiektów na panelu czołowym
Umieszczenie kontrolki lub wskaźnika na płycie czołowej przyrządu rzadko wyczerpuje
oczekiwania projektanta. bardzo często zachodzi potrzeba np. zmiany zakresu liczb, które
można wstawić do kontrolki, zmiany typu danych, umieszczenia w kodzie właściwości
obiektu itp. Wszystkie operacje dokonuje się w menu kontekstowym, które uaktywniane jest
przez prawy klawisz myszy naciśnięty nad elementem panelu. Poniżej przedstawione są
najważniejsze pola tego menu:
•
•
•
•
•
•
Visible Items – pozwala na skonfigurowanie, które elementy pomocnicze obiektu
powinny być widoczne. Np. w przypadku listy zaznaczenie opcji Digital Display
powoduje umieszczenie obok wybieranej nazwy również liczby jej odpowiadającej.
Find Terminal – ułatwia znalezienie na diagramie zmiennej odpowiadającej kontrolce. To
samo można osiągnąć klikając na niej dwukrotnie lewym przyciskiem myszy.
Change to Indicator/ Change to Control – zmienia typ obiektu z wyświetlacza na
kontrolkę i vice versa.
Create – jest to podmenu, które umożliwia stworzenie kilku dodatkowych elementów
związanych z kontrolką lub wyświetlaczem. Może to być np. zmienna lokalna (Local
Variable), stanowiąca po prostu kopię zmiennej, która może zostać wykorzystana w
innym miejscu kodu (jest to przydatne, gdy do tego samego obiektu z płyty czołowej
trzeba się odwoływać z zupełnie różnych obszarów diagramu). Z drugiej strony menu to
umożliwia tworzenie i manipulowanie właściwościami obiektów, takimi jak widoczność,
czy blokowanie dostępu (Visible, Disabled). Działań tych dokonuje się przy pomocy
polecenia Property Node.
Representation – służy do zmiany typu danych reprezentowanego przez obiekt.
Data Range – umożliwia ustalenie, jakie mogą być wartości zmiennej, zarówno krańcowe
(minimalna i maksymalna), jak i początkowa (domyślna).
17
•
•
Format & Precision – umożliwia zmianę formatu wyświetlanych liczb (automatyczny,
naukowy itp.), a także liczbę miejsc po przecinku.
Data Operations – proste podmenu związane z działaniami na wartości aktualnie
reprezentowanej przez zmienną. Może to być np. skopiowanie jej do schowka (Copy),
lub uczynienie domyślną dla tej zmiennej (Make Current Value Default ).
4.2. Przydatne skróty klawiszowe
Tworzenie programu w środowisku LabVIEW jest na ogół zajęciem czasochłonnym i
żmudnym. Z tego powodu warto ułatwiać sobie pracę poprzez stoswanie skrótów
klawiszowych, które przyspieszają niektóre działania:
<ctrl+H> – pokazanie pomocy kontekstowej
<ctrl+B> – usunięcie wszystkich źle podłączonych nitek danych
<ctrl+?> – przełączenie okna w tryb pełnoekranowy
<ctrl+E> – przełączanie pomiędzy oknami płyty czołowej i diagramu
<ctrl-Z> – cofnięcie ostatnio wykonywanych operacji
18

Podobne dokumenty