introduzione a national instruments labview - roma1.infn.it · • national instruments ha anche...
TRANSCRIPT
Cosa è e a cosa serve…
E’ un linguaggio di programmazione grafico orientato a: • Acquisizione dati • Controllo di strumenti
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
Dal 1986 ... (sull’unico personal computer allora esistente, ovvero il Macintosh)
... al 2011
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
2003
2005
2007
2008
2001
2004
… 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…
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)
Diagramma a blocchi
“Diagram”
Bordo spesso=Controllo Bordo sottile=Indicatore
Colore e spessore del filo=tipo di variabile
Real Array di Real
Integer Cluster (struttura di variabili di tipo diverso)
Boolean
String
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
Driver seriale (sistema operativo)
NI 488.2 NI-VXI
• Risorsa=strumento, risorse gestite da un unico Resource Manager • Sessione=connessione alla risorsa, attraverso il RM • Messaggi e eventi
Panel
Esegui
Esegui in “loop”
Interrompi l’esecuzione
Sospendi l’esecuzione
Font, allineamento, ecc.
Icona/connettore toolbar
Palette dei controlli e degli indicatori
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 over: esegue completamente un nodo – senza entrare nel nodo (se è vi) – e si mette in pausa al nodo successivo
Step into: fa uno step di esecuzione, e quando arriva a un vi, entra e si mette in attesa dello step 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/Sposta
Modifica/inserisci testo Scorri
Cattura colore
Seleziona colore
Probe (guarda il valore)
Break-point
Connetti filo
Seleziona colore
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)
While loop Esegue tutto il contenuto fino a che: - La variabile boolean diventa TRUE (stop when…) oppure - La variabile boolean diventa FALSE (loop until…)
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
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)
N.B. Approfittiamo per sottolineare che, a parte versioni molto precedenti, la visualizzazione di controlli e indicatori è (di default) di tipo “icon”
(right click)
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
• 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
array di integer a 2 dimensioni Calcola la dimensione di un array
Estrae una componente da un array
• LOOP (for)
Diagram: strutture di controllo • SEQUENCE: una successione di “frame” eseguiti uno
dopo l’altro
La sequence sopra equivale semplicemente a:
Variabile locale (definita in questo frame)
Variabile locale (non ancora disponibile perché definita in un frame successivo)
Variabile locale definita in un frame precedente
Panel: indicatori e controlli Waveform chart: rappresenta l’andamento dei valori assunti da una variabile numerica
Gauge: indicatore di tipo “analogico” del valore istantaneo di una variabile numerica
Push button: controllo di tipo boolean
Molti altri elementi: menù, tabelle, elementi grafici…
Boolean Determina il comportamento meccanico del bottone: - Torna sù o rimane schiacciato? - Cambia stato quando viene schiacciato
o quando viene lasciato? - Latch?
Gestione file
Costante ring integer
Mostra la string in un indicatore (string)
Leggi una string Scrivi una string
Chiudi il file (attraverso il sistema operativo)
Cluster con le variabili di errore
file-reference Apre il file (attraverso il sistema operativo) e restituisce un “puntatore” di tipo file-reference
Oggetto di tipo file-path (simile al tipo string)
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
Express vi
Molto utili e semplici da usare Esempio tipico è l’analisi dei segnali:
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 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)
vi e sub-vi Legge una tensione, per esempio una sonda di temperatura Converti da gradi F
a gradi C
Ripeti fino a che non viene spinto il bottone di stop
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
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 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”)
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
LabVIEW 2011 (Windows XP)
LabVIEW 7 express (Sun Solaris)
Nella gestione dei file può manifestarsi qualche (in genere piccola) incompatibilità tra una versione e l’altra o tra diverse piattaforme