labview 7.1
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 PresentationTRANSCRIPT
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.
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)
Čá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)
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
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
Datové typy, signály.
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
• …
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
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.
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.
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í.
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]
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
#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);
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
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) …
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.
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;}
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++.
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++
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
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ě.
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
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…
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