LV WSTEP

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ć

z 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 i

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

z 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


Wyszukiwarka

Podobne podstrony:
SI wstep
Zajęcie1 Wstęp
Wstęp do psychopatologii zaburzenia osobowosci materiały
układ naczyniowy wstep
ZMPST Wstep
Dekalog 0 wstęp
1 WSTEP kineza i fizykot (2)
01 AiPP Wstep
wstęp neg
Wyklad I Problemy etyczne Wstep
ochrona srodowiska wstep
Tajemnica ludzkiej psychiki wstep do psychologii
PS 1 Psychologia społeczna wstep

więcej podobnych podstron