26
LabView 7.1

LabView 7.1

  • Upload
    kelton

  • View
    94

  • Download
    12

Embed Size (px)

DESCRIPTION

LabView 7.1. LabView. Vývojový systém (full development package) Base package – bez knihovny Advanced Analysis, obsahuje knihovny GPIB, RS232, Data Acquisition, a Base Analysis Advanced analysis library – (rozšířené analyzační knihovny) - PowerPoint PPT Presentation

Citation preview

Page 1: LabView 7.1

LabView 7.1

Page 2: LabView 7.1

LabViewVývojový systém (full development package) • Base package – bez knihovny Advanced Analysis,

– obsahuje knihovny GPIB, RS232, Data Acquisition, a Base Analysis• Advanced analysis library – (rozšířené analyzační knihovny)

– statistika, lineární algebra, operace s poli, generování signálů, zpracování signálů, digitální filtry, okénkové funkce.

Lze jej dále doplnit opřekladač aplikací (application builder) SQL toolkit pro podporu databázi, PID regulátor, Control Toolbox, VXI knihovna apod.

Page 3: LabView 7.1

Program – virtuální nástroj (VI)• programové struktury

– sekvence (sequence)– přepínač (case)– cyklus FOR (for-loop)

• autoindexace vstupních a výstupních tunelů (možnost vypnutí)

– cyklus WHILE• pole (array), struktury (clucter)• události (events)• lokální, globální proměnné, konstanty• matematický výraz• polymorfizmus• property• subVi (vlastní, vnitřní) (soubory, I/O zařízení,

filtry, mat. operace,…)

• Aplikaci lze uchovat samostatně (*.vi soubor), nebo sdružovat více aplikací (*.llb soubor)

Page 4: LabView 7.1

Části virtuálního nástroje• Čelní panel (front panel)

– Ovládací a indikační prvky (controls)– ikona a konektor

• Blokové schéma (block diagram)– grafické vyjádření programu

(functions)

Page 5: LabView 7.1

Nástroje pro práci

ovladač

propojovač

Výběr změna pozice

pop-up menu

breakpoint barva

sonda

výběr barvy dle objektu

scrooling

popisovač

výběr - triple click

výběr - single click

spojovač - space bar

spojovač

výběr - double click

run stop

Opakované spuštění

pauza

krokování

Svítí-li žárovička:Labview při vykonávání zobrazuje svoji činnost v

blokovém schématu

nastavení textu

Page 6: LabView 7.1

Ikona, konektor, komentáře• Front panel

– Ikona obrázek symbolizující VI nástroj

– Konektorinterface pro navázání VI nástroje s okolím

Page 7: LabView 7.1

Datové typy, signály.

Page 8: LabView 7.1

Pop-up menu, property• Umožňuje rychlé připojení prvků k

objektu.– create/(constatnt,control,indikator)

• Změna objektu na jiný.– replace/…

• Přístup k property vlastnostem.– create/property node

• Vyhledání prvku na panelu.• Vyhledání vlastních lokálních

proměných.• Změna datového typu a rozsahu

hodnot.– representation/typ– format&precision

• …

Page 9: LabView 7.1

Programové struktury• Sekvence (složena z rámců)

– Umělé vytvoření posloupnosti prováděná příkazů.

– Jednotlivé rámce sekvence se provádějí popořadě (0, 1, 2…).

– Zobrazen je vždy jen jede rámec.– Vstup do rámce tunelem (jeden vstup

může být napojen na více bloků různých rámců)

– Výstup z rámce tunelem (jeden blok jeden tunel)

• Přepínač (case)– Větvení programu, dle podmínky do

dvou či více větví– Terminál pro připojení testovací

podminky

Page 10: LabView 7.1

Programové struktury• For-loop cyklus

– Pro známý počet opakování– Automatická indexace

vstupního/výstupního kanálu [i] • Vypnuto – vstupem je pole v každém

kroku, výstupem je skalár po ukončení celého cyklu.

• Zapnuto – vstupem je prvek na indexu i, výstupem je pole výsledků jednotlivých průchodů.

– Rychlost provádění cyklu lze ovlivnit vložením bloku Wait Until Next ms Multiple.

– Pro zpřístupnění hodnot z mynulých průchodů slouží posuvné registry.

Page 11: LabView 7.1

Programové struktury• While-loop cyklus

– Opakování dáno testovanou podmínkou (true = opakuj)– Rychlost provádění cyklu lze ovlivnit vložením bloku Wait Until Next ms

Multiple.– Pro zpřístupnění hodnot z minulých průchodů slouží posuvné registry.

• Event structure– Provádění rámce při vybrané události.

Page 12: LabView 7.1

Provádění bloků operace• Asynchronní provádění

– bloku může být spuštěno simultánně spolu s dalšími bloky tj. střídavé provádění malých úseků kódu přidělováním kapacity CPU. LabVIEW obsahuje plánovač pro víceúlohoví běh, který přerušuje vykonávání kódu bloku, který má k dispozici všechna svá vstupní data, a přepíná na vykonávání kódu dalšího bloku, který má rovněž k dispozici všechna vstupní data.

– Řadič priority přiděluje kódu daného bloku kapacitu CPU na dobu, která odpovídá jeho prioritě, potom přeřazuje tento blok na konec fronty, kterou obhospodařuje. Z této fronty je blok vyřazen po dokončení své činnosti.

– Asynchronně se provádějí bloky odpovídající strukturám, vstupně/výstupním funkcím, časovacím funkcím a uživatelem definovaným subVI.

• Code Interface Nodes (CINs) a všechny výpočetní funkce jsou prováděny synchronně. Kód bloku je prováděn bez přepínání na provádění jiných bloků a teprve po jeho dokončení je kapacita CPU předána pro provádění jiných bloků.

• Existuje pět úrovní priority: 0, 1, 2, 3 a subroutine. – Nejnižší úroveň priority je úroveň 0, – Nejvyšší prioritou je priorita subroutine, která je v některých ohledech speciální. Běží-li

některý VI s prioritou subroutine, žádný jiný nebude spuštěn, dokud se tento nedokončí. Provádění těchto bloků je tedy sekvenční.

Page 13: LabView 7.1

Provádění bloků operace• Reentrantní provádění bloků znamená, že je možné provádět několikanásobně

volaný blok paralelně. (každé volání takovéhoto bloku totiž vytváří separátně kopii dat) užitečné ve třech případech: – jestliže VI obslužného programu řídí a komunikuje s fyzickým přístrojem a

musí řídit několik identických přístrojů – jestliže VI čeká specifikovaný časový interval nebo dojde k vypršení

nastaveného času – jestliže VI obsahuje data, která nemohou být sdílena s jinými položkami tohoto

VI,• Reentrantní provádění VI se povoluje nastavení VI Setup...

Příklad viz. [1]

Page 14: LabView 7.1

DLL• Pro volání funkcí z DLL souboru

musíme mít k dispozici:– konkrétní dll soubor ;),– jména funkcí v DLL,– počet a typy argumentů ve fci s

návratový typem,– volací konvence (C, stdcall).

tyto informace získáme z prototypu funkcí v hlavičkovém souboru .h

void MyFunction(int32 a, double* b, char* string, uInt32 arraysize, int16* dataarray);

b je pointer na jedno realné číslo (8B float),string je pointer na řetězecdataarray je pointer na pole 16b celých čísel

LabVIEW Win32 Win16int8 signed char signed char signed char signed charint16 short int, short short shortint32 int, long long int, long int, longuInt8 char char char char

uInt16

uInt32 unsigned long

Macintosh (PowerPC)

Most UNIX Systems

unsigned short

unsigned int, unsigned

shortunsigned

shortunsigned

short

unsigned int, unsigned long

unsigned int, unsigned long

unsigned int, unsigned long

Page 15: LabView 7.1

#include “main.h"#include <windows.h>#include <stdio.h>#include <stdlib.h>#include "math.h"#define true 1 #define false 0

DLLIMPORT int GetSphereSAandVol(double radius, double* sa, double* vol){ if(radius < 0) return false; //return false (0) if radius is negative *sa = GetSA(radius); *vol = GetVol(radius); return true; }

DLLIMPORT double GetSA(double radius){ return 4 * M_PI * radius * radius; }

DLLIMPORT double GetVol(double radius){ return 4.0/3.0 * M_PI * pow(radius, 3.0); }

BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ){ switch (reason) { case DLL_PROCESS_ATTACH: break;

case DLL_PROCESS_DETACH: break;

case DLL_THREAD_ATTACH: break;

case DLL_THREAD_DETACH: break; }

/* Returns TRUE on success, FALSE on failure */ return TRUE;}

main.h

DLLIMPORT int GetSphereSAandVol(double radius, double* sa, double* vol);

DLLIMPORT double GetSA(double radius);DLLIMPORT double GetVol(double radius);

Page 16: LabView 7.1

DLL, advanced functionsBlok pro

volání fce z dll souboru

CIN – Code Interface

Node

Vstupní zařízení (joystick,

klávesnice, myš,…)

Manipulace s daty – přetypování, posuvy,

přesouvání, rozdělování,…

Synchronizace – semafory,

fronta, …

I/O port

WIN registry

call library function node

Jestli je funkce v DLL schopná

paralelního zpracování

(threadsafe) lze zvolit Reentrant(žlutá/oranžová

barva)DLL soubor Výběr fce z DLL

Volací konvence

Nastavení typu argumentu nebo

návratové hodnoty funkce

přidávání argumentů pro postupné vytvoření

prototypu fce

Page 17: LabView 7.1

Vytvoření DLL v LabView1. Vytvoříme VI přístroj,2. přidělíme terminálu

vstupy/výstupy,3. uložíme a uzavřeme.

• Otevřeme nový VI• v tools:

Build application or shared library (DLL) …

Page 18: LabView 7.1

Vytvoření DLL v LabView

Výběr DLL/EXE

Jméno výsledného

DLL

Zdrojový a cílový

adresář

Výběr VI přístroje

Jména exportovaných funkcí z VI do DLL souboru.

Identifikátor fce

Volací konvence

Argumenty fce

Prototyp fce

Nastavení argumentu

Po vytvoření všech prototypů funkcí z VI přístroje, zvolit BUILD - provede kompilaci a vytvoří výsledný .DLL, .h a .lib soubor v cílovém adresáři.

Page 19: LabView 7.1

Použití DLL z LabView v C#include <stdio.h>#include <stdlib.h>//#include "SharedLib.h"#include "windows.h"

double C = 0;double F = 25;

HANDLE fH = 0;double (*f_to_c2)(double *DegF);

int main(int argc, char *argv[]){ printf("Nacteni DLL knihovny\n"); fH = LoadLibrary("SharedLib.dll"); printf("Jeji handle jest %d\n",fH); if (fH == 0) { MessageBox(NULL,"Chyba pri nacteni DLL","Chyba", MB_OK); return 1; }

printf("Ziskani ukazatele na konverzni fci\n"); f_to_c2 = GetProcAddress(fH, "f_to_c"); printf("Jeji pointer jest %d\n",f_to_c2); if (f_to_c2 == 0) { MessageBox(NULL,"Chyba pri nacteni funkce z DLL","Chyba", MB_OK); return 1; }

C = f_to_c2(&F); printf("Konverze stupnu\nF=%f\tna\t\°C=%f\n",F,C); FreeLibrary(fH); system("PAUSE"); return 0;}

Page 20: LabView 7.1

CIN• CIN (Code Interface Node)• Blok zpřístupňující C/C++ kód pro LabView

– V C kódu musíme zahrnout hlavičkový soubor extcode.h (v adresáři …/LabWiew/cintools)#include "extcode.h"

• LabView volá funkce standardizovaného rozhraní:funkce které mají konkrétní identifikátory, návratovou hodnotu a parametry:– MgErr CINRun(volitelné parametry_dle I/O bloku); // při každém

provedení bloku CIN– MgErr CINProperties(int32 prop, void *data); // nastaveni CIN– MgErr CINLoad(RsrcFile reserved) // provede se při načtení CIN– CINSave, CINUnload, CINAbort, CINInit, CINDispose.

• Dále je možné využívat v kódu další vnitřní fce LabView, typy, …(viz. manuál ve formátu pdf, dostupný z nápovědy k CIN bloku)

• Na rozdíl od bloku pro DLL se parametry pro blok CIN volitelně přidají při tvorbě programu, poté se vygeneruje příslušná šablona pro C/C++.

Page 21: LabView 7.1

Blok CIN se „roztáhne“ tak, aby obsahoval potřebný počet terminálů (parametrů)

Terminály mohou být:- obousměrné- vstupní- výstupní

Terminálům přiřadíme konkrétní signály

Vytvoříme šablonu pro C/C++

Page 22: LabView 7.1

CIN• Do vytvořené šablony doplníme náš kód.• Následně je potřeba vygenerovat .lsb soubor

http://zone.ni.com/devzone/conceptd.nsf/webmain/31DAB548C369B2C6862567C8006D8FC9

– Vytvoříme nový projekt DLL– Nastavíme kompilátor:

• Multithreaded DLL, zarovnávání čísel po 1B, konvence volání funkcí C.

– Adresář cintools přidat do cesty pro vyhledávání include souborů

– Do projektu přiřadit tyto soubory:Cin.obj, Labview.lib, Lvsb.lib, Lvsbmain.def

– Vytvoříme příkaz pro vlastní sestavení .lsb souboru

• Build commands"<Cintools_path>\lvsbutil" "$(TargetName)" -d "$(WkspDir)\$(OutDir)„

• Output files"$(OutDir)$(TargetName).lsb„

– Spustíme kompilaci

Page 23: LabView 7.1

CIN• Po naprogramování a úspěšném

přeložení projektu DLL získáme požadovaný soubor .lsb

• V přeloženém DLL nejsou slinkovány fce CINXxxx (neuvedeme #include nas_soubor.c v hlavním souboru DLL)

• .lsb soubor je sestaven pomocí programu lvsbutil

• .lsb načteme do bloku CIN pomocí pop-up okna Load Code Resource

Z funkce CINProperties získal LabView informaci o kódu, jenž je threadsafe (žlutá barva) a je možné

k tomuto objektu přistupovat paralelně.

Page 24: LabView 7.1

Simulation module• Všechny bloky ze simulačního modulu

musí být na simulační smyčce nebo simulačním subVI

• Lineární (diskrétní i spojité) systémy lze zadávat pomocí přenosu, stavového prostoru, pólů a nul

• Nelineární systémy je nutné sestavit pomocí bloků

• Zrcadlové obrácení bloku pomocí položky kontextového menu bloku – Reverse terminals

• Pokud je na vstupu derivace skok, dojde k zastavení simulace

• Při použití bloků nepatřících do simulačního modulu dochází k neočekávanému chování

Simulation module

Page 25: LabView 7.1

SubVI• Zpřehlednění blokového schématu• Znovupoužití vytvořeného schématu• Vytvoření z aktuálního výběru pomocí nabídky Edit - Create subVI• Výstupy/vstupy vytvořeného subVI odpovídají propojeným výstupům/vstupům z/do výběru

použitého pro vytvoření subVI• Uložené subVI se vloží pomocí funkce Select a VI …

Select a VI…

Page 26: LabView 7.1

Reference[1] http://vlab.fme.vutbr.cz/

[2] http://www.physics.muni.cz/~cermak/index.php

[3] http://zone.ni.com/zone/jsp/zone.jsp

Communicating with a Real-Time Engine

http://zone.ni.com/devzone/devzone.nsf/webcategories/80B108310397CDE886256B5D00798294

Programming Event Response Applications

http://zone.ni.com/devzone/devzone.nsf/webcategories/B8486B92B6C187B486256B5D007A8C43

Programming Control Applications

http://zone.ni.com/devzone/devzone.nsf/webcategories/98B00EDB9735ECB386256B5D007A86D0

Using External Code

http://zone.ni.com/devzone/devzone.nsf/webcategories/69AC4D47BD54298A86256AB7006AB23C

Hardware Input and Output

http://zone.ni.com/devzone/devzone.nsf/webcategories/9B7EBE009FDF14718625688B00731D38