Introduzione a National Instruments LabVIEW

Transcript

Introduzione a National Instruments LabVIEW
Introduzione a
National Instruments LabVIEW
Cosa è e a cosa serve…
E’ un linguaggio di programmazione grafico orientato a:
•  Acquisizione dati
•  Controllo di strumenti
VME
VXI
e molto altro!
Profibus
GPIB
Installare LabVIEW
•  LabVIEW installato nei computer del laboratorio, con
licenza “campus”
•  Per provare sul proprio PC senza licenza: versione di
prova (valida 30 giorni) scaricabile dal sito National
Instruments:
https://lumen.ni.com/nicif/i/evallvuser/content.xhtml
•  Necessari circa 2 GB liberi su disco
•  Attenzione alle versioni!
–  In generale, progetti salvati da versioni precedenti possono
essere aperti con una qualsiasi versione successiva.
–  E’ possibile salvare per la versione corrente o fino a una certa
versione precedente... Attenzione in particolare quando si ha a
che fare con installazioni su PC “datati” con versioni di LabVIEW
di qualche anno fa.
LabVIEW: una lunga storia
... al 2011
Dal 1986 ...
(sull’unico personal computer allora
esistente, ovvero il Macintosh)
LabVIEW: una lunga storia
...
5.0
6i (6.0)
6.1
7express (7.0)
7.1
8.0
8.20
8.5
8.6
2009 (9.0)
2010 (10.0)
2011 (11.0)
Nei laboratori di fisica delle alte energie si
possono trovare anche versioni “antiche”...
1998
2000
2001
2003
2004
2005
2007
2008
… ma niente paura!
LabVIEW: un prodotto modulare
•  In realtà le funzionalità di base e lo “stile” di programmazione
non sono cambiate in modo radicale sin dalle prime versioni,
anche se il prodotto si è arricchito di una quantità enorme di
funzioni e librerie aggiuntive
•  Un prodotto modulare
•  Molte librerie e funzioni aggiuntive
sviluppate da produttori “third party”
sono state acquisite da National
Instruments e inserite nella versione
successiva di LabVIEW o rese
facilmente integrabili come librerie
standard: toolkit
•  Moltissimi add-on o toolkit scaricabili
dal sito National Instruments (ad
esempio, alcuni plugin per salvare o
rileggere dati in formati standard)
Esempio: Internet toolkit, tcp/ip socket,
httpd server, ftp server, ecc…
LabVIEW: un prodotto modulare
Principali componenti
•  Signal processing, analysis, and connectivity
•  Integration with real-time systems, FPGAs, and other deployment hardware
•  Data management, data logging, and reporting
•  Control and simulation
•  Application distribution
Hardware e sistemi embedded
•  Molti produttori di hardware forniscono driver e codice di esempio – e in qualche caso
tutto ciò che serve a controllare e rendere funzionale il dispositivo – in forma di
librerie e vi di LabVIEW
•  National Instruments ha anche cominciato a sviluppare sistemi “embedded”, nei quali
il codice LabVIEW implementato direttamente nei dispositivi: Compact Field Point
•  Dati disponibili su server httpd
•  Il linguaggio di LabVIEW fu pensato
per abbinare un ambiente di
sviluppo grafico con un metodo
di programmazione basato
sul flusso dei dati, anziché sui
flussi di controllo come nei
linguaggi sequenziali tradizionali.
Una delle conseguenze
fondamentali di questa originaria
scelta è la sua
naturale inclinazione al
parallelismo
•  La principale metafora dello
strumento virtuale: virtual
instrument (vi)
Lo strumento virtuale
“Diagram”
Control
Indicator
“Panel”
Diagramma a blocchi
Colore e spessore del filo=tipo di variabile
Real
Array di Real
Integer
Cluster
(struttura di
variabili di tipo
diverso)
Boolean
String
“Diagram”
Bordo spesso=Controllo
Bordo sottile=Indicatore
VISA
•  Linguaggio standard di input/output per la programmazione di
strumenti e dispositivi
•  API (application program interface) di alto livello che si interfaccia
con i driver di basso livello
VISA
Seriale
GPIB
VXI
NI 488.2
NI-VXI
Driver seriale
(sistema operativo)
•  Risorsa=strumento, risorse gestite da un unico Resource Manager
•  Sessione=connessione alla risorsa, attraverso il RM
•  Messaggi e eventi
Lo strumento virtuale
Sub-vi
“Block Diagram”
Driver
Control
Indicator
“Panel”
Hardware
Panel
Font, allineamento, ecc.
Icona/connettore
toolbar
Esegui
Esegui
in “loop”
Interrompi
l’esecuzione
Palette dei controlli
e degli indicatori
Sospendi l’esecuzione
Block Diagram
Toolbar
Palette delle
funzioni e delle
strutture di dati
Diagram toolbar
Highlight: attiva/disattiva la modalità di debug. In modalità debug,
quando si manda in RUN il vi, l’esecuzione avviene passo per
passo, mostrando il flusso di dati (e i valori delle variabili) nel block
diagram.
Step into: fa uno step di esecuzione, e quando arriva a un vi, entra
e si mette in attesa dello step successivo
Step over: esegue completamente un nodo – senza entrare nel
nodo (se è vi) – e si mette in pausa al nodo successivo
Step out: completa l’esecuzione del nodo corrente e sale al livello
superiore (se si è già al livello top è disabilitato)
Connettori, fili, nodi, ecc.
Seleziona colore
Seleziona/Sposta
Modifica/inserisci testo
Connetti filo
Break-point
Scorri
Cattura colore
Seleziona colore
Probe
(guarda il valore)
Diagram: strutture di controllo
•  CASE (If/then)
•  LOOP (while)
If =FALSE…
If =TRUE…
•  Può funzionare come uno
switch/case del C con
variabili numeriche, string,
eccetera…
•  Attenzione al default!
Diagram: strutture di controllo
•  CASE (If/then)
•  LOOP (while)
Variabile integer che incrementa il
suo valore per ogni ciclo del loop
(0,1,2,…)
Shift register: contiene il valore
di una variabile che viene
“riportata” al ciclo successivo
While loop
Esegue tutto il contenuto fino a che:
-  La variabile boolean diventa TRUE (stop when…)
oppure
-  La variabile boolean diventa FALSE (loop until…)
Loop
Diagram: strutture di controllo
•  LOOP (for)
Ripete N volte il codice contenuto,
N deve essere una variabile integer
Nota: anche in LabVIEW esiste il cast, ovvero il meccanismo
per cui una variabile può essere trattata come variabile di tipo
diverso.
Esempi:
•  Nel caso del numero di iterazioni del for loop, se si mette in
input al connettore N una variabile numerica di tipo double
essa verrà forzata a integer
•  Nel caso in cui si faccia un’operazione aritmetica tra variabili
integer e double, il risultato sarà evidentemente un double
L’operazione di cast viene segnalata con un puntino
(attenzione: si può disabilitare)
(right click)
N.B.
Approfittiamo per sottolineare che, a parte versioni molto precedenti, la
visualizzazione di controlli e indicatori è (di default) di tipo “icon”
Diagram: strutture di controllo
•  LOOP (for)
•  Come nel while-loop, i è un integer che contiene l’indice del loop
•  Il nodo di ingresso in un loop è detto tunnel
•  Naturalmente non modifica le variabili scalari
•  Di default tratta anche le variabili di tipo array senza modificarle
Attenzione agli spezzoni di filo “orfani”
Spesso segnalano una connessione
mancante o venuta a mancare e dunque
un’interruzione nel “flusso” del dato
Rendono non eseguibile il vi (freccia
RUN “rotta”)
Diagram: strutture di controllo
•  LOOP (for)
array di integer a 2 dimensioni
Calcola la dimensione di un array
Estrae una componente da un array
•  Il tunnel di ingresso in un loop, di default tratta
le variabili di tipo array senza modificarle
•  Se invece si attiva l’indexing ciascun ciclo del
loop accederà a una compentente dell’array
•  Si può allora lasciare il connettore N senza
input, attivando l’auto-indexing: il numero di
iterazioni del loop viene determinato dalla
dimensione dell’array
Diagram: strutture di controllo
•  SEQUENCE: una successione di “frame” eseguiti uno
dopo l’altro
Variabile locale
(definita in
questo frame)
Variabile locale
(non ancora
disponibile perché
definita in un frame
successivo)
Variabile locale
definita in un
frame
precedente
La sequence sopra equivale semplicemente a:
Sequence
Panel: indicatori e controlli
Waveform chart: rappresenta l’andamento dei
valori assunti da una variabile numerica
Push button:
controllo di
tipo boolean
Gauge: indicatore di tipo “analogico” del valore istantaneo
di una variabile numerica
Molti altri elementi: menù, tabelle, elementi grafici…
Panel
LabVIEW 2011
(Windows XP)
LabVIEW 7 express
(Sun Solaris)
Boolean
Boolean
Determina il comportamento meccanico
del bottone:
-  Torna sù o rimane schiacciato?
-  Cambia stato quando viene schiacciato
o quando viene lasciato?
-  Latch?
Numeric (e Graph)
Numeric
Suggerimento:
Il tasto destro del mouse è
spesso molto prezioso…
Array
drag
Cluster
String
Context help
Uno strumento fondamentale!...
Gestione file
Gestione file
Oggetto di tipo
file-path
(simile al tipo string)
file-reference
Cluster con le variabili di errore
Apre il file (attraverso il sistema operativo) e
restituisce un “puntatore” di tipo file-reference
Costante ring integer
Scrivi una string
Leggi una
string
Mostra la string in un indicatore (string)
Chiudi il file (attraverso il sistema operativo)
Graph
Graph
Express vi
Non sembra fare tanta
differenza…
Express vi
La principale differenza tra vi e express vi è che quest’ultimo non richiede in pratica
programmazione, ma vengono configurati con delle dialog box
Express vi
…torniamo al nostro
esempio del graph XY
Supponiamo di voler
aggiornare il graph in
modo dinamico
Simula un segnale sinusoidale
Wait
Express vi
La principale differenza tra vi e express vi è che quest’ultimo non richiede in pratica
programmazione, ma vengono configurati con delle dialog box
Molto utili e semplici da usare
Esempio tipico è l’analisi dei
segnali:
Express vi
Gli express vi prevedono un nuovo tipo di dati il “dynamic data type”
E di conseguenza, lo strumento di conversione da/a a dati non dinamici (che è
naturalmente un express vi a sua volta)
Legge una tensione,
per esempio una
sonda di
temperatura
Converti da gradi F
a gradi C
vi e sub-vi
Ripeti fino a che
non viene spinto il
bottone di stop
vi e sub-vi
Blocco di codice ripetuto
Blocco di codice ripetuto
vi e sub-vi
Un nuovo vi con il blocco di codice che ci interessa…
Doppio click per modificare l’icona (utile
per distinguere i diversi vi che creiamo
nel momento in cui li riutilizzeremo come
“sub-routine”)
Singolo click per modidicare il
connector pane
Click su indicatore/controllo e su un
connettore per associarli
A questo punto sarà utilizzabile all’interno di un altro vi
Naturalmente connettendo un input (controllo) boolean e
un output (indicatore) double
vi e sub-vi
Il codice da cui siamo partiti
diventa quindi più leggibile:
Gerarchia dei vi
Attenzione:
•  Ciascun vi può essere il “top” della
gerarchia se viene aperto ed eseguito in
standalone
•  Un vi può essere richiamato da diversi vi
all’interno della stessa gerarchia:
attenzione agli input/output!
•  Non solo il numero e tipo di
connettori,
•  Ma anche la loro posizione sul
“connector pane”
Non è così complicato…
Viene mostrata la gerarchia anche
di alcuni vi forniti di default da
LabVIEW:
in questo esempio “Write to
spreadsheet file” e “Read from
spreadsheet file”
•  Se uno o più sub-vi non vengono trovati o non sono eseguibili (per esempio
il loro connector pane è differente da quello che il vi “top” richiederebbe),
naturalmente il vi top non è eseguibile, e questo viene segnalato dalla freccia
RUN rotta
•  Una finestra elenca i sub-vi che hanno errori e il dettaglio degli errori
Gerarchia dei vi
Attenzione!
•  LabVIEW ricorda la posizione nel
filesystem dei sub-vi che vengono
“richiamati” da un vi,
•  Quando si apre un vi già salvato, cercherà
di aprire il file che corrisponde a ciascun vi
nella posizione in cui si trovava quando è
stato salvato il vi “top”, poi avvia una
ricerca automatica (sullo stesso identico
nome di file, ma in altre directory), infine –
se non lo trova – apre una dialog per farlo
localizzare all’utente…
•  Quando si chiuderà il vi “top” sarà
necessario salvarlo anche se solo qualche
sub-vi è stato trovato in una directory
differente rispetto all’ultimo salvataggio
Variabili locali
Variabili locali
Da “indicatore” (variabile in write) diventa
“controllo” (variabile in read)
Variabili globali
Modifica e salva su disco il pannello…
•  Utilizzabile e modificabile da ogni vi e sub-vi nella gerarchia
•  Di fatto, un sub-vi essa stessa
•  Modificabile anche da qualsiasi altro vi in memoria (che
naturalmente include la variabile globale), anche se non fa parte
della gerarchia
A proposito di locali e globali…
Spesso si dice che un buon stile di programmazione non dovrebbe prevedere l’uso di
variabili globali e, in LabVIEW, nenache delle variabili local
E’ certamente vero che rallentano l’esecuzione e richiedono più memoria…
… ma spesso semplificano la programmazione e – cosa ancora più importante –
migliorano la leggibilità del Block Diagram
•  In generale: LabVIEW chiede di salvare il vi quando lo si chiude ogni volta
che la versione in memoria è/appare differente da quella salvata sul disco
(nell’esempio anche se nessuna modifica è stata fatta dal programmatore,
il vi è stato salvato su un diverso sistema operativo e dunque le chiamate
di sistema sono state “ricompilate”)
C-include (cin)
C-include (cin)
(right click)
Sempre più C: LabWindows/CVI
LabWindows/CVI
•  E’ un IDE (Integrated Development Environment)
ANSI C
•  Fornisce una serie di strumenti per lo sviluppo di
interfacce grafiche…
•  …ed è naturalmente orientato all’acquisizione dati e
al controllo di strumenti
•  Ha naturalmente un gran numero di librerie
standard
•  Non è solo una questione di linguaggio grafico
piuttosto che ANSI C: LabWindows/CVI permette
lo sviluppo di sistemi “real time”
Gestione file
Nella gestione dei file può manifestarsi
qualche (in genere piccola)
incompatibilità tra una versione e l’altra
o tra diverse piattaforme
LabVIEW 7 express
(Sun Solaris)
LabVIEW 2011
(Windows XP)
MAX
MAX
Labview è…
Manuali, guide, tutorial...
•  Introduzione a LabVIEW online:
–  http://www.ni.com/gettingstarted/
labviewbasics/i/
•  Tutorial completo:
–  www.ni.com/pdf/manuals/320998a.pdf
•  Wiki pages dedicate:
–  http://labviewwiki.org/LabVIEW
•  Labview portal:
–  http://www.labviewportal.eu/en/home