introduzione a national instruments labview - roma1.infn.it · • national instruments ha anche...

72
Introduzione a National Instruments LabVIEW

Upload: doduong

Post on 16-Feb-2019

230 views

Category:

Documents


0 download

TRANSCRIPT

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 Profibus GPIB

e molto altro!

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…

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

“Panel”

“Diagram”

Control Indicator

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

Lo strumento virtuale

“Panel”

“Block Diagram”

Control Indicator

Driver

Hardware

Sub-vi

Panel

Esegui

Esegui in “loop”

Interrompi l’esecuzione

Sospendi l’esecuzione

Font, allineamento, ecc.

Icona/connettore toolbar

Palette dei controlli e degli indicatori

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

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)

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

Sequence

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…

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

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)

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

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

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

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

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