background image

PRACOWNIA METROLOGII

Podstawy programowania w środowisku 

LabView

 (Laboratory Virtual Instrumentation 

Engineering Workbench)

background image

ĆWICZENIE 1:

Podstawy projektowania przyrządów 

wirtualnych I

Cel ćwiczenia:

Zapoznanie się z podstawami projektowania w środowisku LabView.

Wprowadzenie

Podstawowe składniki programu VI. 

Program napisany w LabVIEW jest nazywany przyrządem wirtualnym ( virtual instrument ) 

lub krótko programem VI. Określenie to wynika z analogii wizualnego obrazu aplikacji oraz 

jej   działania   do   fizycznego   przyrządu   takiego   jak   oscyloskop   czy   multimetr.  

Każda   aplikacja   VI   używa   elementy   nastawcze,   które   wprowadzają   dane   z   interfejsu 

użytkownika   lub   innych   źródeł   oraz   elementy   prezentacyjne,   które   wyświetlają   dane 

wyjściowe na pulpicie interfejsu użytkownika lub wyprowadzają je do innych odbiorców. 

Program VI składa się z trzech komponentów:

Pulpitu (front panel), który pełni rolę interfejsu użytkownika;

Diagramu (block diagram), który jest graficznym zapisem kodu programu. Definiuje 

funkcjonalność aplikacji w języku graficznym G.

Ikony i złącza (icon & connector panel). Ikona identyfikuje VI tak, że dany VI 

można użyć w innym programie VI. Tak użyty program VI jest określany 

podprogramem VI ( subVI ). Odpowiada on procedurze w tekstowych językach 

programowania. Złącze ( connector panel ) definiuje wejścia i wyjścia podprogramu 

oraz ich przyporządkowanie i odpowiada definicji argumentów procedury w językach 

tekstowych.

Pulpit jest graficzną formą interfejsu użytkownika. Wizualnie odpowiada rozwiązaniom płyt 

przednich   urządzeń   pomiarowych.   Buduje   się   go   za   pomocą   elementów   kontrolnych 

i prezentacyjnych, które stanowią odpowiednio końcówki wejściowe i wyjściowe programu 

VI. Elementami kontrolnymi są pokrętła nastawcze, przyciski, przełączniki itp. Symulują one 

elementy nastawcze fizycznych urządzeń i dostarczają danych wejściowych do diagramu VI. 

Do elementów prezentacyjnych zalicza się wyświetlacze numeryczne, alfanumeryczne, diody, 

2

background image

wyświetlacze   graficzne   (wykresy),   tabele   itp.   Symulują   one   elementy   prezentacyjne 

fizycznych urządzeń i wyświetlają dane dostarczane przez diagram.

Widok Pulpitu i Diagramu

Przyciski:

3

background image

Elementy nastawcze:

Wskaźniki:

Wykresy:

Diody:

W większości przypadków możliwa jest zmiana trybu pracy danego elementu z elementu 

kontrolnego (control) na wskaźnik (indicator) i na odwrót.

4

background image

Diagram blokowy składa się z terminali, funkcji, struktur i przewodów. Budowanie programu 

w języku G polega na ich odpowiednim łączeniu.  Kolejność wykonywania poszczególnych 

operacji   jest   uzależniona   od   przepływu   danych   –   najpierw   wykonywane   są   te   elementy 

programu, które nie wymagają żadnych danych wejściowych.

         

Diagram blokowy i jego odpowiednik na panelu

Terminale   są  wejściowym   i   wyjściowym   portem   wymieniającym   informację  pomiędzy 

panelem   frontowym   a   diagramem   blokowym.   Reprezentują  one   typ   danej   kontrolki   lub 

wskaźnika. Można zmodyfikować terminale tak, aby widoczne były na diagramie jako ikony 

typu   danych   lub   jako   ikony   kontrolek   widocznych   na   panelu   frontowym   (ustawienie 

domyślne).

Przykład terminala w postaci ikony kontrolki panelu frontowego i ikony typu danych.

W LabView podobnie jak w klasycznych językach programowania istnieje wiele różnych 

typów   danych:   logiczne,   całkowite,   rzeczywiste,   łańcuchy   itp.,   każdy   z   nich   ma   inną 

reprezentację graficzną:

5

background image

Aby   wykonywać   operacje   na   elementach   programu   (łączenie,   kopiowanie,   zmiana   nazw, 

rozmiarów itp.) niezbędne jest użycie narzędzi dostępnych w polu narzędzi (Tools Palette).

Pole narzędzi – Tools Palette

Poszczególne narzędzia służą do:

1) Manipulator - obsługa panelu sterowania, zmiana wartości liczbowych, zmiana 

położenia suwaków potencjometrów, włączanie/wyłączanie przełączników

2) Selektor (strzałka) - zaznaczanie obiektów, zmiana rozmiarów, przesuwanie

3) Wskaźnik edycji tekstu – edycja tekstu po kliknięciu

4) Szpulka – łączenie poszczególnych obiektów (ikon)

5) Wskaźnik menu – rozwijanie podręcznego menu odnoszącego się do wskazanego 

obiektu (podobnie działa prawy przycisk myszy)

6) Wskaźnik przewijania – przewijanie zawartości okna

7) Wskaźnik przerwań – zatrzymanie programu w miejscu zaznaczenia

8) Sonda – podgląd danych w dowolnym miejscu programu

9) Wskaźnik – próbnik kolorów umożliwia zmianę kolorów poszczególnych elementów

panelu (górny kwadrat) lub samego tła (dolny kwadrat)

Górny przycisk służy do ustalenia trybu przełączania między narzędziami: ręcznego (przy 

pomocy klawisza Tab)/automatycznego (program dostosowuje wskaźnik do danego obiektu).

6

background image

Pisanie programu wiąże się z używaniem różnych funkcji, które w tradycyjnych językach 

tekstowych są po prostu wpisywane (np. +, =, mean). Aby w LabVIEW użyć określonej 

funkcji należy ją znaleźć na palecie funkcji i umieścić na diagramie.

Paleta   funkcji   (Function   Palette)   jest   zbiorem   wszystkich   dostępnych   funkcji   środowiska 

LabVIEW. Funkcje  są  reprezentowane przez jasnożółte ikony z czarnym rysunkiem. Nie 

mają panelu czołowego ani diagramu i nie można ich edytować (po dwukrotnym kliknięciu 

myszą) 

Dostępne funkcje to:

 funkcje numeryczne do arytmetycznych, trygonometrycznych, logarytmicznych, 

zespolonych operacji matematycznych na liczbach jak również do konwersji ich 

typów

 funkcje logiczne pozwalające na obliczanie wartości jednej zmiennej, lub tablicy 

wartości logicznych takich jak: zmiana wartości na przeciwną, operacje na 

„bramkach”

 logicznych, konwersja wartości logicznych do numerycznych i odwrotnie

 funkcje operujące na ciągach znaków (String). Pozwalają one na: łączenie, dzielenie, 

przeszukiwanie, zamienianie ciągów znaków, zamienianie ich na wartości 

numeryczne i odwrotnie

 funkcje operujące na tablicach (Array), pozwalające miedzy innymi na:

utworzenie tablicy, sprawdzenie jej, wymiaru, dzielenie, dodawanie, usuwanie 

elementów tablicy

 funkcje operujące na zbiorach (Cluster), czyli obiektach odpowiadających strukturom 

języka C, lub rekordom Pascala. Pozwalają one na umieszczanie i wyciąganie 

pojedynczych elementów ze zbioru, konwersję zbiorów na tablice i odwrotnie

 funkcje porównujące służące do porównywania wartości numerycznych, logicznych, 

ciągów znaków, tablic i zbiorów. Zwracane wartości to najczęściej wartości logiczne 

– prawda, jeżeli parametry funkcji spełniają dany warunek, fałsz, jeżeli tego warunku 

nie spełniają

 funkcje do obsługi czasu i funkcje dialogowe stosowane do określania prędkości 

wykonywania struktur, pobierania wartości czasu z zegara systemowego, tworzenie 

okien dialogowych

 funkcje do operacji plikowych - służące między innymi do: zapisywania 

i odczytywania z pliku, pozwalające na otwieranie, zamykanie, zapisanie, odczytanie, 

stworzenie, usunięcie pliku, stworzenie, usunięcie, przeszukanie katalogu

7

background image

 funkcje do komunikacji pozwalające na wymianę danych pomiędzy aplikacjami 

(niekoniecznie napisanymi w LabVIEW). Znajdują się tu między innymi funkcje do 

komunikacji przez TCP/IP, UDP, IrDA, DS, Bt i inne

 funkcje do obsługi urządzeń pozwalają na komunikację z urządzeniem przy użyciu 

architektury Virtual Instrument Software Architecture (VISA). Funkcje te pozwalaj_ 

na wysyłanie i odbieranie ciągu znaków (string) oraz kontrolowanie komunikacji. W 

szczególności są to gotowe funkcje do komunikacji szeregowej przez GPIB oraz VXI

 funkcje do obsługi urządzeń pomiarowych firmy NI – czyli głównie kart 

pomiarowych. Znajdują się tutaj sterowniki Traditional DAQ oraz NI DAQmx.

Wymienione wyżej funkcje można podzieli na dwie kategorie: funkcje do obróbki 

danych, oraz funkcje komunikujące się ze sprzętem i pozwalające na zbieranie danych 

lub ich wysyłanie na zewnątrz komputera. Do tej kategorii należą między innymi 

grupy: Communication, Instrument I/O, NI Measurement.

Funkcje LabView

8

background image

Oprócz funkcji w środowisku LabView istniejące ikony reprezentują również tzw. programy 

VI biblioteczne, które składają się z odpowiednio połączonych funkcji. Po kliknięciu ikony 

reprezentującej VI mamy możliwość jego edycji:

Przykład bibliotecznego VI SineWave.vi (z lewej) i wygląd jego panelu oraz diagramu 

(z prawej)

Użytkownik ma również możliwość tworzenia własnych podprogramów VI, które będzie 

mógł wykorzystywać w innych projektach.

Obsługa programu z paska narzędziowego.

Poszczególne ikony służą do:

1) jednokrotnego uruchomienia programu

2) uruchomienia programu w pętli

3) całkowitego zatrzymania programu

4) pauzy

Poza tym istnieje możliwość ustawienia stylu czcionki i jej rozmiaru oraz rozmieszczenia 

elementów.

9

background image

Najczęściej używane skróty klawiszowe podczas pracy z programem LabView:

Ctrl + E – przełączanie między panelem a diagramem

Ctrl + T – rozmieszczenie panelu i diagramu obok siebie

Ctrl + B – usunięcie błędnych połączeń

Ctrl + H – menu pomocy kontekstowej

LabView jest wyposażony w rozbudowany system pomocy:

Pomoc kontekstowa uruchamiana skrótem Ctrl + H (lub poleceniem Help>>Show Context 

Help dostępnym z paska menu). Podaje podstawowe informacje o aktywnym obiekcie. 

Widok okna pomocy kontekstowej

Chcąc uzyskać pełne informacje o danym elemencie należy przejść do pomocy szczegółowej 

klikając   na   odnośnik   Detailed   Help.   Pomoc   szczegółowa   wyposażona   jest   w   spis   treści, 

indeks oraz w funkcję wyszukującą – dostępna jest również po wciśnięciu F1 lub Search 

LabView Help. 

Kolejnym   narzędziem   ułatwiającym   znalezienie   przyczyn   błędu   jest   polecenie  Explain 

error…  ,   która   umożliwia   identyfikację   błędu   i   jego   prawdopodobnych   przyczyn   na 

podstawie   numeru   błędu.   Jeśli   program   zawiera   błędy   logiczne   strzałka   służąca   do 

uruchomienia   programu   jest   koloru   szarego   –   po   kliknięciu   na   nią   pokazuje   się   okno 

z wykazem błędów – kliknięcie na opis błędu spowoduje przejście do diagramu i zaznaczenie 

prawdopodobnej przyczyny.

Niewątpliwie   bardzo   przydatną   cechą   środowiska   w   dużym   stopniu   ułatwiającą   pisanie 

programów jest bogato wyposażona biblioteka z przykładami, dostępna z menu Help>>Find 

10

background image

Examples. Odnośniki do przykładów wykorzystania poszczególnych ikon umieszczone są 

również w pomocy szczegółowej.

Zadania do wykonania:

I. Nauka obsługi programu graficznego:

1. Uruchomić program LabView Start>>Programy>>National 

Instruments>>LabVIEW 8.0>>LabView

2. Po uruchomieniu środowiska LabView wybrać Help>>Find Examples… 

Wybierz Analyzing and Processing Signals>>Signal 

Processing>>Signal Generation and Processing.vi.

3. Utworzyć kopię programu o nazwie Zad1 w katalogu roboczym 

Cwiczenie1 korzystając z menu File>>Save As..>>

4. Uruchomić program przyciskiem jednokrotnego uruchamiania

5.  Zmieniać wartości częstotliwości oraz wyboru typu filtru, zwracając 

uwagę na zmiany zachodzące na wykresach

6. Zatrzymać działanie programu wciskając przycisk STOP lub naciskając 

klawisz F4

7. Przełączyć się do diagramu przy pomocy skrótu klawiszowego Ctrl+E lub 

z menu Window>>Show Block Diagram

11

background image

8. Diagram składa się z kilkunastu elementów różnego rodzaju, które będą 

omawiane w dalszych ćwiczeniach

9. Przejść ponownie do panelu wciskając Ctrl+R

10. Zmienić kolor tła na niebieski - klikając na dolny kwadrat próbnika 

kolorów z palety Tools, wybierając kolor, a następnie klikając na front 

panel

11. Zmienić kolor przycisku stop na zielony klikając górny kwadrat, 

wybierając kolor a następnie klikając przycisk

12. Pozmieniać rozmiary poszczególnych elementów panelu. Uporządkować 

elementy przy pomocy narzędzia do rozmieszczania elementów

13. Zmienić czcionkę  dowolnej etykiety klikając na nią dwukrotnie, bądź przy 

pomocy narzędzia do edycji tekstu z palety Tools, następnie wybierając 

rozmiar i typ czcionki z paska narzędzi

14.Zmienić ustawienia przycisku STOP, tak aby działał na wciśnięcie 

klawisza F2. Kliknąć na przycisk prawym przyciskiem myszy wybrać 

Properties następnie kartę Key Navigation i właściwość Toggle zmienić 

na F2

15. Uruchomić program i sprawdzić jego działanie

16. Zamknąć program nie zapisując zmian

II. Budowa własnego programu

Zbudować program służący do konwersji temperatury w skali Celsjusza na 

Fahrenheita według następującego opisu:

1. Z ekranu startowego środowiska LabView wybrać Blank VI

2. Umieścić na panelu frontowym obiekt Numeric Control z palety 

Controls>>Numeric. Obiekt ten będzie służył do ustawiania wartości 

12

background image

temperatury w stopniach Celsjusza. Zmienić nazwę etykiety z Numeric na 

Temperatura w stopniach Celsjusza

3. Umieścić na panelu frontowym obiekt Numeric Indicator z palety 

Controls>>Numeric. Obiekt ten będzie służył do wyświetlenia wartości 

temperatury w stopniach Fahrenheita. Zmienić nazwę etykiety na 

Temperatura w stopniach Fahrenheita

4. LabView utworzy analogiczną kontrolkę i wskaźnik na diagramie

5.  Przejść do diagramu

Block Diagram

6. Przeliczenie skal odbywa się wg wzoru T[F] = T[C]*1,8 + 32. Diagram 

programu przedstawia się następująco:

7. Z palety Functions>>Numeric należy wybrać funkcje dodawania oraz 

mnożenia i wstawić do diagramu. Wykonać połączenia przy pomocy 

szpulki. Stałe 1,8 oraz 32 na wejściach ikon należy utworzyć klikając 

prawym przyciskiem myszy na wejście i wybierając Create Constant

Kliknięcie na stałą umożliwia jej edycję. Należy zwrócić uwagę, że 

separatorem dziesiętnym w LabView jest przecinek.

8. Zachować plik pod nazwą Zad2.vi w katalogu Ćwiczenie1

9. Uruchomić program w pętli nieskończonej i sprawdzić działanie

10.Na panelu kliknąć prawym przyciskiem myszy na kontrolkę temperatury w 

stopniach Celsjusza następnie z menu kontekstowego wybrać Replace i 

zamienić na kontrolkę numeryczną typu Knob

11. Ponownie sprawdzić działanie programu

III. Utworzenie podprogramu

1. Otworzyć uprzednio utworzony program Zad2.vi. Kliknąć prawym 

przyciskiem myszy na ikonę znajdującą się w prawym, górnym rogu 

panelu frontowego i wybrać Edit Icon. Usunąć istniejące ikony przy 

pomocy menu Edit>>Clear.

13

background image

2. Wybrać ikonę typu B & W i utworzyć ikonę według następującego wzoru:

3. Następnie zaznaczając ikony 16 Colors i 256 Colors skopiować utworzoną 

ikonę przy pomocy polecenia Copy from: Black & White. Po utworzeniu 

ikony kliknąć przycisk OK – nowa ikona pojawi się w rogu panelu.

4. Kliknąć prawym przyciskiem myszy na ikonie i wybrać Show Connector 

z menu kontekstowego. Ponieważ podprogram wymaga jednego terminala 

wejściowego i jednego wyjściowego należy z menu kontekstowego wybrać 

Patterns i wybrać odpowiednią ikonę :

Wejścia/wyjścia można dodawać usuwać przy pomocy poleceń 

Add/Remove terminal

5. Najechać wskaźnikiem myszy na ikonę spowoduje to zmianę wskaźnika 

myszy na szpulkę. Kliknąć lewy (wejściowy) terminal i poprowadzić nitkę 

do kontrolki na panelu a następnie kliknąć na nią tworząc w ten sposób 

połączenie. Podobnie połączyć prawy (wyjściowy) terminal ze 

wskaźnikiem na panelu. Po połączeniu obydwa terminale przyjmą kolor 

pomarańczowy typowy dla zmiennych typu Double

6. Zapisać tak utworzony podprogram pod nazwą Zad3_podprogram.vi

14

background image

IV. Wykorzystanie własnego podprogramu w innym projekcie

1. Utworzyć nowy program, przejść do diagramu

2. Z palety Functions wybrać polecenie Select VI…, znaleźć utworzony 

wcześniej podprogram i umieścić go na diagramie

3. Na wejściu ikony utworzyć kontrolkę przy pomocy polecenia Create 

Control

4. Na wyjściu ikony utworzyć wskaźnik przy pomocy polecenia Create 

Indicator

5. Zapisać program w katalogu Cwiczenie1 pod nazwą Zad4.vi

6. Przejść do panelu i uruchom program w pętli nieskończonej

7. Sprawdzić poprawność działania programu

15

background image

ĆWICZENIE 2:

Podstawy projektowania przyrządów 

wirtualnych II

Cel ćwiczenia:

Nauka   wykorzystania   pętli   FOR   i   WHILE   w   budowie   przyrządu   wirtualnego   oraz 

poszerzenie wiadomości z programowania w środowisku LabView. 

Wprowadzenie

Konstrukcję pętli FOR stosuje się w celu cyklicznego wykonania wybranego bloku kodu, gdy 

liczba wymaganych powtórzeń (iteracji) wykonania jest znana w danym miejscu programu. 

W środowisku LabVIEW pętla FOR ma postać ramki obejmującej poddiagram stanowiący 

blok kodu programu, który ma być wykonany określoną ilość razy.

Pętla   FOR   Loop   po   wstawieniu   do   programu   wymaga   zadeklarowania   liczby   iteracji   na 

wejściu ikony  N.  Program objęty pętlą z liczbą iteracji  N  zostanie wykonany N-krotnie, a 

numery   kolejno   wykonywanych   operacji,   poczynając   od   0,   a   kończąc   na   N-1,   będą 

udostępniane w każdej iteracji na wyjściu ikony i.

Konstrukcję pętli  while  stosuje się w celu cyklicznego wykonania wybranego bloku kodu, 

gdy liczba wymaganych powtórzeń (iteracji) wykonania nie jest znana. Pętla while ma postać 

ramki   obejmującej   diagram   stanowiący   blok   kodu   programu,   którego   wykonanie   jest 

powtarzane   aż   do   momentu   przerwania   działania   pętli.   Ramka   pętli   while   posiada 

predefiniowany   terminal   wyjścia   licznika   iteracji   oraz   terminal   warunku   kontynuowania 

działania pętli. Licznik iteracji, zerowany w momencie rozpoczęcia działania pętli, dostarcza 

aktualny   numer   wykonywanej   iteracji   (od   0)   i   jest   inkrementowany   po   każdej   iteracji. 

16

background image

Terminal   kontynuacji   działania   pętli   korzysta   z   wartości   logicznych   (boolowskich) 

wypracowanych przez diagram pętli. Konfigurowanie terminala kontynuacji pozwala ustalić 

wartość   logiczną   przerywającą   działanie   pętli   (Continue   IF   True   lub   Stop   If   True). 

Sprawdzenie warunku zakończenia jest realizowane po wykonaniu każdej iteracji, dlatego 

zawsze jest wykonana przynajmniej jedna iteracja pętli. Działanie pętli jest podobne jak pętli 

do...while języka C.

W programach VI zaleca się zatrzymywanie programu za pomocą wyłącznika umieszczonego 

na panelu sterowania. Program zatrzymany przyciskiem Abort Execution (na pasku) zostaje 

przerwany natychmiast, co może okazać się niebezpieczne dla urządzenia kontrolowanego 

przez ten program. Zatrzymanie programu za pomocą wyłącznika przeznaczonego do tego 

celu zapewnia wykonanie programu do końca i jego zatrzymanie w sposób bezpieczny dla 

urządzenia zewnętrznego. Można to osiągnąć właśnie przy pomocy pętli WHILE Loop. 

Najprostszym sposobem umieszczenia wyłącznika sterującego pracą pętli jest kliknięcie 

prawym przyciskiem myszy na terminal kontynuacji i z menu podręcznego wybrać Create 

Control. Pętle dostępne są w palecie Functions>>Structures.

Tunele wejściowe i wyjściowe konstrukcji pętlowych, auto-indeksacja

Konstrukcje pętli  for  i while mogą  posiadać  wejścia  i  wyjścia  danych.  Tunel  wejściowy 

danych tworzy się automatycznie w momencie prowadzenia połączenia pomiędzy wyjściem 

węzła znajdującego się na zewnątrz pętli a wejściem węzła poddiagramu pętli. Podobnie tunel 

wyjścia danych powstaje podczas łączenia wyjścia węzła poddiagramu pętli z wejściem węzła 

znajdującego się poza konstrukcją pętli.

17

background image

Pętla FOR i WHILE z tunelami wejściowymi

Pętla rozpoczyna działanie po otrzymaniu wszystkich danych wejściowych. W tym momencie 

są one też przekazywane do pętli i ich wartości są takie same we wszystkich iteracjach pętli. 

Jeśli zatem do tunelu wejściowego pętli jest dołączony terminal obiektu nastawczego to pętla 

dysponuje   jego   stanem   uzyskanym   w   momencie   rozpoczęcia   swojego   działania.   Zatem 

zmiany stanu tego obiektu nastawczego w czasie działania pętli nie są w niej zauważane. Jeśli 

pętla   ma   reagować   na   aktualny   stan   obiektu   nastawczego,   to   jego   terminal   musi   być 

umieszczony   wewnątrz   pętli.   Wtedy   każda   iteracja   pętli   dysponuje   aktualnym   stanem 

nastawnika. 

W przypadku tuneli wejściowych przekazujących tablice można ustalić charakter wejścia tak, 

aby   pętla   uzyskała   całą   tablicę   (Disable   Indexing)   lub   określone   elementy   tablicy   dla 

kolejnych iteracji (Enable Indexing). Auto-indeksowanie wejściowe rozpoczyna się od zera i 

polega na przekazaniu kolejnym iteracjom pętli danych o rozmiarze zmniejszonym o 1 z N 

wymiarowej tablicy wejściowej (rozkładanie tablicy). W przypadku tablicy N wymiarowej 

iteracje dostają kolejne podtablice o rozmiarze N-1. Iteracja i otrzymuje i-ty skalarny element 

z jednowymiarowej tablicy, i-tą jednowymiarową tablicę z dwuwymiarowej tablicy, itd.

Rozbiór tablicy na elementarne składniki za pomocą wejść z auto-indeksacją

Wejście z auto-indeksowaniem wpływa na liczbę iteracji pętli for, która jest wtedy określona 

przez wartość z wejścia liczby iteracji lub rozmiaru tablicy wejściowej. Obowiązuje mniejsza 

z tych wartości. Wejście liczby iteracji może pozostać niepołączone, jeśli pętla korzysta z 

18

background image

auto-indeksowanego wejścia. W przypadku kilku wejść z auto-indeksowaniem liczba iteracji 

jest określona rozmiarem najmniejszej tablicy. Stąd jeśli dwie tablice 20- i 50-elementowa 

poprzez   wejścia   z   auto-indeksacją   inicjują   działanie   pętli   for   z   zadeklarowaną   liczbą   25 

iteracji,   to   pętla   realizuje   20   iteracji   wykorzystując   w   nich   wszystkie   elementy   tablicy 

pierwszej oraz 20 pierwszych elementów tablicy drugiej.

Auto-indeksowanie dotyczy także tuneli wejściowych pętli while. Obowiązują te same zasady 

z wyjątkiem ograniczenia liczby iteracji. Rozmiar tablicy nie ma wpływu na liczbę iteracji 

pętli while, ponieważ są one realizowane dopóki terminal przerwania otrzymuje określoną 

wartość   boolowską.   Kiedy   liczba   iteracji   przekroczy   rozmiar   tablicy,   wejście   dostarcza 

wartości domyślne tego samego typu jak dostarczane dotąd. W przypadku jednowymiarowej 

tablicy double są to zerowe wartości numeryczne.

Wyjścia pętli z i bez auto-indeksacji

Dane wyjściowe są generowane po zakończeniu działania pętli. Tunel wyjściowy pętli for i 

while   może   pracować   z   auto-indeksacją   lub   bez   niej,   niezależnie   od   rodzaju   danych 

doprowadzonych   z   wnętrza   pętli.   Jeśli   pracuje   bez   auto-indeksacji   dostarcza   wartość 

wyprowadzoną   na   wyjście   podczas   ostatniej   iteracji   wykonanej   przez   pętlę.   Tryb   auto-

indeksacji tworzy na wyjściu tablicę z danych dostarczanych na wyjście po każdej iteracji 

pętli. Tablica wyjściowa dostępna po zakończeniu działania pętli ma rozmiar równy liczbie 

wykonanych iteracji. Jej wymiar zależy od wymiaru danych produkowanych w iteracjach. W 

przypadku produkcji danych skalarnych powstają tablice jednowymiarowe. Jednowymiarowe 

tablice są gromadzone w dwuwymiarowej, itd. 

Pętle for są wydajniejsze od pętli while w obsłudze operacji tablicowych. Wynika to stąd, że 

liczba   iteracji   pętli   for   jest   znana   w   momencie   rozpoczęcia   jej   działania   i   można 

zarezerwować odpowiednie obszary pamięci dla tworzonych tablic. W przypadku pętli while 

w każdej iteracji trzeba rozszerzyć rozmiary tworzonych tablic czyli musi być wykonana 

realokacja pamięci oraz przeniesienie dotychczasowych danych do nowego obszaru. Skutkuje 

to   mniejszą   wydajnością   operacji   tablicowych.   Mimo   tego   mankamentu   pętle   while   są 

19

background image

niezbędne do realizacji algorytmów, w których nie można z góry określić liczby wymaganych 

iteracji.

Pętle for są domyślnie przystosowane do tworzenia tablic. Kreowany tunel wyjściowy pętli 

for   jest   domyślnie   ustawiany   w   trybie   auto-indeksacji   niezależnie   od   rodzaju 

wyprowadzanych   danych.   Również   tunele   wejściowe   przekazujące   tablice   uzyskują 

domyślnie tryb auto-indeksacji. Tunele wejściowe i wyjściowe pętli while domyślnie pracują 

bez auto-indeksacji. 

Operator rejestru przesuwnego konstrukcji pętlowych (shift registers).

Operator rejestru przesuwnego służy do przenoszenia danych pomiędzy kolejnymi iteracjami 

pętli   FOR   i   WHILE.   Składa   się   z   dwóch   terminali   umiejscowionych   na   przeciwległych 

stronach   ramki   konstrukcji   pętli.   Terminal   ze   strzałką   skierowaną   w   górę   jest   wejściem 

rejestru. Do niego realizuje się połączenie z wyjściem wybranego węzła poddiagramu pętli, 

który dostarcza danej przekazywanej do następnej iteracji. Wyjściem rejestru jest terminal ze 

strzałką skierowaną w dół. Dostarcza on danej z poprzedniej iteracji lub wartość początkową 

w pierwszej iteracji.

Rejestr można inicjalizować daną z węzła lub terminala znajdującego się na zewnątrz pętli 

dołączonego   do   terminala   ze   strzałką   skierowaną   w   dół.   Jeśli   rejestr   nie   jest   jawnie 

inicjalizowany   przyjmuje   domyślne   wartości   początkowe   danego   typu   (0   dla   typów 

numerycznych) lub korzysta z danych uzyskanych podczas wcześniejszego działania pętli, 

jeśli program wykonuje pętlę wielokrotnie. Rejestr przesuwny można stosować do dowolnego 

typu danych, ale utworzony rejestr dotyczy jednego typu danych.

Rejestr tworzy się wybierając z menu dostępnego pętli pozycję Add Shift Register. Można 

utworzyć wieloelementowy rejestr przesuwny wybierając z menu terminala rejestru pozycję 

Add Element. Każde dodanie elementu tworzy dodatkowy terminal ze strzałką skierowaną w 

dół.   Terminale   te   są   sklejone   ze   sobą.   Utworzenie   wieloelementowego   rejestru   pozwala 

korzystać z kilku danych pochodzących z kolejnych poprzedzających iteracji. Pętla może 

korzystać z wielu rejestrów przesuwnych.

Typowym zastosowaniem pętli FOR jest sytuacja, w której chcemy odczytywać określoną 

ilość razy z przyrządu pomiarowego wartości jakiejś wielkości w zadanych odstępach czasu.

Testowanie przyrządu wirtualnego

Śledzenie przebiegu programu jest możliwe po kliknięciu żarówki – w czasie wykonywania 

programu   na   wyjściach   z   węzłów   pojawią   się   wartości   danych,   a   kropki   biegnące   po 

20

background image

przewodach   pokażą   przepływ   danych.   Podgląd   pojedynczych   wartości   jest   możliwy   przy 

pomocy narzędzia Probe wybranego z palety Tools. Po wybraniu wskaźnika i kliknięciu na 

dany   przewód   pojawi   się   próbnik,   w którym   wyświetlane   będą   wartości   przechodzących 

przez przewód danych.

W LabView istnieje też możliwość ustawiania przerwń – breakpoint. Należy kliknąć prawym 

przyciskiem myszy na dany przewód i wybrać Set Breakpoint lub też z palety narzędzi Tools 

wybrać  Set/Clear   Breakpoint.   W   obu   przypadkach   na   przewodzie   pojawi   się   czerwona 

kropka. Gdy do tego punktu dotrą dane, program zatrzyma się, przewód i najbliższy węzeł 

będą mrugać oczekując na kolejny krok – wejdź do, przeskocz, wyjdź:

Widok paska służącego do śledzenia przebiegu programu 

Zadania do wykonania:

UWAGA  Należy   prześledzić   działanie   wszystkich   programów   przy   pomocy 

omówionych narzędzi.

I. Zastosowanie pętli WHILE i wykresu typu Waveform Chart do zbudowania programu 

demonstrującego zastosowanie opóźnień. 

Front Panel

1. Otworzyć nowy projekt VI

2. Zbudować panel wg następującego rysunku

3. Wybrać  horizontal  pointer  slide  znajdujący się  w  palecie  Controls»Numeric 

Controls. Wpisać opóźnienie na jego etykiecie. Zmienić górną wartość na 1000

4. Wstawić przycisk Stop z palety Controls»Buttons

5. Wstawić wykres Waveform Chart z palety Controls»Graph Indicators

21

background image

6. Zmienić etykietę osi Y na Temperatura [st. Celsjusza], a osi X na Czas [s], zmienić 

nazwę legendy na Temperatura

7. Na osi Y zmienić dolną wartość -10 na 0, a wartość górną 1 na 100

Block Diagram

8. Otoczyć   znajdujące   się   na   diagramie   elementy   pętlą  WHILE  z   palety 

Functions»Structures

9. Wstawić   generator   liczb   losowych  Random   Number   (0-1)  z   palety 

Functions»Numeric. Połączyć go z wykresem jak pokazano na rysunku.

10. Wstawić opóźnienie czasowe  Wait (ms)  z palety  Functions»Timing.  Połączyć 

horizontal pointer slide tak jak pokazano na rysunku.

11. Przejść do panelu frontowego i uruchomić program. Zmieniać wartość opóźnienia 

i obserwować działanie programu.

12. Zakończyć działanie programu. Utworzony program zapisać pod nazwą Zad2.vi w 

katalogu Cwiczenie2.

II. Zastosowanie pętli FOR do utworzenia macierzy

Block Diagram

1. Otworzyć nowy projekt VI

2. Wstawić dwie pętle FOR (jedna wewnątrz drugiej) Functions»Structures»For 

Loop

22

background image

 

13. Kliknąć prawym przyciskiem myszy na terminal wejściowy N zewnętrznej pętli 

FOR   i   wybrać

 Create   Control,   zmienić   nazwę   na   Kolumny.

To samo zrobić z pętlą wewnętrzną - nazwę kontrolki zmienić na Wiersze 

14. Wstawić   generator   liczb   losowych  Random   Number   (0-1)  z   palety 

Functions»Numeric. Połączenia poprowadzić tak, jak pokazano na rysunku.

15. Kliknąć prawym przyciskiem myszy na teminalu wyjściowym zewnętrznej pętli 

FOR i wybrać Create Indicator

Front Panel

16. Przejść   do   panelu   frontowego,   ustawić   ilość   generowanych   wierszy   i   kolumn 

i uruchomić program

17. Po wykonaniu programu przejrzeć wygenerowane wartości

18. Następnie z Controls»Array,Matrix & Cluster wstawić Real Matrix

19. Kliknąć prawym przyciskiem myszy na elemencie i wybrać Change To Indicator

20. Przejść do diagramu i podłączyć element na wyjście pętli FOR

21. Uruchomić program i sprawdzić jego działanie

22. Zapisać program  na dysku pod nazwą Zad2.vi w katalogu Cwiczenie2.

III. Program liczący średnią arytmetyczną z liczb generowanych losowo. Wykorzystanie 

elementów Shift Register.

23

background image

1. Utworzyć program wg następującego schematu: 

2. Na diagramie umieścić pętlę FOR, na terminalu wejściowym N utworzyć stałą 

przy pomocy polecenia Create Constant, umieścić w niej wartość 10

3. Wewnątrz pętli wstawić odpowiednie operatory dodawania, dzielenia 

i inkrementacji dostępne z palety funkcji Numeric

4. Wstawić generator liczb losowych  Random Number (0-1). Połączyć zgodnie 

z rysunkiem.

5. Kliknąć prawym przyciskiem myszy na prawej krawędzi pętli FOR i z menu 

podręcznego wybrać polecenie Add Shift Register

6. Połączyć elementy jak na rysunku, na wejściu elementu Shift Register z lewej 

strony pętli utworzyć stałą za pomocą polecenia Create Constant

7. Na wyjściu ikony symbolizującej dzielenie utworzyć wskaźnik poleceniem 

Create Indicator 

8. Zapisać program pod nazwą Zad3.vi w katalogu Cwiczenie2

9. Uruchomić program i sprawdzić działanie. W programie generowane są 

losowe liczby z zakresu 0 do 1 i liczona jest średnia arytmetyczna 

wylosowanych liczb. W związku z tym, aby przekonać się o poprawności 

zbudowanego programu należy ustawić dużą wartość licznika pętli, gdyż dla 

dużego N średnia arytmetyczna powinna zmierzać do wartości 0,5. Sprawdzić 

działanie programu dla różnych wartości N

IV. Ilustracja działania elementów Shift Register i sposobu testowania poprawności 

działania programu

1. Zbudować program według następującego schematu

24

background image

                 

2. Dodatkowe elementy Shift Register uzyskuje się ‘rozciągając’ 

pojedynczy element przy pomocy myszy

3. Po wykonaniu połączeń jak na rysunku należy zmienić format liczb z 

typu Double (rzeczywiste) na Long (całkowite). W tym celu należy 

klikać na daną stałą prawym przyciskiem myszy i z menu podręcznego 

wybrać Representation  a następnie Long (I32)

4. Zapisać program pod nazwą Zad4.vi 

5. Ustawić okna diagramu i panelu obok siebie, wcisnąć żółtą żarówkę 

znajdującą się na pasku diagramu i uruchomić program

6. Prześledzić działanie programu

25

background image

ĆWICZENIE 3:

Podstawy projektowania przyrządów 

wirtualnych III

Cel ćwiczenia:

Nauka korzystania z systemu Express VI, poznanie konstrukcji Formula Node oraz 

zastosowanie funkcji i procedur do budowy przyrządu wirtualnego. 

Wprowadzenie

System Express VI

System   Express   VI   wprowadzony   w   LabView   od   wersji   7   umożliwia   bardzo   szybkie 

i wygodne projektowanie z użyciem gotowych funkcji, które wystarczy tylko zmodyfikować 

dla własnych potrzeb.

Pliki Express VI upraszczają konfigurację funkcji poprzez interaktywne okna dialogowe dla 

każdego pliku VI. Jeśli przeniesiemy Express VI do naszego schematu otwiera się okno, 

w którym możemy wybrać parametry i ustawienia dla funkcji i natychmiast zobaczyć wynik 

jej   działania.   LabVIEW   pobiera   wybrane   ustawienia   i   automatycznie   tworzy   kod,   który 

normalnie byłby stworzony przez użytkownika przy tworzeniu ze standardowych plików VI. 

Niektóre pliki Express VI pozwalają na dostęp do urządzeń we/wy - I/O Assisntant (asystenta 

konfiguracji), rozszerzając interaktywną konfigurację o akwizycję danych (DAQ Assistant) 

lub kontrolę urządzeń (Instrument I/O Assistant). standardowych plików VI.

26

background image

Przykładem   posłużenia   się   systemem   Express   VI   może   być   utworzenie   wirtualnego 

generatora sygnału.

Konstrukcje Formula Node i Expression Node

Konstrukcję   formuły   używa   się   do   utworzenia   węzła   diagramu   realizującego   operacje 

zdefiniowane w ramce konstrukcji i zapisane w formie tekstowej, np.:

y = 3 * x - 2 + x * log(x)

Konstukcja  Formula  Node  dostępna   z   palety  Functions>>Structures  jest   użyteczna   do 

realizacji   operacji,   które   korzystają   z   wielu   zmiennych   oraz   produkują   jeden   lub   więcej 

rodzajów danych wyjściowych. Syntaktyka zapisu bloku programu w konstrukcji  Formula 

jest podobna do zapisu bloku instrukcji programu w języku C. Blok może zawierać deklaracje 

zmiennych (dostępny tylko typ float oraz int) oraz wyrażenia. Można korzystać z instrukcji 

sterujących if...else, switch..case, pętli for, while, do..while itp. Wyrażenia wykorzystują takie 

same operatory jak język C (te same oznaczenia i priorytety). Wyjątkiem jest dodatkowy 

operator podnoszenia do potęgi ( wyrażenie x**y oznacza x do potęgi y ). Można stosować 

komentarze. Menu konstrukcji formuły posiada pozycje służące do kreowania wejść i wyjść 

węzła   (odpowiednio  Add   Input  oraz  Add   Output).   Po   wykreowaniu   należy   w   polu 

utworzonego   wejścia   lub   wyjścia   wpisać   jego   nazwę.   Stanowią   one   zmienne   formuły, 

domyślnie są typu float. Nazwy muszą być unikalne w ramach danej konstrukcji, ale nazwa 

27

background image

wyjścia może być taka sama jak jednego z wejść. Formula Node  jest również dostępna w 

wersji ekspresowej, która jednak nie posiada możliwości korzystania z instrukcji języka C.

Trzy sposoby na obliczenie wartości jednej funkcji: konstrukcje Formula Node 

klasyczna i ekspresowa oraz Expression Node zawarte w pętli While

Konstrukcja  Expression  Node  dostępna   służy   do   obliczenia   pojedynczego   wyrażenia 

korzystającego   z   jednej   zmiennej   wejściowej.   Węzeł   posiada   predefiniowane   wejście   i 

wyjście   typu   float.   Nazwa   zmiennej   użyta   w   wyrażeniu   jest   automatycznie   kojarzona   z 

wejściem węzła. Wyjściu jest przypisywany wynik wyrażenia.

28

background image

Zadania do wykonania:

I. Utworzenie wirtualnego generatora sygnału

1. Z palety funkcji (Functions) wybrać Express, następnie Input i ikonę Simulate 

Signal

2. Zmienić   typ  sygnału  na   sinusoidę   –  sine.  Pozostałe   wartości   zostawić   bez 

zmian

3. Na wyjściu ikony utworzyć wykres (Graph Idicator). 

4. Uruchomić program w pętli nieskończonej i prześledzić jego działanie

5. Kliknąć dwukrotnie na ikonę Simulate Signal 

6. Po pojawieniu się okna dialogowego zmienić typ sygnału na trójkąt – triangle

Ustawić   częstotliwość   na   1   Hz.   Zaznaczyć   opcję  Simulate   accquisition 

timing, pozostałe wartości pozostawić bez zmian

7. Uruchomić program w pętli nieskończonej i prześledzić jego działanie

Ikona reprezentująca plik Express VI - Simulate Signal oraz interaktywne okno 

dialogowe

 

29

background image

8. Na wejściowych terminalach ikony  Simulate Signal  utworzyć kontrolki dla 

amplitudy sygnału oraz częstotliwości

9. Uruchomić program w pętli nieskończonej i prześledzić jego działanie

10. Zapisać program pod nazwą Zad1.vi w katalogu roboczym Cwiczenie3

II. Skalowanie sygnału 

1. Otworzyć poprzednio utworzony projekt i zapisać go pod nazwą Zad2.vi w 

katalogu roboczym

2. Przejść do diagramu 

3. Z palety funkcji  Functions>>Express>>Exec Control  wybrać pętlę  While 

Loop, kliknąć na diagramie i otoczyć elementy znajdujące się na diagramie

4. W celu wyskalowania wykresu wstawić ikonę Scaling and Mapping dostępną 

z   palety   funkcji  Express>>Arith   &   Compar.  Zaznaczyć   opcję  Linear  

ustawić parametr Slope na 0,1

5. Na wyjściu ikony utworzyć wykres przy pomocy polecenia Create Graph 

Indicator

6. Uruchomić   program   przy   pomocy   przycisku   jednokrotnego   uruchamiania 

i prześledzić działanie programu dla różnych typów sygnału (piła, sinusoida, 

prostokąt, trójkąt)

III. Wyświetlanie dwóch przebiegów na jednym wykresie

1. Otworzyć   poprzednio   utworzony   projekt   i   zapisać   go   pod   nazwą   Zad3.vi 

w katalogu roboczym

30

background image

2. Na   diagramie   wstawić   element  Merge   Signals  z   palety   funkcji 

Express>>Signal   Manipulation.  Dokonać   połączenia   jak   pokazano   na 

rysunku. Na wyjściu Merge Signals utworzyć wykres

3. Aby   przebiegi   wyskalowany   i   oryginalny   były   różnych   kolorów   należy 

zmienić właściwości wykresu  Properties  dostępne po kliknięciu na wykres 

(lub   odpowiadającą   mu   ikonę   na   diagramie)   prawym   przyciskiem   myszy. 

Należy wybrać zakładkę Plots z rozwijalnego menu wybrać dany wykres np. 

sine   (scaled)   i   wybrać   kolor   linii  Line.  Wybranie   jest   możliwe   po 

wcześniejszym jednokrotnym uruchomieniu programu. 

4. Aby   na   panelu   frontowym   była   widoczna   legenda   dla   przebiegu 

wyskalowanego   należy   zmienić   wysokość   (rozszerzyć   granicę)   legendy 

znajdującej się nad wykresem

5. Uruchomić program i sprawdzić jego działanie

6. Zapisać zmiany i zamknąć projekt

31

background image

IV. Prosta analiza przebiegów

To   zadanie   polega   na   zbudowaniu   programu,   który   będzie   generował   sygnał   i   na 

wskaźniku będzie sygnalizował przekroczenie pewnej ustalonej wartości. 

1. Zamknąć wszystkie projekty i pozostawić ekran startowy środowiska LabView

2. Wybrać

 New>>VI   From   Template>>Tutorial   (Getting 

Started)>>Generate, Analyze, and Display. Ten projekt symuluje a analizuje 

sygnał pod kątem średniej wartości skutecznej (RMS). Kliknąć OK.

3. Zapisać program pod nazwą Zad4.vi w katalogu roboczym

4. Wyświetlić   diagram.  Skonfigurować  Simulate   Signal  zgodnie   z  rysunkiem 

poniżej   –   generowany   będzie   sygnał   stały   z   nałożonym   na   niego   szumem 

białym. Po zaakceptowaniu zmian przejść do panelu.

Widok okna dialogowego ikony ekspresowej Simulate Signal

5. Usunąć liczbowy wskaźnik wartości RMS. Usunąć niepołączone linie (broken 

lines)   przy   pomocy   skrótu   klawiszowego   Ctrl+B.   Wstawić   wskaźnik 

Boolean>>Round LED. Ponownie przejść do diagramu

6. Kliknąć   dwukrotnie   na   ikonę   ekspresową  Amplitude   and   Level 

Measurements.   Usunąć   zaznaczenie   RMS   w   sekcji  Amplitude 

Measurements,   zaznaczyć   opcję   Peak   To   Peak   (wartość   szczytowa). 

Zachować zmiany.

32

background image

7. Z palety funkcji  Express>>Arith & Compar>>Comparison  wybrać ikonę 

ekspresową  Comparison.  W   sekcji  Compare   Condition  wybrać   opcję 

Greater  (większe).   W   sekcji  Comparison   Inputs  wybrać  Use   Constant 

Value i wpisać 0,195. 

8. Podłączyć   wyjścia   zgodnie   ze   schematem   poniżej,   na   wyjściu   ikony 

Amplitude   and   Level   Measurements  utworzyć   wskaźnik   numeryczny. 

Wskaźnik LED podłączyć na wyjście ikony Greater.

9. Przejść do panelu i uporządkować elementy.

10. Uruchomić program i sprawdzić poprawność działania  

11. Zapisać zmiany wprowadzone w programie

V. Zapisywanie danych do pliku

1. Zachować wcześniej utworzony program pod nazwą Zad5.vi

2. Przejść do diagramu i z palety funkcji File I/O wybrać Write Meas File

3. Po ukazaniu się okn dialogowego wybrać odpowiednią ścieżkę dostępu do 

pliku i nazwę, tak aby plik został zapisany w katalogu roboczym Cwiczenie3

4. Następnie zaznaczyć opcje:

If a file already exists – Append to file (dopisywanie do pliku w przypadku gdy 

istnieje)

Segment Headers – One header only (jeden nagłówek)

Pozostałe ustawienia pozostawić bez zmian.

5. Zamknąć okno dialogowe i powrócić do diagramu

6. Do wejścia nowo utworzonej ikony podłączyć sygnał z ikony Simulate Signal

7. Zapisać zmiany, uruchomić program i sprawdzić jego działanie

33

background image

8. Obejrzeć   w   notatniku   wygenerowany   plik.   Pozmieniać   ustawienia   w   oknie 

dialogowym ikony  Write Meas File  i sprawdzić ich działanie uruchamiając 

ponownie program

VI. Zapisywanie danych do pliku na wciśnięcie przycisku

Jeśli chcemy aby dane zapisywane były tylko w momencie naciśnięcia przycisku 

napisany wcześniej program należy zmodyfikować:

1. Zapisać poprzednio utworzony program pod nazwą Zad6.vi

2. Kliknąć prawym przyciskiem myszy na wejściu Signal ikony Write Meas File 

i wybrać  Insert Input/Output. Po ukazaniu się wejścia  Comment  kliknąć 

prawym przyciskiem myszy i wybrać Select Input/Output>>Enable.

3. Utworzyć kontrolkę na wejściu uzyskanego terminala przy pomocy polecenia 

Create>>Control. Diagram powinien wyglądać jak na poniższym rysunku

4. Należy zmienić ustawienia Properties przycisku Enable tak aby zapisywać do 

pliku   tylko   wybrane   dane.   Na   karcie  Operation  należy   wybrać  Latched 

When Pressed  –  działanie każdego z ustawień można prześledzić w oknie 

dialogowym 

5. Zapisać zmiany w programie i sprawdzić jego działanie. W odróżnieniu od 

poprzedniego dane zapisywane są do pliku tylko wtedy gdy naciśnięty jest 

przycisk Enable.

34

background image

ĆWICZENIE 4:

Podstawy projektowania przyrządów 

wirtualnych IV

Cel ćwiczenia:

Celem ćwiczenia jest zapoznanie się z pojęciami i sposobem tworzenia zmiennych lokalnych 

i globalnych, przepływem danych w środowisku LabView, strukturą hierarchiczną programu.

Zapoznanie   się   z   jednym   ze   sposobów   budowania   systemu   pomiarowego   –   maszyny 

o skończonej liczbie stanów. 

Wprowadzenie

Zmienne globalne i lokalne.

W   czasie   tworzenia   programu   zachodzi   niekiedy   potrzeba   przyjmowania   danych 

pochodzących z rożnych miejsc programu przez jedną i tę samą kontrolkę, co jest niemożliwe 

do   zrealizowania   za   pomocą   zwykłych   połączeń.   Dodatkową   trudność   w   przekazywaniu 

danych mogą stanowić umieszczone w programie struktury ograniczające dostęp z zewnątrz 

do obiektów zanjdujących się w ich obrębie. Podobna sytuacja może zaistnieć, kiedy trzeba 

przesłać   dane   między   niezależnymi   programami   działającymi   równolegle.   Realizacja 

wymienionych   zadań   jest   możliwa   za   pomocą   zmiennych   lokalnych   w   obrębie   jednego 

programu   i   za   pomocą   zmiennych   globalnych   w   przypadku   programów   działających 

niezależnie.

Zmienne   lokalne   można   tworzyć   przy   pomocy   polecenia  Create>>Local   Variable 

dostępnego w podręcznym menu wskazanego kursorem myszki obiektu, albo wybierając z 

palety Functions>>Structures elementu Local Variable (wyłącznie w oknie diagramu).

35

background image

Na   rysunku   przedstawiono   program,   który   wykonuje   jednocześnie   dwie   pętle   WHILE   – 

w jednej zmienia wartość licznika co 1000 ms (1 sekunda) w drugim co 2000 ms (2 sekundy).

Dzięki   zastosowaniu   zmiennej   lokalnej   istnieje   możliwość   równoczesnego   zatrzymania 

obydwu pętli, przy pomocy jednego przycisku.

Za   pomocą   zmiennych   globalnych   można   przekazać   informację   do   innych   działających 

równolegle   programów   lub   ją   przyjąć   od   programów   działających   niezależnie.

Wstawianie zmiennej globalnej do programu jest możliwe wyłącznie w oknie diagramu przez 

wybranie z palety Functions>>Structures elementu Global Variable.   

Zmienne   globalne   wymagają   utworzenia   programu   pośredniczącego   w   przekazywaniu 

informacji. Program pośredniczący skojarzony ze zmienną globalną można utworzyć, po jej 

wstawieniu do programu głównego. Następnie po kliknięciu prawym przyciskiem myszy na 

zmiennej globalnej należy wybrać polecenie Open Front Panel. Po otwarciu należy w nim 

umieścić   obiekty,   które   będą   pośredniczyć   w   przekazywaniu   danych   między   innymi 

programami co oznacza, że muszą to być obiekty zdolne przyjąć lub wysłać dane określonego 

typu.   W   programach,   które   będą   wykorzystywać   zmienne   globalne   należy   umieścić   VI, 

w którym umieszczono zmienną globalną (menu kontekstowe Select a VI...).

36

background image

 

    

 

Trzy programy VI ze zmienną globalną – a) panel zmiennej globalnej b) program 

ustawiający wartość zmiennej globalnej c) program wyświetlający wartość zmiennej 

globalnej

Można powiedzieć, że zmienna globalna w środowisku LabView jest w rzeczywistości 

zbiorem zmiennych globalnych a to jaką z nich udostępniamy zależy od wybrania z menu 

kontekstowego (dostępnego po kliknięciu prawym przyciskiem myszy) Select Item. 

37

background image

Tak jak w innych językach programowania używanie zmiennych globalnych powinno być 

ograniczone do minimum, gdyż łatwo można stracić kontrolę nad danymi.

Programowanie przepływu danych, sekwencja wykonywania operacji.

Konstrukcja sekwencji operacji.

Konstrukcja sekwencyjna wygląda jak ramka filmu i składa się z jednej lub kilku ramek 

(klatek filmu). Wykonuje ona kolejno kody programu umieszczone w ramkach 0, 1, 2, 3 itd. 

Konstrukcje   sekwencyjne   stosuje   się   do   wymuszenia   określonej   kolejności   wykonywania 

fragmentów   kodu,   gdy   nie   daje   się   tego   uzyskać   przepływem   danych.   Diagramy   kodu 

umieszczone w  ramkach konstrukcji są realizowane kolejno, zgodnie z numerami ramek. 

Sekwencję można rozbudowywać do dowolnej liczby ramek. 

LabView   rozróżnia   dwa   rodzaje   konstrukcji   sekwencyjnych   płaską  Flat  składającą   się 

z umieszczonych   obok   siebie   ramek   i   piętrową  Stacked  z   ponumerowanymi   ramkami, 

działanie obu konstrukcji jest identyczne. W każdej chwili możliwa jest zmiana z konstrukcji 

płaskiej na piętrową i na odwrót przy pomocy polecenia Replace With … dostępnego z menu 

podręcznego.

Konstrukcja sekwencyjna – Stacked i Flat

Dodawanie   kolejnych   ramek   jest   możliwe   przy   pomocy   poleceń   dostępnych   z   menu 

podręcznego po kliknięciu prawym przyciskiem myszy na krawędzi struktury:

add frame after

add frame before

 insert frame

38

background image

Tunele wejść i wyjść konstrukcji tworzą się automatycznie podczas prowadzenia połączeń 

przez kontury konstrukcji. Dane wejściowe konstrukcji są dostępne dla wszystkich jej ramek. 

Wyjścia danych z konstrukcji mogą mieć tylko jedno źródło informacji, czyli każde z wyjść 

struktury jest związane z jedną z ramek, ale tunele wyjściowe są widoczne we wszystkich 

ramkach. Dane opuszczają strukturę w momencie, gdy ostatnia ramka zakończy wykonanie 

zawartego w niej kodu. Oznacza to, że dane wyjściowe określonej ramki opuszczają strukturę 

po jej całkowitym wykonaniu, a nie kiedy skończy się wykonanie danej ramki.

Przykład konstrukcji sekwencyjnej oraz kolejne jej ramki

Przekazywanie   danych   z   jednej   ramki   do   ramek   występujących   po   niej   realizuje   się   za 

pomocą   terminala   zwanego   lokalną   sekwencją.   Do   uzyskania   lokalnej   sekwencji, 

wykorzystuje   się   operację  Add   Sequence   Local  ze   specjalnego   menu,   uaktywnianego 

przyciśnięciem   prawego   klawisza   myszki.   Lokalna   sekwencja   jest   zaznaczona   końcówką 

przenoszenia danych we wszystkich ramkach sekwencji. W ramce będącej źródłem danych 

dla lokalnej sekwencji punkt przekazywania danych jest zaznaczony zewnętrznym zwrotem 

strzałki a w ramce odbiorczej strzałką zwróconą do jej wnętrza. Ramki poprzedzające ramkę 

będącą   źródłem   danych   nie   mogą   oczywiście   korzystać   z   danych   przenoszonych   lokalną 

sekwencją   i   w   nich   punkt   przenoszenia   nie   jest   zaznaczony   strzałką.   Konstrukcja 

sekwencyjna może wykorzystywać kilka lokalnych sekwencji przekazywania danych. 

Konstrukcja wyboru (case)

Konstrukcja sterująca  case  umożliwia alternatywne wykonywanie bloków kodu objętych tą 

konstrukcją.   Funkcjonalnie   odpowiada   instrukcji  if...then...else  lub  switch  języka   C. 

Konstrukcja   posiada   minimum   dwie   ramki.   Każda   ramka   zawiera   blok   programowy 

39

background image

realizujący   określone   operacje   oraz   deklarację   wartości   wybierających.   Wykonanie 

konstrukcji polega na wykonaniu kodu jednej z jej ramek. Wybór ramki jest realizowany na 

podstawie danej dostarczonej do wejścia selekcyjnego konstrukcji case.

Postać graficzna konstrukcji Case

Wejście selektora może przyjmować dane boolowskie (domyślny typ), całkowite, stringowe 

oraz   enumeryczne.   W   przypadku,   gdy   wejście   selektora   korzysta   z   danych   boolowskich 

konstrukcja posiada dwie ramki odpowiednio dla wartości FALSE i TRUE. Jeśli selektor 

korzysta z pozostałych typów danych struktura może mieć do 2^32-1 przypadków (ramek). 

Konstrukcja case z selektorem Int32 oraz przykładem deklaracji wartości 

wybierających

Dla każdej z możliwych wartości selektora musi być przypisana jedna z ramek konstrukcji 

case. Określenie wartości wybierających daną ramkę realizuje się przez wpisanie ich listy w 

okienku   wartości   wybierających.   W   konstrukcji  case  z   selektorem   boolowskim   ramkom 

przypisane są wartości True i False. W sytuacji wyboru przy użyciu danych całkowitych pole 

wartości wybierającej daną ramkę może mieć postać:

Pojedynczej wartości całkowitej, np. 12 - ramka jest wykonywana, gdy selektor 

konstrukcji otrzyma wartość 12.

40

background image

Listy wartości całkowitych, np. 2, 4, 6, 7 - ramka jest wykonywana, gdy selektor 

konstrukcji otrzyma jedną z wartości podanej w liście.

Listy wartości określonych zakresem, np. 5..25 - ramka jest wykonywana, gdy 

selektor konstrukcji otrzyma wartość z podanego zakresu.

Wartości domyślnej (Default) - ramka jest wykonywana, gdy selektor konstrukcji 

otrzyma wartość różną od wartości określonych dla innych ramek konstrukcji.

Konstrukcja   wyboru   musi   obsłużyć   wszystkie   możliwe   przypadki.   Zatem   przy   wyborze 

różnym od boolowskiego, kiedy liczba możliwych przypadków jest bardzo duża, jednej z 

ramek należy przypisać wszystkie wartości nieokreślone dla pozostałych ramek. Przykładowo 

w konstrukcji złożonej z czterech ramek wybieranych odpowiednio wartościami 1, 2, 3, 4 

należy jednej z nich np. pierwszej przypisać wartości wybierające 1, Default. Oznacza to, że 

ramka pierwsza będzie wykonywana, gdy selektor uzyska wartość całkowitą różną od 2, 3 lub 

4. Tunele wejść i wyjść konstrukcji tworzą się automatycznie podczas prowadzenia połączeń 

przez   kontury   konstrukcji.   Tunele   wejść   danych   tworzą   wejścia   dla   wszystkich   ramek 

konstrukcji, ale diagram danej ramki korzysta tylko z tych, które są potrzebne. Struktura 

realizuje swoje zadania po uzyskaniu danych na wszystkich wejściach. Wszystkie wejścia 

danych oraz wejście selektora muszą być dołączone do źródeł danych.

Konstrukcja Case może w niektórych przypadkach zastąpić konstrukcję sekwencyjną.

Maszyna   stanów  –  automat   stanów   definiowany   jest   jako   model   formalny   dyskretnego 

systemu lub procesu przebiegającego w dyskretnych chwilach czasu. Automat nazywamy 

skończonym, bo działa w oparciu o skończony zbiór stanów wewnętrznych automatu.

Automat   skończony   najlepiej   rozpatrywać   jako   czarna   skrzynka

Q   -   zbiór   stanów   wewnętrznych   automatu,   Z   –   zbiór   sygnałów   wejściowych,   Y   –   zbiór 

sygnałów wyjściowych.

Maszynę stanów łatwo zrealizować o konstrukcję sekwencyjną, bądź też konstrukcję Case. 

41

background image

Zadania do wykonania:

I. Utworzyć   program   z   wykorzystaniem   zmiennej   lokalnej   na   podstawie   opisu   i 

rysunków we wprowadzeniu. Przetestować działanie.

II. Utworzyć   program   z   wykorzystaniem   zmiennej   globalnej   na   podstawie   opisu 

i rysunków we wprowadzeniu. Przetestować działanie.

III. Utworzyć   program,   który   w   kolejnych   dwunastu   krokach   wykonywanych   co 

sekundę wypisuje w postaci łańcuchów nazwy miesiąca.

Diagram

1. Wstawić strukturę Case z Function>>Structures 

2. Wstawić pętlę FOR Loop z Function>>Structures obejmując strukturę Case

Ustawić wartość licznika pętli na 12.

3. Wstawić ikonę Add z  Function>>Numeric. Połączyć z wejściem struktury 

Case jak na rysunku. Struktura Case będzie od tej chwili przyjmować wartości 

numeryczne. Usunąć przypadek 0, default klikając prawym przyciskiem myszy 

na selektor struktury Case i wybierając z menu podręcznego Delete This Case

Następnie  jako  domyślną  wartość  ustawić  0  przy  pomocy  polecenia  Make 

This The Default Case. Dodać kolejne przypadki do struktury Case (1 do 12) 

przy pomocy polecenia Add Case After.

42

background image

4. Dla   każdego   z   przypadków   wstawić   stałą   łańcuchową   z   nazwą   miesiąca   i 

połączyć z terminalem wyjściowym. Na wyjściowym terminalu przy pomocy 

polecenia Create Indicator utworzyć wskaźnik pokazujący nazwę miesiąca.

5. Zapisać   program   pod   nazwą   Zad1.vi   w   katalogu   Cwiczenie4,   uruchomić 

i sprawdzić działanie programu.

IV. Inny sposób budowy maszyny stanów polega na wykorzystaniu gotowego wzorca.

1. Z   ekranu   startowego   LabView   wybrać  New>>VI   from   Template 

>>Frameworks>>Design Patterns>>Standard State Machine

2. Zapisać plik pod nazwą Zad2.vi. w katalogu Cwiczenie4

3. Kliknąć prawym przyciskiem myszy na stałą wyliczeniową i wybrać polecenie 

Open Type Def.

4. Na   panelu   frontowym  StateMachinesStates.ctl   kliknąć   prawym   przyciskiem 

myszy na stałą wyliczeniową i wybrać Edit Items…

5. Zmienić nazwę pierwszego stanu z Initialize na Inicjalizacja.

43

background image

6. Następnie przy pomocy przycisku Insert dodać stany o nazwach Stan1 i Stan2.

7. Zapisać zmiany.

8. Przejść do diagramu, kliknąć prawym przyciskiem myszy na stałe 

wyliczeniowe i wybrać polecenie Update From Type Def.

9. Dodać kolejne ramki struktury Case (Stan1, Stan2) klikając prawym 

przyciskiem myszy na selektor struktury Case i wybierając polecenie 

Duplicate Case.

10. Do pętli WHILE wstawić opóźnienie 2000 ms

11. Kliknąć prawym przyciskiem myszy na element Shif Register z lewej strony 

pętli i wybrać polecenie Create Indicator. Wskaźnikowi nadać nazwę Stan 

aktualny.

12. W ramce Inicjalizacja struktury Case wstawić One Button Dialog 

Functions>>Dialog & User Interface. Na wejściu funkcji utworzyć stałą 

łańcuchową z tekstem Rozpoczęcie testu

13. Przejść do kolejnej ramki Stan1 i zmienić wartość stałej wyliczeniowej na 

Stan2

14. Przejść do ramki Stan2 i wewnątrz niej utworzyć program jak na rysunku

15. Zapisać zmiany w projekcie, uruchomić i sprawdzić działanie programu.

44

background image

Źródła:

Getting Started with LabView - podręcznik National Instruments

User Manual - podręcznik National Instruments

Tłaczała Wiesław, Środowisko LabVIEW w eksperymencie wspomaganym 

komputerowo, Wydawnictwo Naukowo - Techniczne 

materiały dostępne w Internecie: 

www.ni.com

www.labview.pl

 i inne

 

 Opracował mgr Grzegorz Śmigielski

45

background image

SPIS TREŚCI

ĆWICZENIE 1:
PODSTAWY PROJEKTOWANIA PRZYRZĄDÓW WIRTUALNYCH I

  

                                                     

  .....................................................

  

2  

ĆWICZENIE 2:
PODSTAWY PROJEKTOWANIA PRZYRZĄDÓW WIRTUALNYCH II

  

                                                  

  ..................................................

  

16

  

ĆWICZENIE 3:
PODSTAWY PROJEKTOWANIA PRZYRZĄDÓW WIRTUALNYCH III

  

                                                

  ................................................

  

26

  

ĆWICZENIE 4:
PODSTAWY PROJEKTOWANIA PRZYRZĄDÓW WIRTUALNYCH IV

  

                                                

  ................................................

  

35

  

46


Document Outline