LABVIEW
Sommario
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Che cosa è uno strumento virtuale (VI) creato con LABVIEW
Parti di un VI:
– pannello frontale
– diagramma a blocchi
Confronto tra il principio di funzionamento di uno strumento creato con
LABVIEW (diagramma a blocchi) e la programmazione convenzionale
(es. linguaggio “C” o JAVA)
Descrizione degli strumenti disponibili in LABVIEW per la creazione del
pannello frontale di uno strumento virtuale.
Realizzazione di un semplice strumento: un misuratore di temperatura con
registratore a carta incorporato
Descrizione dello STRUMENTO TOOLS
Che cosa è un SUBVI
Creazione di un SUBVI
Utilizzazione della struttura For .. Next
Utilizzazione della struttura Do … while
Utilizzazione della struttura If … else if .. Endif
Utilizzazione della struttura Formula Node
Utilizzazione della struttura SEQUENZA
Realizzazione di grafici: modo CHART e modo GRAPH
Esempi di elaborazione numerica dei dati
Esempi di controllo di processi industriali di laboratorio
Sistemi di acquisizione DAQ e Labview
Trasduttori e Labview
Introduzione
Una delle possibili ragioni per usare LABVIEW è
quella di rilevare, durante una esperienza di
laboratorio, il comportamento di alcune grandezze
fisiche, come la temperatura, la pressione, in modo
automatico, utilizzando un computer. In questo modo
i dati potranno poi essere elaborati e visualizzati in
opportuni grafici.
Con LABVIEW vengono creati degli strumenti
virtuali (VI) in cui il monitor sostituisce il pannello,
mentre il computer sostituisce il cuore dello
strumento, eseguendo le operazioni definite all'interno
di uno schema a blocchi che ne descrive il principio
di funzionamento.
Il collegamento tra i dati provenienti dal mondo esterno e il
computer avviene tramite una delle porte di comunicazione
previste come standard (RS232, IEE488,USB,parallela
CENTRONICS), oppure tramite una scheda di acquisizione
(ADC) inserita direttamente nel bus del computer.
Mentre nel caso di uno strumento reale le operazioni vengono
eseguite agendo manualmente sui vari comandi, nel caso di uno
strumento virtuale tutte le operazioni vengono effettuate
utilizzando semplicemente il mouse.
Componenti di uno strumento virtuale
Uno strumento virtuale è costituito da due parti:
• il pannello frontale
•il diagramma a blocchi.
Il pannello frontale agisce da interfaccia utente, ovvero permette di
impostare i parametri di input e di visualizzare i risultati di
un’operazione o di una misura all’interno di un display digitale o di
una finestra grafica.
Il diagramma a blocchi definisce il principio di funzionamento dello
strumento e corrisponde al codice sorgente di un programma eseguito
utilizzando i metodi standard di programmazione.
Esempio: Aquisizione di una temperatura e visualizzazione su un termometro digitale
Pannello frontale
Sul pannello frontale sono stati inseriti 3 componenti a ciascuno dei quali
corrisponderà una variabile di input o di output, a seconda se il componente viene utilizzato per
impostare un parametro oppure per visualizzare il risultato di una misura.
I componenti utilizzati per impostare i parametri di ingresso e di uscita vengono denominati,
rispettivamente, CONTROLLI e INDICATORI.
Vengono definite 3 variabili:
•Il nome del canale di ingresso da cui viene
acquisita la temperatura. Il componente
grafico corrispondente è un box di input
•Una variabile definita POWER che
permetterà di eseguire le operazioni sino a
che il suo valore rimane TRUE (strumento
acceso). Il componente grafico per questa
operazione è di solito un pulsante o un
interruttore.
•Una variabile di uscita denominata
temperatura, che visualizza il valore della
temperatura acquisito dallo strumento. Il
componente grafico corrispondente è un
termometro con annesso un box di output,
che simula un display digitale.
Aquisizione di una temperatura e
visualizzazione su un termometro
digitale (programmazione convenzionale)
do
{
String canale=“temperatura”;
connetti(canale);//apri il canale di comunicazione con la
scheda ADC collegata a un trasduttore di T
double T=acquisisci();//acquisisci la temperatura
visualizza(T);//visualizza la temperatura
ritarda(1000);//ritarda di 1000 mS
} while (POWER==TRUE);
Aquisizione di una temperatura e
visualizzazione su un termometro
digitale (diagramma a blocchi)
A ciascun componente inserito sul pannello frontale corrisponde una variabile di
input o di output, visualizzata mediante un simbolo grafico, la cui forma dipende dal
fatto se la variabile è di input o di output; inoltre, al suo interno sono presenti delle
scritte che indicano il tipo di dato (es. DBL = numerico decimale doppia precisione,
TF = booleano , abc = variabile stringa).
Inoltre sono presenti dei simboli che rappresentano :
•L’acquisizione del segnale da una scheda ADC
Il ritardo di lettura tra un dato e il successivo
•Il ciclo DO ….. WHILE che permette di ripetere tutte le operazioni, rappresentato
dalla zona rettangolare grigia. Le operazioni che devono essere ripetute vanno
inserite all’interno della zona rettangolare. (E’ come se inserissimo un set di
istruzioni all’interno del ciclo DO ….. WHILE.
Confrontando lo schema a blocchi con il codice sorgente descritto nella pagina
precedente, si vede che ciascun simbolo grafico, a parte le variabili di input e di
output, corrisponde a una subroutine o una funzione contenente tutta una serie di
istruzioni, che svolgono un determinato compito.
Aquisizione di una temperatura e
visualizzazione su un termometro
digitale (schema a blocchi)
(segue)
Per far sì che l’apparecchio possa funzionare correttamente è poi necessario
collegare tra di loro le varie icone in modo da definire come vengono
elaborate le varie variabili. Avremo le seguenti connessioni:
Definisce che la connessione deve
avvenire con il canale di ingresso
dell’ADC collegato al trasduttore di T
Il dato acquisito viene inviato sul
display digitale
Eseguo un ritardo di 1000 mS
Corrisponde alla condizione
POWER==TRUE del ciclo
DO…. WHILE
Registratore a carta di una temperatura
Pannello di controllo
Viene simulata l’acquisizione di una temperatura da un trasduttore; il segnale letto
viene rappresentato graficamente all’interno di una finestra grafica, che simula un
registratore a carta. Al termine della lettura i dati vengono memorizzati su un file
dati.
Sono stati inseriti i seguenti componenti :
•Un box di input che definisce il n. di letture
•Un potenziometro RITARDO che imposta l’intervallo di lettura tra un dato e il
successivo
•Un display grafico con annesso un display digitale che visualizza la temperatura
istantanea
•Un display digitale che riporta il valor medio della temperatura.
Registratore a carta di una temperatura
(Programmazione convenzionale)
int nletture=20;//imposto il n. di letture
int ritardo=500;//ritardo di lettura in millisecondi
double T[nletture+1];//definisco un vettore che conterrà le temperature lette
for(int i=0;i<nletture;i++)
{
T[i]=acquisisci();// acquisisci la Temperatura
visualizza (T[i]);//visualizza graficamente T
ritarda(ritardo);//esegui un ritardo di tempo in mS
}
double Tmedia=calcola_media(T);//ricava il valor medio
Visualizza(Tmedia);//visualizza il valor medio di T
registra_dati(T);//memorizza i dati su file
Registratore a carta di una temperatura
(Diagramma a blocchi)
Oltre alle icone che rappresentano le variabili di input e di output sono presenti i
seguenti simboli:
L’acquisizione del segnale da una scheda ADC
Il ritardo tra una lettura e la successiva in ms
Il ciclo FOR … NEXT rappresentato da 3 rettangoli
leggermente sfalsati. Viene utilizzato per ripetere N-1
volte la lettura del segnale
Un simbolo che rappresenta una subroutine che
calcola il valore medio di una serie di dati
Un simbolo associato a una subroutine che permette di
registrare i dati su un file.
Registratore a carta di una temperatura
(Diagramma a blocchi : connessioni)
Dal listato del programma convenzionale possiamo dedurre che le connessioni
necessarie per far sì che “l’apparecchio funzioni correttamente” , sono le seguenti:
Il n. totale di letture va associato alla variabile N.
Il segnale proveniente dal trasduttore deve essere
visualizzato sul grafico
Alla subroutine associata all’icona TIMER deve essere
passata la variabile di input Timer che definisce
l’intervallo di tempo tra una lettura e la successiva ,
espressa in mS
I dati acquisiti tramite il ciclo FOR … NEXT vengono
memorizzati in una variabile vettore. Tali dati, che sono
disponibili una volta che è terminato il ciclo, vengono
inviati a una subroutine che ne esegue la media;
Il valore medio viene inviato e visualizzato sul
display numerico
I dati contenuti nel vettore vengono anche inviati a una
subroutine che permette di memorizzare i dati su un file.
Il pannello frontale
Per costruire il pannello frontale basta selezionare
i vari componenti all'interno di una finestra detta
Controls e disporli sullo schermo con l’aiuto del
mouse.
In questa finestra i vari oggetti sono rappresentati
mediante dei simboli grafici e possono riguardare sia
componenti meccanici (interruttori, deviatori), che
elettronici (display digitali e analogici, registratori,
ecc). Ciascuna icona presente nella finestra Controls
rappresenta un gruppo di oggetti di caratteristiche
similari. Inoltre è possibile anche inserire dei
componenti speciali (pulsanti particolari, indicatori
grafici,ecc), creati all'interno di Labview mediante
un editor grafico oppure utilizzando un programma
di grafica esterno.
Alcuni tipi di controlli
A seconda della funzione prevista, gli oggetti inseriti in un
pannello possono inoltre essere suddivisi in
CONTROLLI e INDICATORI. Mentre i primi servono
per immettere dei dati o impostare dei parametri, i secondi
servono per visualizzare dei risultati (ad esempio un
grafico in tempo reale).
Per definire la caratteristiche di ciascun oggetto inserito nel
pannello frontale, basta fare clic col pulsante destro
all'interno dell'oggetto. Sarà così possibile definire il tipo di
dato (intero, decimale, booleano), l’intervallo entro cui esso
può variare, l'unità di misura, ecc.
Il diagramma a blocchi
Il diagramma a blocchi sostituisce il classico codice
sorgente di un programma creato con uno dei soliti
linguaggi. Nel diagramma compaiono dei simboli grafici
detti nodi , collegati tra di loro mediante delle linee o fili
che rappresentano il percorso seguito dal segnale (o dati).
Ciascun nodo svolge una determinata funzione. Alcune
delle funzioni più comuni sono le seguenti:
•lettura dati impostati sul pannello frontale oppure
provenienti da una scheda di acquisizione ADC
•visualizzazione dei risultati (come numero o come
grafico)
•operazioni di tipo matematico o logico (moltiplicazioni,
addizioni, conversioni logaritmiche, ecc.)
•confronti tra dati
•funzioni di controllo di ben definiti intervalli di tempo
•ripetizione di determinate operazioni (equivalenti alle
istruzioni FOR .. NEXT, DO .. WHILE, ecc.).
Il risultato di una determinata funzione viene inviato al
nodo successivo tramite il filo che collega tra di loro i
due nodi.
Nelle seguenti figure vengono riportati, rispettivamente,
il pannello frontale e il diagramma a blocchi di un
semplice misuratore di temperatura. Il sensore è
direttamente collegato a una scheda di acquisizione
ADC. La temperatura viene visualizzata su un grafico a
intervalli regolari di tempo definiti col potenziometro
“ritardo”.
8
4
2
5
3
6
1 interruttore alimentazione
2 potenziometro ritardo
3 display grafico
4 lettura tensione da ADC
5 costante numerica
7
1
6 operaz. Aritm.
Ritardo (sec)=ritardo x 1000
7 timer
8 struttura do ….. while
Quando inseriamo degli oggetti sul pannello dello
strumento, LABVIEW automaticamente inserisce nel
diagramma a blocchi dei simboli corrispondenti al
tipo di oggetto. Nel caso di controlli il simbolo ha un
contorno più spesso, mentre nel caso di indicatori, il
contorno è più sottile.
Per inserire i vari nodi (o funzioni) che dovranno elaborare i
dati provenienti dai controlli, si fa clic all'interno della
finestra Functions.
Le varie funzioni previste in LABVIEW vengono
rappresentate mediante diversi simboli grafici
raggruppati per tipo :
•strutture corrispondenti alle istruzioni di
ripetizione (for .. next; do .. while ) oppure
strutture relative alle istruzioni di salto
condizionato (es. if .. Else .. Endif).
Inoltre è presente anche una struttura,
denominata FORMULA NODE, che permette
di eseguire delle istruzioni, in maniera analoga
a quanto fatto per un programma tradizionale
• operazioni aritmetiche
(somma,sottrazione,
moltiplicazione,
sommatoria, reciproco, funzioni
trigonometriche, ecc)
•operazioni logiche (AND, OR,
EOR, NOT, NAND, NOR, ecc.)
•operazioni su stringhe
(lunghezza, concatenazione,
estrazione, confronto,
conversione, ecc)
•Operazioni su matrici e
su vettori (costruzione di una
matrice, sostituzione e inserzione
di un elemento, valore min o max,
ecc.)
•operazioni di confronto (uguale,
diverso, maggiore, minore, ecc.)
•funzioni tempo (cronometro,
intervallo di tempo, data e ora,ecc.)
•operazioni su file
(memorizzazione e lettura dati)
•Operazioni di comunicazione
via INTERNET
•gestione collegamento con
uno strumento via IEE488 o
via RS232
•gestione acquisizione dati da
una scheda ADC
(configurazione scheda,
ingresso e uscita analogica e
digitale, ecc.)
•funzioni matematiche e
statistiche per la elaborazione
dei dati (calcolo di una
grandezza mediante
immissione di formule,
regressioni lineari e non,
interpolazioni, integrazioni
numeriche, analisi di Fourier,
operazioni su matrici, ecc.)
Realizzazione di un semplice strumento:
un misuratore di temperatura con
registratore a carta incorporato
•Lanciamo LABVIEW facendo due volte clic su
LABVIEW.EXE. Al comparire della seguente finestra di
dialogo, facciamo clic su NEW VI.
Compariranno sullo schermo due finestre vuote, Untitled1 e
Untitled 1 Diagram : la prima ci servirà per costruire il
pannello frontale e la seconda il relativo diagramma a
blocchi.
Realizzazione del pannello frontale
•Iniziamo a realizzare il pannello frontale facendo clic sulla
finestra Untitled 1. Inoltre, se la finestra Controls utilizzata
per selezionare i componenti da inserire nel pannello, non
dovesse essere visibile sullo schermo, allora basterà
selezionare la voce Show Controls Palette del menù
Windows.
• Facciamo clic sull’icona Boolean
nella finestra
Controls e quindi selezioniamo il bottone Vertical toggle
switch .
Col mouse collochiamo il bottone sul pannello,
facendo clic col sinistro, una volta individuata la sua
posizione.
Teniamo presente che i vari componenti possono essere
spostati o ridimensionati in qualsiasi momento mediante la
finestra Tools, descritta più avanti.
Appena sopra il bottone compare un rettangolino grigio
scuro, che serve per assegnare un’etichetta all’oggetto.
Digitiamo da tastiera Power e premiamo il tasto INVIO del
tastierino numerico del computer. Se il rettangolino non
dovesse essere visibile sullo schermo, basta portare il mouse
sopra il bottone e, premendo il pulsante destro, selezionare la
voce Show Label.
Inseriamo nel pannello un registratore a carta facendo clic
sull’icona Graph
della finestra Controls e quindi su
Waveform Chart
. Inseriamo nella sua etichetta la
scritta “misuratore di temperatura”.
Per cambiare la scala delle Y in maniera che vengano
visualizzati i valori compresi tra 0 e 100 gradi, selezioniamo
l’icona Operating Tool
all’interno della finestra Tools ,
poi facciamo due volte clic su 10.0, immettiamo il valore
100.0 e premiamo il tasto INVIO. Se lo desideriamo,
possiamo ridimensionare il registratore in modo che occupi
sul pannello uno spazio maggiore. A tale scopo selezioniamo
l’icona Positioning Tool
della finestra Tools e
trasciniamo col mouse uno degli estremi dell’area
rettangolare che include il registratore.
• Oltre a registrare la temperatura “su carta” vogliamo
visualizzare il suo valore con un display digitale. Per fare
questo portiamo il mouse sopra il registratore e premiamo il
pulsante destro del mouse; poi selezioniamo la voce Show e
quindi Digital Display.
Collochiamo il display appena sotto la scritta Plot 0.
Selezioniamo ora l’icona Labeling
all’interno della
finestra Tool e immettiamo la scritta “T(gradi), dopo aver
fatto clic lateralmente a destra del display. Terminiamo
l’iimissione dell’etichetta premendo il tasto INVIO del
tastierino numerico.
•Vogliamo ora inserire la manopola del ritardo appena sotto
il display digitale della temperatura, in modo da acquisire e
registrare i dati ad intervalli di tempo regolari compresi tra 0
e 10 secondi. A tale scopo facciamo clic sull’icona Numeric
della finestra Controls
, scegliamo il
potenziometro Dial
e collochiamolo col mouse sotto
il display digitale. Infine assegnamo al potenziometro
Abbiamo così terminato la realizzazione del pannello
frontale che dovrebbe presentarsi come mostrato nella
seguente figura
Realizzazione del diagramma a blocchi
• Facciamo clic sulla voce Show Diagram del menù
Windows. Comparirà in primo piano la finestra Untitled1
Diagram contenente tre simboli che corrispondono ai
seguenti componenti collocati precedentemente sul pannello:
interruttore di accensione, registratore a carta e
potenziometro Ritardo.
Ciascun simbolo, oltre a presentare l’etichetta dell’oggetto a
cui si riferisce, contiene al suo interno delle sigle, il cui
significato è legato al tipo di dato che è in grado di gestire:
I8 - I16 - I32
intero a 8, 16,32 bit
SGL - DBL - EXT decimale a precisione singola, doppia
e estesa
TF
numero booleano
abc stringa testo
Inoltre il contorno del simbolo è diverso a seconda se
l’oggetto a cui si riferisce è un controllo (ovvero serve per
immettere dei dati da pannello), come è il caso
dell’interruttore di accensione e del potenziometro “ritardo”,
che hanno un contorno più spesso, oppure se esso è un
indicatore (ovvero serve per visualizzare i dati) (registratore
a carta)( contorno sottile).
• Spostiamo gli oggetti presenti nel diagramma in modo da
ottenere la seguente figura:
N.B. Per spostare un oggetto è sufficiente selezionare l’icona
Positioning Tool
della finestra Tools , fare clic
all’interno del simbolo e trascinarlo col mouse sino ad
arrivare alla posizione prescelta.
• Facciamo ora clic sull’icona Tutorial
della finestra
Functions e, dopo aver selezionato il simbolo Digital
Thermometer
, collochiamolo col mouse lateralmente
a sinistra del simbolo misuratore di temperatura.
Il simbolo Digital Thermometer permette di simulare
la lettura di un segnale proveniente da un trasduttore di
temperatura collegato direttamente a una scheda ADC.
• Per poter ripetere ciclicamente il processo di lettura
della temperatura, è necessario inserire nel diagramma a
blocchi la funzione While Loop che permette di
ripetere un certo gruppo di operazioni, sino a che non
venga posta a FALSE la variabile che definisce la
condizione di uscita dal loop. Nel nostro caso faremo in
modo che questa variabile venga posta a False quando
spegniamo lo strumento, intervendo sull’interruttore di
accensione presente sul pannello frontale. Facciamo
quindi clic sull’icona Structures
della finestra
Functions e quindi sul simbolo While Loop
Portiamo il mouse in alto a sinistra della finestra
contenente il diagramma a blocchi e, tenendo premuto il
pulsante sinistro, trasciniamo il mouse verso il basso a
destra della finestra sino a racchiudere tutti i simboli
presenti sul diagramma. La seguente figura mostra
come si presenterà il diagramma dopo aver eseguito
l’operazione appena descritta.
• Per far sì che l’operazione di lettura venga ripetuta ad
intervalli di tempo regolari definiti dal potenziometro
“ritardo”, dobbiamo inserire nel diagramma un timer. Per
fare questo facciamo clic sull’icona Time & Dialog
della finestra Functions e quindi sul simbolo Wait Until
Next ms Multiple
; infine collochiamo questo simbolo a
destra del potenziometro “ritardo”. Tale simbolo creerà un
ritardo espresso in millisecondi. Se vogliamo operare, ad
esempio, con un ritardo compreso tra 0 e 10 secondi, bisogna
pertanto moltiplicare il dato definito col potenziometro
“ritardo” per 1000. Per fare questo basta inserire nel
diagramma una costante numerica e una funzione che
permette di moltiplicare un dato per un certo valore.
• Inserzione della costante numerica
Facciamo clic su Numeric
della Finestra
Functions e quindi su Numeric constant
.
Collochiamo tale costante sotto il simbolo
corrispondente al potenziometro “ritardo”, digitiamo il
numero 1000 e premiamo INVIO del tastierino
numerico.
• Inserzione della funzione moltiplicazione
Facciamo ancora una volta clic su Numeric e quindi sul
simbolo Multiply
e collochiamolo tra il simbolo
del “ritardo” e quello del “timer” secondo come mostrato
nella seguente figura che ci fa vedere come deve
presentarsi il diagramma a blocchi dopo aver eseguito le
operazioni di cui sopra.
• Affinchè il nostro strumento possa funzionare, oltre a
collocare le varie funzioni sul diagramma a blocchi, è
necessario collegare con del “filo” i vari simboli in modo
che i dati possano seguire il percorso necessario per il
funzionamento dello strumento.
Per collegare un simbolo con un altro si usa lo strumento
Wire
della finestra Tools.
Iniziamo a collegare il simbolo “Power” con la variabile che
condiziona il ciclo Do WHILE. Tale variabile è raffigurata
sul diagramma dal simbolo
. Per eseguire la
connessione basta portare il mouse sul rettangolino verde
TF e, dopo aver fatto clic su di esso, trascinare il mouse
sopra il simbolo
ed infine fare di nuovo clic col
pulsante sinistro.
N.B. Quando portiamo il mouse sopra l’oggetto da unire,
questo inizia a lampeggiare, indicando che l’operazione sta
avvenendo in maniera corretta.
Inoltre, ad operazione ultimata, il colore del filo deve
rispecchiare il tipo di dato che trasporta (nel nostro caso,
essendo un dato booleano, è verde). Se invece dovesse
essere nero e tratteggiato, allora significa che abbiamo
collegato tra di loro due simboli sbagliati (ad esempio un
controllo con un controllo), oppure, nel caso di simboli con
più ingressi ed uscite (vedi la funzione moltiplicazione che
moltiplica due dati che devono essere collegati con i suoi
due ingressi) ,abbiamo scelto il terminale sbagliato. Se tutto
ciò dovesse accadere anche nei passaggi descritti più avanti,
basta usare lo strumento Positioning Tool
della finestra
Tools , facendo clic sul collegamento errato e premendo
infine il tasto CANC della tastiera del computer.
Eseguiamo ora i collegamenti tra i seguenti simboli:
1) Icona “Temp” con il “misuratore di temperatura”
N.B Quando portiamo il mouse sopra l’icona Temp,
vengono visualizzati due terminali: uno di ingresso
verde a sinistra, che nel nostro caso non viene utilizzato
e uno di uscita arancione, che deve essere collegato col
simbolo “misuratore di temperatura”.
2) Ingressi funzione moltiplicazione con il simbolo
“ritardo” e la costante numerica 1000.
3) L’uscita della funzione moltiplicazione con l’ingresso
del “timer”.
Il diagramma a blocchi dovrebbe ora presentarsi
secondo come mostrato nella seguente figura:
Possiamo finalmente provare il nostro primo strumento
creato con LABVIEW. A tale scopo eseguiamo le seguenti
operazioni, dopo aver visualizzato il pannello frontale,
facendo clic sulla finestra Untitled 1.
1) Selezioniamo lo strumento Operating Tool
della
finestra Tools e facciamo clic sull’interruttore di accensione
sul pannello frontale.
2) Clicchiamo sull’icona
che si trova appena sotto il
menù principale presente nella finestra Untitled 1. Il
registratore inizierà a registrare “su carta” la temperatura.
Possiamo in qualsiasi istante regolare il ritardo agendo col
mouse sulla manopola del potenziometro “Ritardo”.
3) Per spegnere lo strumento è sufficiente agire
sull’interruttore di accensione oppure sull’icona Abort
Finestra Tools
La finestra Tools contiene degli strumenti che permettono
di eseguire delle operazioni di editing sugli oggetti
presenti all’interno delle due finestre relative al pannello
di controllo e al diagramma a blocchi.
Inoltre sono presenti anche dei simboli che servono per
controllare il funzionamento di uno strumento.
Operating tool
Serve per disporre gli oggetti sul pannello e sul
diagramma a blocchi
Positioning tool
Permette di selezionare e modificare le
dimensioni di un oggetto
Labeling tool
Permette di modificare il testo di un’etichetta e
di crearne delle nuove
Wiring tool
Crea le connessioni tra i vari componenti
Finestra Tools
(segue)
Scrolling tool
Permette di far scorrere orizzontalmente o verticalmente il
contenuto di una finestra
Probe Tool
Permette di leggere il contenuto di una variabile o il
risultato di un’operazione in un punto qualunque del
diagramma a blocchi
Color Copy Tool
Permette di leggere il colore presente in un punto
qualsiasi dello schermo
Coloring Tool
Permette di modificare il colore associato a un oggetto
Che cosa è un SUBVI
Quando un programma scritto in un linguaggio convenzionale diventa complesso, di
solito si cerca di strutturare il codice in modo da suddividerlo in blocchi , o subroutine
(o metodi (JAVA) o funzioni (“C”)), che svolgono determinati compiti. In questo
modo è più semplice la manutenzione del codice; inoltre è possibile riutilizzare le
stesse porzioni di codice anche in altri programmi: basta conoscere il significato delle
variabili di input e di output di ciascuna funzione.
In LABVIEW il contenuto di un diagramma a blocchi, rispetto al listato di un
programma convenzionale, è reso più semplice grazie all’uso di simboli grafici, che
rappresentano delle subroutine, le cui funzioni possono essere anche complesse.
Come abbiamo avuto modo di vedere , LABVIEW ci mette a disposizione una
notevole quantità di simboli (o subroutine) con cui svolgere i compiti più disparati.
Tuttavia può accadere che, a forza di inserire dei simboli all’interno di un diagramma,
quest’ultimo si complichi a tal punto, che sarebbe di aiuto la possibilità di suddividere
il contenuto in più sottoblocchi denominati SUBVI, ciascuno corrispondente ad una
macro subroutine. All’interno di essa saranno racchiusi diversi simboli, in maniera
analoga a quanto accade in un diagramma a blocchi di uno strumento. Inoltre, per
poter essere operativi, oltre a connettere i vari simboli tra di loro in modo da dare un
percorso logico al segnale (ovvero all’elaborazione delle variabili) all’interno del
diagramma, sarà necessario definire quali sono le variabili di input (o connessioni di
input) e le variabili di output (o connessioni di output).
In maniera analoga ai simboli di default, anche i SUBVI si presenteranno sotto forma
di simboli , il cui aspetto potrà essere definito graficamente dall’utente e potranno
essere inseriti all’interno di qualsiasi diagramma a blocchi, in modo da riutilizzare le
stesse porzioni di diagramma.
Creazione di un SUBVI
Vogliamo creare un SUBVI per l’acquisizione di una temperatura da un
trasduttore. A tale scopo la prima cosa da fare è quella di realizzare il programma
in maniera analoga a quanto fatto precedentemente per un normale strumento
virtuale (o VI) . La seguente figura ne mostra il diagramma a blocchi e il
corrispondente pannello frontale.
Al valore della temperatura viene sommato un numero casuale, in modo da
sovrapporre al segnale un rumore, che di solito è presente sperimentalmente
quando il segnale è molto basso.
Per poter funzionare , lo strumento non ha bisogno di alcun parametro di input,
mentre, come output, esso restituisce il valore della temperatura; pertanto il
pannello frontale mostrerà solo un indicatore. In altri termini, se dovessimo
immaginare di utilizzare il diagramma a blocchi come una subroutine, a
quest’ultima non avremo bisogno di passare alcuna variabile di input, mentre
essa restituirà il valore associato a T. Tutto ciò equivale a scrivere:
T1=T1sub();
Vediamo ora quali sono i passi successivi per realizzare un SUBVI a partire dal
VI appena creato.
Creazione di un SUBVI(segue)
1) Associazione di un simbolo al VI.
Per poter poi utilizzare il SUBVI in maniera analoga a quanto fatto con i simboli
presenti nella finestra FUNCTIONS (di fatto ciascun simbolo è equivalente a una
subroutine nella programmazione convenzionale e a un SUBVI in LABVIEW), è
necessario associare ad esso un’icona grafica . A tale scopo, dopo aver attivato la
finestra del pannello frontale, facciamo clic col pulsante destro del mouse in alto a
destra e precisamente sull’icona mostrata nella seguente figura, che non è altro che il
simbolo di default associato inizialmente a un VI dal LABVIEW.
Al comparire di un sottomenù selezioniamo la voce EDIT ICON. Comparirà la
seguente finestra che ci permetterà di definire graficamente il simbolo da associare al
SUBVI.
Useremo poi tale simbolo per inserire il SUBVI all’interno del diagramma a blocchi di
uno strumento virtuale, in maniera analoga a quanto facciamo quando inseriamo
dell’icone scelte all’interno della finestra FUNCTIONS, che rappresentano i vari
SUBVI disponibili di default in LABVIEW.
Creazione di un SUBVI(segue)
Utilizziamo gli strumenti grafici disponibili nella finestra ICON EDITOR per
disegnare un’icone che rappresenti, in qualche modo, la funzione svolta dal
SUBVI. Sono disponibili, nell’ordine, i seguenti strumenti:
Matita utilizzata per disegnare a mano libera
Retta traccia una retta tra due punti
Contagocce permette di impostare il colore
prelevandolo da un punto qualsiasi dello schermo
Secchiello riempie un’area chiusa con un colore
Rettangolo traccia un poligono rettangolare non
colorato
Rettangolo pieno traccia un poligono
rettangolare colorato
Rettangolo tratteggiato permette di selezionare una porzione
di grafico; può, ad esempio, essere utilizzato inizialmente per
ripulire la finestra grafica premendo semplicemente il tasto
CANC
Testo permette di inserire del testo
Creazione di un SUBVI(segue)
Una volta disegnato il simbolo e fatto clic su OK, verrà visualizzato il nuovo simbolo
in alto a destra della finestra PANNELLO, come mostra la seguente figura.
2) Definizione delle connessioni di input e di output
Dobbiamo ora associare ciascuna variabile di input (o CONTROLLO) e di
output (o INDICATORE) a un punto di connessione, in modo poi da collegare
correttamente il SUBVI con gli altri componenti presenti nel diagramma a
blocchi dello strumento virtuale che utilizzerà il nostro SUBVI.
A tale scopo facciamo di nuovo clic, col pulsante destro, sul simbolo appena
creato e selezioniamo la voce SHOW CONNECTOR.
Il simbolo appena creato verrà sostituito con un nuovo simbolo suddiviso in un
ben definito numero di aree rettangolari corrispondente al n. di variabili di
input e di output definite nel SUBVI. Nel nostro caso avremo solo un’area, in
quanto è stata definita soltanto una variabile di output (l’indicatore T1).
Contemporaneamente il mouse assumerà l’aspetto del rocchetto di filo, che ci
permetterà di associare a ciascuna area rettangolare un CONTROLLO o un
INDICATORE, facendo semplicemente dapprima clic su un rettangolino e poi
su un CONTROLLO o su un INDICATORE e infine facendo di nuovo clic su
quest’ultimo. Naturalmente l’operazione deve essere ripetuta per ciascun
CONTROLLO o INDICATORE presente sul pannello frontale.
Creazione di un SUBVI(segue)
3) Documentazione del SUBVI
Per poter conoscere, in qualsiasi momento, le funzioni svolte da un SUBVI e il
significato di ciascun connettore, conviene descrivere dettagliatamente tali
informazioni all’interno del SUBVI, in maniera a quanto viene fatto nella
programmazione convenzionale, quando si inseriscono dei commenti all’interno di un
listato.
A tale scopo utilizziamo la voce VI PROPERTIES del menù FILE. Comparirà la
seguente finestra:
Dopo aver selezionato la CATEGORIA Documentation, comparirà una nuova
finestra di dialogo che ci permetterà di descrivere dettagliatamente le funzioni svolte
dal SUBVI e il significato di ciascun connettore. Quando inseriremo il SUBVI
all’interno di un diagramma a blocchi, tali informazioni saranno visualizzate sullo
schermo se facciamo clic sul simbolo del SUBVI e se abbiamo attivato l’opzione
SHOW CONTEXT HELP del menù HELP.
Creazione di un SUBVI(segue)
4)Memorizzazione del SUBVI e sua riutilizzazione all’interno di un
diagramma a blocchi
Una volta che abbiamo terminato le operazioni precedenti, memorizziamo sul
dischetto il SUBVI.
Per poterlo riutilizzare all’interno del diagramma a blocchi di un nuovo
strumento virtuale, è sufficiente utilizzare la funzione SELECT VI disponibile
nella finestra FUNCTIONS , come mostra la seguente figura:
SELECT VI
Utilizzazione della struttura
For … Next
Esempio 1: Acquisizione di N dati
Programma convenzionale
int n=20;
double T;
int i;
for (i=0;i<n;i++)
{
visualizza(i);
T=leggi_T();
visualizza(T);
}
Diagramma a blocchi
Utilizzazione della struttura
For … Next (segue)
Esempio 2: acquisizione di N dati e calcolo del valore medio.
Per poter calcolare il valore medio di N letture, è necessario dapprima
memorizzare i dati all’interno di una variabile vettore (o array) e poi, una
volta che il ciclo ha terminato il suo compito, passare quest’ultima come
variabile di input al simbolo MEDIA , ovvero a una subroutine che ricava il
valore medio di una serie di dati.
Per fare questo è necessario inserire sul simbolo del ciclo for..next un
rettangolino denominato TUNNEL, che viene creato automaticamente da
LABVIEW, quando si connette l’uscita del segnale acquisito con il simbolo
del valore medio. Il TUNNEL non fa altro che permettere ai dati di uscire dal
ciclo e di giungere alla subroutine MEDIA.
Utilizzazione della struttura
For … Next (segue)
Programma convenzionale
int n=20;
double [] T=new double[n+1];
int i;
for (i=0;i<n;i++)
{
visualizza(i);
T[i]=leggi_T();
visualizza(T[i]);
}
double media=calcola_media(T);
visualizza(media);
Diagramma a blocchi
Calcola media
Tunnel:
rappresenta l’uscita
dei dati dal ciclo for
.. next
Utilizzazione della struttura
For … Next (segue)
Esempio 3: acquisizione di N dati con trasferimento del contenuto di una variabile
da un ciclo a quello successivo.
Alcune volte è necessario riutilizzare nei cicli successivi il valore associato a una
variabile calcolato nel ciclo precedente. A tale scopo LABVIEW ci mette a
disposizione i cosiddetti SHIFT REGISTER che permettono di memorizzare
temporaneamente il contenuto di una variabile in modo da renderla disponibile al
ciclo successivo. Per fare questo , tramite la pressione del pulsante destro del
mouse ovvero tramite l’opzione ADD SHIFT REGISTER, vengono inseriti due
rettangolini ai lati del simbolo del ciclo , contenenti al loro interno due frecce , di
cui una rivolta verso l’alto e l’altra verso il basso. La prima sta ad indicare che il
dato esce dal ciclo corrente e la seconda che immette il contenuto della stessa
variabile nel ciclo successivo.
Utilizzazione della struttura
For … Next (segue)
Programma convenzionale
int n=20;
double T;
double Tmax=0;
int i;
for (i=0;i<n;i++)
{
visualizza(i);
T=leggi_T();
visualizza(T);
if(T>Tmax)
Tmax=T;
visualizza(Tmax);
}
Diagramma a blocchi
Il simbolo
Dato che la variabile che
viene passata, Tmax, deve
essere inizializzata con il
valore 0, allora si usa
inizializzare lo shift register
di sinistra collegandolo con
la costante numerica 0.0
Shift register
Trasmettono il valore
di Tmax da un ciclo al
successivo
disponibile tra le funzioni
di CONFRONTO, permette
di eseguire una istruzione di
salto condizionato:
all’uscita troviamo il valore
associato all’ingresso t se s
è TRUE, altrimenti il valore
associato all’ingresso f se s
è FALSE.
Ciclo Do …. While
Programmazione convenzionale
double r;
do
{
r=random();//genera un numero casuale
visualizza(r);
ritardo(500);
}while (power=true);
Diagramma a blocchi
Strutture IF .. ELSE IF …ENDIF e
SELECT .. CASE
La struttura IF … ELSE IF …ENDIF e la struttura SELECT … CASE sono
rappresentate in LABVIEW da due o più aree rettangolari sovrapposte.
Ciascuna area viene utilizzata per contenere la porzione di codice da eseguire,
relativamente al verificarsi di una determinata condizione , definita tramite il
terminale di selezione.
Il valore di una variabile o il risultato di una operazione viene dapprima passato al
terminale di selezione e poi confrontato con il valore rappresentato in alto ,
delimitato da due freccette. Se il confronto ha un esito positivo allora viene
eseguito il codice sottostante, altrimenti verrà eseguito il codice contenuto in
quell’area rettangolare che soddisfa la condizione.
Per far funzionare correttamente la struttura IF .. ELSE..ENDIF è necessario prima
definire tutte le operazioni associate alle varie condizioni.
Inoltre, per spostarsi tra le varie condizioni, è sufficiente fare clic in alto sulle
freccette laterali.
Struttura IF .. ELSE .. ENDIF
(esempi)
Esempio 1: somma e sottrazione di due numeri.
Viene eseguita la somma o la sottrazione di due numeri a seconda se, tramite
un deviatore disposto sul pannello frontale, viene scelta l’operazione di
somma oppure quella di sottrazione
Diagramma a blocchi
Programma convenzionale
double x=0.5;
double y=1.2;
double ris;
boolean somma=TRUE;
If(somma==TRUE)
ris=x+y;
else
ris=x-y;
Visualizza(ris);
Struttura IF .. ELSE .. ENDIF
(esempi)
Esempio 2: Divisione di due numeri.
Vengono divisi tra di loro x e y, dopo aver controllato se y=0. Se lo è, viene
visualizzato il simbolo di infinito.
Programma convenzionale
double x=0.5;
double y=1.2;
double ris;
If(Y==0)
ris=+infinito;
else
ris=x/y;
Visualizza(ris);
OSSERVAZIONE
Se in un’area rappresentante il verificarsi di una
determinata condizione viene passata esternamente il
risultato di una operazione tramite il cosiddetto tunnel,
allora anche nelle altre aree deve essere passato qualcosa
per lo stesso tunnel, che non necessariamente utilizza le
stesse variabili, altrimenti il rettangolino raffigurante il
tunnel sarà colorato in bianco invece che in arancione,
ad evidenziare che c’è un errore.
Diagramma a blocchi
Struttura FORMULA NODE
La struttura FORMULA NODE permette di inserire, all’interno di un
diagramma a blocchi, una sequenza di istruzioni scritte in un linguaggio assai
simile al “C”. Si presenta come un’area rettangolare di dimensioni variabili.
Per poter funzionare correttamente, è necessario definire quali sono le variabili
di input e di output, associando a ciascuna di esse un rettangolino ai lati
dell’area (a sinistra se di input e a destra se di output) tramite le voci ADD
INPUT e ADD OUTPUT del menù, che compare quando si clicca col pulsante
destro sulla struttura stessa.
Nel seguente diagramma a blocchi è riportato un esempio in cui viene
calcolato il valore della funzione y=x-e*sin(x).
OSSERVAZIONI
•La struttura FORMULA NODE è molto comoda per implementare velocemente
semplici porzioni di codice specie per chi sa già programmare in “C” o in
linguaggi da esso derivati (es. JAVA). E’ inoltre molto comoda per valutare il
risultato di espressioni numeriche.
•A ciascuna variabile utilizzata all’interno di FORMULA NODE deve essere
impostata o come variabile di input o come variabile di output, anche se poi essa
non viene utilizzata esternamente alla struttura, ma solo per eseguire dei calcoli
intermedi.
STRUTTURA SEQUENZA
Alcune volte può risultare utile eseguire più gruppi di operazioni in maniera
sequenziale, proprio come avviene in un programma convenzionale complesso.
Se associamo a ogni gruppo un diagramma a blocchi, possiamo pensare di
realizzare uno strumento il cui il diagramma a blocchi di fatto è costituito da più
sottodiagrammi, che vengono eseguiti uno dopo l’altro.
Per fare questo il programma LABVIEW ci mette a disposizione la struttura
SEQUENZA, la cui forma nel diagramma è rappresentata dalla seguente figura
Ciascun sottodiagramma viene inserito all’interno di un’area rettangolare
denominata FRAME. Per passare da un FRAME a quello successivo, è
sufficiente fare clic in alto sulle freccette accanto all’etichetta in cui viene
mostrato sia il n. del FRAME corrente, che il n. totale di FRAME di cui è
costituita la SEQUENZA.
STRUTTURA SEQUENZA
(ESEMPI)
Esempio 1: Gestione di un dosimetro automatico
Sono reperibili in commercio dei dosimetri che permettono di eseguire delle
titolazioni controllandole tramite computer.
Esiste ad esempio un caso in cui lo sgocciolamento del liquido viene gestito
semplicemente inviando una sequenza di impulsi.
Nel seguente strumento VI viene simulato l’invio di una serie di impulsi a
un dosimetro automatico, utilizzando la struttura SEQUENZA. Il dosimetro
viene simulato con un led che dapprima si accende per un determinato
tempo e poi si spegne.
OSSERVAZIONE
Per gestire realmente un dosimetro in laboratorio, sarebbe sufficiente
inserire, all’interno della sequenza, dei simboli che rappresentano il
collegamento reale tra una scheda di acquisizione DAQ connessa tra il
computer e il dosimetro.
STRUTTURA SEQUENZA
Gestione di un dosimetro
automatico(segue)
Local variable
OSSERVAZIONE
Per poter utilizzare lo stesso
INDICATORE (ovvero la variabile
associata al led) più volte all’interno
della struttura SEQUENZA, è
necessario creare dapprima delle copie
dell’indicatore tramite l’opzione
CREATE LOCAL VARIABLE. Per
fare questo è sufficiente cliccare col
pulsante destro sul simbolo
dell’indicatore all’interno del
diagramma a blocchi e quindi
selezionare la voce CREATE LOCAL
VARIABLE.
STRUTTURA SEQUENZA
Gestione di un dosimetro
automatico(segue)
Il seguente strumento VI è una modifica di quello precedente: sono stati
aggiunti alcuni parametri relativi alla quantità di liquido da sgocciolare.
Programma convenzionale
double viniz=0.0;
double vfin=50.0;
double deltav=0.5;
double vattuale;
boolean cicla=true;
vattuale=viniz;
do
{
visualizza(vattuale);
vattuale=vattuale+deltav;
if(vattuale<=vfin)
sburetta();
else
cicla=false;
}while(cicla==true);
GRAFICI
LABVIEW mette a disposizione dei simboli che permettono di implementare uno
strumento virtuale con dei monitor grafici con cui rappresentare i dati sperimentali.
Esistono due differenti modi per generare un grafico:
Modo CHART
Il grafico viene generato tracciando un punto
dopo l’altro man a mano che il relativo dato si
rende disponibile. Equivale ad utilizzare un
registratore a carta.
Viene utilizzato il simbolo denominato
WAVEFORM CHART del sottomenù GRAPH.
Il grafico viene creato una volta che sono stati
acquisiti tutti i dati. Esistono due diversi tipi di
grafici:
Modo GRAPH
• nel primo caso il simbolo viene denominato
WAVEFORM GRAPH e i dati vengono
visualizzati distribuendoli in modo uniforme
rispetto all’asse delle x, ovvero utilizzando tra
un dato e il successivo lo stesso intervallo, il cui
valore di default è 1, mentre il valore iniziale è
0. Naturalmente è possibile modificare tali
valori.
•Il secondo caso invece corrisponde alla
classica rappresentazione XY di dati in cui y è
una funzione di x.
N.B. In entrambi i casi è possibile visualizzare
più serie di dati contemporaneamente.
OSSERVAZIONE
Tramite degli accorgimenti che vedremo più avanti, è possibile tracciare i dati XY
graficamente ANCHE man a mano che vengono acquisiti!
Grafici : Modo CHART
(Esempi)
Esempio 1: Rappresentazione grafica di un dato che varia casualmente nel
tempo. Sull’asse delle X viene riportato il tempo espresso in secondi e
sull’asse delle y il valore numerico associato al dato.
Programma convenzionale
double r;
double rit=0.3;//ritardo in S
boolean power=TRUE;
do
{
r=random();
visualizza(r);
ritardo(rit);
}while(power==TRUE);
Diagramma a blocchi
Quando il tempo trascorso ha raggiunto il valore massimo impostato sull’asse dei tempi, il grafico viene fatto scorrere
orizzontalmente da destra a sinistra, in modo da permettere la visualizzazione dei dati successivi, proprio come avviene in
un registratore a carta in cui la carta scorre man a mano che viene tracciato il grafico.
Gli estremi degli assi x e y possono essere modificati facendo semplicemente clic su di essi ed introducendo il nuovo
valore tramite tastiera. (N.B. Deve essere attivo lo strumento TESTO della finestra TOOLS !).
Inoltre , se si seleziona un asse e si fa clic col pulsante destro del mouse, viene visualizzato sullo schermo un sottomenù,
che permette di intervenire su diversi parametri come l’autoscaling, il n. di tacche, il n. di decimali, ecc. E’ addirittura
prevista la possibilità di leggere direttamente sul grafico i valori cliccando semplicemente col mouse.
Grafici : Modo CHART
(Esempi)(segue)
Esempio 2: Utilizzazione del modo CHART per visualizzare più grafici
contemporaneamente.
In questo esempio vengono acquisiti i segnali provenienti da due trasduttori di
temperatura e visualizzati contemporaneamente sul grafico. Per fare questo la
subroutine associata al simbolo WAVEFORM CHART ha bisogno, come input, di una
struttura dati denominata CLUSTER, formata dall’insieme dei dati corrispondenti ai
segnali provenienti dai due trasduttori. Tale funzione si chiama BUNDLE ed è
disponibile nel sottomenu CLUSTER della finestra FUNCTIONS.
y1
y2
Output (y1,y2)
OSSERVAZIONI
•La struttura CLUSTER assomiglia alla struttura ARRAY (o
MATRICE); entrambi permettono di raggruppare una o più serie di dati:
nel primo caso i dati possono essere anche di tipo diverso, mentre nel
secondo caso devono essere dello stesso tipo.
•Il programma utilizza due SUBVI , denominati SUBT1 e SUBT2, che
permettono di simulare l’acquisizione di due temperature T1 e T2I il
primo è già stato descritto precedentemente nel capitolo SUBVI, mentre
il secondo non è altro che il primo leggermente modificato, in modo da
avere un valore di T un po’ diverso.
Grafici : Modo CHART
(Esempi)(segue)
Programma convenzionale
double T1,T2;
boolean power=TRUE;
double rit;
do
{
T1=subv1();
T2=subv2();
visualizza(T1,T2);
ritardo(rit*1000);
}
Grafici : Modo GRAPH
(Esempi)
Esempio 1: Utilizzazione del modo GRAPH per visualizzare la forma d’onda
proveniente da un determinato strumento. Il valore iniziale della x è 0, mentre
l’intervallo con cui sono spaziati i dati è 1.
La subroutine WAVEFORM GRAPH ha bisogno, come input, di un vettore
contenente la serie di dati da visualizzare. Un modo molto semplice è quello di
generare una serie di dati mediante un’iterazione FOR … NEXT oppure un ciclo DO
.. WHILE. Teniamo presente che il grafico viene tracciato una volta che il ciclo FOR
.. NEXT è terminato.
Grafici : Modo GRAPH
(Esempi)(segue)
Esempio 2: Visualizzazione di una forma d’onda in cui sia il valore iniziale delle
x che l’intervallo hanno un valore diverso da quelli impostati per default.
In questo caso è necessario inviare alla subroutine WAVEFORM GRAPH una
struttura dati di tipo CLUSTER che, oltre ai dati, contenga i valori relativi a x 0 e
a Dx. Nell’esempio è stato posto x0=0 e Dx=0.1. Per creare il CLUSTER viene
usata la funzione BUNDLE, dopo aver modificato le sue dimensioni col mouse ,
in modo da raggruppare 3 entità di dati di input.
MODO GRAPH
Simulazione dell’acquisizione di una
tensione di vapore
Esempio 3: Simulazione dell’acquisizione di una tensione di vapore.
In questo esempio viene utilizzato il SUBVI CLAPEYRONSUBVI per
simulare la lettura di una tensione di vapore da un trasduttore di pressione.
Inoltre è stato sovrapposto al segnale un rumore gaussiano , in modo da
“introdurre un po’ di rumore sperimentale”. Se si volesse eseguire la misura
realmente, sarebbe sufficiente sostituire questo SUBVI con un altro che
permetta di acquisire il segnale dal trasduttore tramite una scheda di
acquisizione DAQ .(Vedi SCHEDE DI ACQUISIZIONE DAQ).
OSSERVAZIONE
Come mostra il pannello frontale, è stato attivato il cursore grafico, in modo
da leggere i valori x,y direttamente sul grafico.
MODO GRAPH
Simulazione dell’acquisizione di una
tensione di vapore (segue)
SUBVI Clapeyron
MODO GRAPH
Simulazione dell’acquisizione di una
tensione di vapore (segue)
DIAGRAMMA A BLOCCHI
PROGRAMMA CONVENZIONALE
Double Tiniz=10.0;
double Tfin=100.0;
double deltaT=1.0;
double N=1+(Tfin-Tiniz)/deltaT;
double [] pi=new double[N+1];
double [] Ti=new double[N+1];
double T=Tiniz;
int i;
for(i=0;i<N;i++)
{
p[i]=leggi_pressione(T);
T[i]=T;
T=T+deltaT;
}
visualizza(T,P);
MODO GRAPH (ESEMPI)(segue)
Esempio XX :Un trucco per utilizzare il GRAPH, in modo da visualizzare un
grafico durante l’acquisizione dei dati.
Come abbiamo descritto precedentemente, il modo CHART non permette di
visualizzare un grafico XY, bensì una serie di dati, man a mano che vengono
acquisiti, in cui la x parte da un valore predefinito e aumenta con un incremento
costante. Anche se ciò è possibile col metodo GRAPH,, tuttavia quest’ultimo
visualizza il grafico dopo che sono stati acquisiti tutti i dati.
Questo esempio utilizza un SUBVI disponibile nel pacchetto LABVIEW, che
permette di realizzare dei grafici XY in tempo reale, pur utilizzando il modo
GRAPH. E’ sufficiente inserire nel diagramma a blocchi il SUBVI denominato XY
CHART BUFFER. Per fare questo bisogna dapprima selezionare la voce SELECT
A VI della finestra FUNCTIONS e poi selezionare il file charts.llb dal seguente
percorso: c:\programmi\national instrument\labview 6
SE\examples\general\graphs.
Il file charts.llb è una libreria di SUBVI, per cui, una volta selezionato, comparirà
la seguente finestra, che ci permette di selezionare il file XY Chart Buffer.vi.
MODO GRAPH (ESEMPI)(segue)
Esempio 4 :Un trucco per utilizzare il GRAPH, in modo da visualizzare un grafico
durante l’acquisizione dei dati.
Come abbiamo descritto precedentemente, il modo CHART non permette di
visualizzare un grafico XY, bensì una serie di dati, man a mano che vengono
acquisiti, in cui la x parte da un valore predefinito e aumenta con un incremento
costante. Anche se ciò è possibile col metodo GRAPH,, tuttavia quest’ultimo
visualizza il grafico dopo che sono stati acquisiti tutti i dati.
Questo esempio utilizza un SUBVI disponibile nel pacchetto LABVIEW, che
permette di realizzare dei grafici XY in tempo reale, pur utilizzando il modo
GRAPH. E’ sufficiente inserire nel diagramma a blocchi il SUBVI denominato XY
CHART BUFFER. Per fare questo bisogna dapprima selezionare la voce SELECT
A VI della finestra FUNCTIONS e poi selezionare il file charts.llb dal seguente
percorso: c:\programmi\national instrument\labview 6
SE\examples\general\graphs.
Il file charts.llb è una libreria di SUBVI, per cui, una volta selezionato, comparirà
la seguente finestra, che ci permette di selezionare il file XY Chart Buffer.vi.
MODO GRAPH (ESEMPI)(segue)
Al SUBVI xy chart buffer è stata assegnata la seguente icona:
Il principio di funzionamento di tale VI è quello di memorizzare
temporaneamente i dati in una memoria denominata buffer e di ingannare la
subroutine XY GRAPH, inviando una coppia di dati alla volta e facendogli
considerare tale coppia come se fosse l’unica serie di dati da graficare.
Se il buffer non viene cancellato, i dati vengono accumulati, man a mano che
sono visualizzati sino a riempirlo.
Per ripetere da capo l’operazione è necessario azzerare il contenuto della
memoria utilizzando il connettore clear first, come descritto qui di seguito.
Il significato delle variabili di input e di output utilizzate in questo esempio è il
seguente:
PARAMETRI DI INPUT
new point
qui va inviata la variabile matrice xy[1][2] contenente la coppia di dati X i,Yi da
visualizzare all’istante i
Chart length
n. totale di punti da acquisire e da graficare
Clear first
variabile booleana; se posta uguale a TRUE, il buffer viene cancellato
PARAMETRI DI OUTPUT
XY chart data
Qui sono disponibili i dati da inviare alla subroutine XY GRAPH, una coppia
alla volta.
MODO GRAPH :Simulazione di uno
spettrofotometro UV-VIS
La seguente figura mostra il VI di un semplice spettrofotometro UV-VIS.
L’acquisizione viene fatta simulando il segnale proveniente da un trasduttore
ottico posto lungo il cammino ottico. A tale scopo viene usato il SUBVI
LEGGIDENS_SUB, descritto più avanti. Naturalmente nulla vieta di sostituire
tale SUBVI con uno che acquisisce il segnale da uno spettrofotometro reale
collegato al comnputer tramite una scheda di acquisizione DAQ.
MODO GRAPH :Simulazione di uno
spettrofotometro UV-VIS(segue)
PROGRAMMA CONVENZIONALE
double lambda_iniz=400;
double lambda_fin=700;
double delta=0.5;
double intensita=0;
boolean stop=FALSE;
double lambda=lambda_iniz;
azzera_buffer();
do
{
intensita=leggi_dens(lambda);
visualizza(lambda,intensita);
if(lambda<lambda_fin)
lambda=lambda+delta;
}while(stop==FALSE);
SUBVI LEGAGI_DENS
MODO GRAPH :Simulazione di uno
spettrofotometro UV-VIS(segue)
DIAGRAMMA A BLOCCHI
ELABORAZIONE NUMERICA DATI
Come abbiamo accennato all’inizio, LABIEW mette a disposizione una notevole
quantità di subroutine (o SUBVI) per eseguire i compiti più disparati, che sono tutti
ben documentati sui manuali presenti sul CD.
In particolare esistono dei SUBVI , che permettono di analizzare una serie di dati
sperimentali e di elaborarli , utilizzando le più note procedure matematiche.
I simboli corrispondenti sono disponibili nella finestra FUNCTIONS sotto i gruppi
ANALYZE e MATHEMATICS. Vi è addirittura la possibilità di elaborare i dati
utilizzando delle procedure scritte in MATLAB.
ESEMPIO N. 1: Utilizzazione del metodo dei minimi quadrati per il calcolo della
miglior retta passante per dei dati sperimentali.
In questo esempio vengono creati due CONTROLLI e un INDICATORE di tipo
VETTORE (o ARRAY) , che vengono utilizzati per immettere direttamente da
tastiera i dati da elaborare e per visualizzare i risultati del calcolo.
Successivamente vedremo come sia possibile elaborare i dati man a mano che
vengono acquisiti da uno strumento.
Per eseguire il calcolo col metodo dei minimi quadrati è sufficiente inserire ,
all’interno del diagramma a blocchi il SUBVI LINEAR FIT.VI.
ELABORAZIONE NUMERICA DATI
(segue)
N.B. Per inserire un ARRAY come CONTROLLO o come INDICATORE nel pannello
frontale di uno pannello, è necessario eseguire le seguenti operazioni:
1) Selezioniamo il sottomenù ARRAY & CLUSTER e quindi ARRAY all’interno della
finestra CONTROLS. Successivamente collochiamo col mouse l’ARRAY sul
pannello. Tale ARRAY non è altro che un contenitore vuoto; dobbiamo poi riempirlo
con degli elementi. Nella programmazione convenzionale è come se avessimo
dichiarato il nome di un array e non lo avessimo ancora inizializzato definendo il tipo
di variabile e le sue dimensioni.
2) Per definire il contenuto dell’ARRAY inseriamo all’interno un oggetto di tipo
numerico prendendolo dal menù NUMERIC della finestra CONTROLS. L’area
dell’ARRAY si adatterà all’elemento appena introdotto. Abbiamo così ottenuto un
ARRAY a una dimensione contenente un solo valore. Per aggiungere altri elementi
utilizziamo il mouse per ingrandire verticalmente l’area dell’ARRAY.
DIAGRAMMA A BLOCCHI
ELABORAZIONE NUMERICA
Misure sperimentali di una tensione di
vapore e relativa elaborazione dei dati
in tempo reale
Il seguente pannello virtuale è una modifica di quello visto precedentemente per
la lettura simulata di una tensione di vapore. Oltre a visualizzare i dati
sperimentali come diagramma p/T, è stato aggiunto un altro monitor grafico che
riporta il risultato del calcolo dei minimi quadrati adattando ai dati,
opportunamente modificati, la nota equazione di Clapeyron
lnP = A – DeltaHvap/RT
Le modifiche sono state fatte semplicemente inserendo sul pannello un display
grafico XY e richiamando, all’interno del diagramma a blocchi, la subroutine
MINQUADSUBVI descritta qui di seguito.
ELABORAZIONE NUMERICA
Misure sperimentali di una tensione di
vapore e relativa elaborazione dei dati
in tempo reale (segue)
ELABORAZIONE NUMERICA
Misure sperimentali di una tensione di vapore e
relativa elaborazione dei dati in tempo reale
(subvi MINQUADSUB)
CONTROLLO DI PROCESSI
INDUSTRIALI DI LABORATORIO
LABVIEW può essere utilizzato per monitorare il funzionamento di un processo
industriale di laboratorio. A tale scopo è sufficiente collegare al computer una scheda
di acquisizione DAQ , che permette di gestire, ad esempio, i seguenti aspetti tecnici:
•Il controllo di una o più temperature tramite l’acquisizione dei relativi segnali
provenienti dai trasduttori di temperatura inseriti in quelle parti dell’impianto, in cui
deve essere monitorata la temperatura.
•La gestione delle eventuali valvole di apertura e chiusura di un flusso di vapore (o
di liquido)
•Il controllo delle eventuali pompe
•Il monitoraggio della pressione tramite l’acquisizione del segnale proveniente da un
trasduttore di pressione.
Le seguenti figure riportano due esempi di applicazione in cui il processo viene
controllato da LABVIEW. Gli esempi simulano il comportamento di una scheda
DAQ e sono disponibili nella sezione DEMONSTRATION/PROCESS CONTROL
di ESEMPI.
CONTROLLO DI PROCESSI
INDUSTRIALI (segue)
Nel primo esempio vengono introdotti due fluidi in un contenitore, dopodichè
essi vengono riscaldati per un determinato tempo. Infine il prodotto viene
pompato all’interno di un altro contenitore.
Nel secondo esempio viene simulato il processo di riempimento di un
contenitore con controllo dei seguenti parametri:
•Velocità di flusso del fluido in entrata
•Temperatura del fluido in entrata
•Temperatura di riscaldamento
CONTROLLO DI PROCESSI
INDUSTRIALI
Realizzazione di un semplice processo
In questa figura è riportato il pannello frontale di uno strumento che permette di
controllare il riempimento di un contenitore con un fluido e il relativo riscaldamento
ad una data temperatura. Per realizzarlo, sono stati usati alcuni CONTROLLI e
INDICATORI con semplici operazioni di COPIA e INCOLLA sull’esempio riportato
nella pagina precedente (CONTROL MIXER PROCESS).
Realizzazione di un semplice processo
(segue)
Programma convenzionale
boolean t12=false;
boolean valv1=false;
boolean heater=false;
double viniz=0;
double deltav=1;
double vfin=3000;
double Tiniz=25;
double Tfin=135;
double deltaT=1;
boolean full=false;
double T=Tiniz;
double V=viniz;
boolean power=true;
do
{
visualizza(V);
if(valv1==true)
{
t12=true;
if(v<vfin)
v=v+deltav;
if(v>=vfin)
full=true;
}
else
{
t12=false;
}
visualizza(T);
if(heater==true)
{
if(T<Tfin)
T=T+deltaT;
}
}while (power==true);
Realizzazione di un semplice processo
(segue)
Un altro esempio di un semplice
processo industriale
In questo esempio viene realizzato uno strumento che permette di controllare il
mescolamento di due sostanze liquide e di riscaldare il prodotto ad una data
temperatura.
In pratica si inizia ad aprire la valvola valv1, in modo da immettere all’interno del
contenitore Mixer una certa quantità della prima sostanza; dopodichè si chiude la
valvola valv1, si apre la valvola valv2 e si fa partire la pompa pump1, in modo da
pompare la seconda sostanza all’interno del contenitore. Quando il processo di
riempimento è terminato, si chiude la valvola valv2 e si spegne la pompa pump1;
dopodichè si accende il riscaldatore.
Anche in questo caso sono stati usati alcuni CONTROLLI e
INDICATORI con semplici operazioni di COPIA e INCOLLA
sull’esempio CONTROL MIXER PROCESS.
Un altro esempio di un semplice
processo industriale (segue)
Pur essendo limitate le operazioni da compiere, tuttavia il diagramma a blocchi
risulta essere piuttosto complesso. Per comprenderlo meglio è bene prima dare
uno sguardo alle istruzioni presenti nel corrispondente programma convenzionale
Programma convenzionale
//definizioni variabili
boolean t12=false;
boolean t22=false;
boolean t23=false;
boolean valv1=false;
boolean valv2=false;
boolean pump1=false;
double viniz1=0;
double deltav1=1;
double deltav2=10;
double vfin1=500;
double vfin2=2500;
double vmix=3000;
double Tiniz=25;
double Tfin=135;
double deltaT=1;
boolean full=false;
boolean heater=false;
double T=Tiniz;
double V=viniz1;
boolean ciclo1=true;
//inizio sequenza 1
do
{
visualizza(V);
if(valv1==true)
{
t12=true;
if(V<vfin1)
V=V+deltav1;
if(V>=vfin1)
ciclo1=false;
}
else
{
t12=false;
}
}while (ciclo1==true);
Un altro esempio di un semplice
processo industriale (segue)
//Inizio sequenza 2
boolean ciclo2=true;
do
{
visualizza(V);
if(valv2==true);
{
pump1=true;
t22=true;
t23=true;
if(V<vmix)
V=V+deltav2;
if(V>=vmix)
full=true;
}
else
{
pump1=false;
t22=false;
t23=false;
}
visualizza(T);
if(heater==true)
{
if(T<Tfin)
T=T+deltaT;
if(T>=Tfin)
ciclo2=false;
}
}while(ciclo2==true);
Il listato è stato suddiviso in due parti che corrisponderanno a due sottodiagrammi
della struttura SEQUENZA nel diagramma a blocchi visualizzato nella pagina
successiva. Inoltre sarà necessario utilizzare due nuove tipi di variabili denominate
SEQUENCE LOCAL, che permetteranno di trasferire i valori associati a T e a V da
una sequenza a quella successiva. Per fare questo, dapprima è necessario fare clic col
pulsante destro del mouse sul simbolo di SEQUENZA e poi, al comparire di un
sottomenù, selezionare la voce ADD SEQUENCE LOCAL.
Infine, sono state create delle variabili LOCAL VARIABLE, laddove un determinato
INDICATORE e/o CONTROLLO viene utilizzato più di una volta nel diagramma.
Un altro esempio di un semplice processo
industriale (segue)
Diagramma a blocchi : SEQUENZA 1
Un altro esempio di un semplice processo
industriale (segue)
Diagramma a blocchi : SEQUENZA 2
Scarica

seguente link