LabView :
Nota: Queste pagine saranno spostate
su bitportal.it
Vai ora su bitportal.it
Linguaggio di programmazione grafico per l'elettronica ed oltre
Lezione 3: Cicli FOR e cicli WHILE
Forum
- Per qualsiasi tipo di problema riguardante Labview, per conoscere
le difficoltà che hanno incontrato altre persone, non esitare ad entrare
nel forum e ad esporre i tuoi dubbi.
Sarai il benvenuto.
- Entra nel Forum
Introduzione ai cicli
Struttura essenziale di ogni programma sono sicuramente i cicli!! Ogni volta
che si deve ripetere la stessa operazione o la stessa sequenza di operazioni
un ciclo FOR o un ciclo WHILE potrebbe essere ciò di cui abbiamo bisogno.
Vedremo poi come queste due strutture vengono utilizzate per la creazione
di grafici.
Ciclo FOR
Si usa quando si deve ripetere una sequenza di operazioni per un numero
N di volte, conosciuto dall’utente o generato da elaborazioni precedenti
del VI. Si accede a questa struttura dal percorso All Functions>Structures>For
loop e la si dispone sul diagramma a blocchi con un’operazione di drag and
drop (o in italiano… premi e trascina!)
Nel punto indicato da N, si collega una costante (o il risultato di qualsiasi
elaborazione che restituisce un numero) che rappresenta il numero di iterazioni
che il ciclo eseguirà. Il quadratino in basso a sinistra invece restituisce
l’indicazione sull’iterazione corrente. Tutto il codice inserito all’interno
sarò eseguito quindi N volte!!! Il passaggio di valori all’interno del ciclo
avviene semplicemente collegando due punti, come si è fatto sinora. Il passaggio
di valori all’esterno è invece più complesso. È possibile scegliere di trasferire
solo un valore generato nell’ultima iterazione o tutta la raccolta di valori
generati nel corso delle N iterazioni. Procediamo con due esempi. Voglio
generare 10 numeri casuali e visualizzarli singolarmente, uno per volta.
Aprite un nuovo VI e disponete nel diagramma a blocchi e nel pannello di
controllo gli elementi indicati in figura:
Introduciamo in ogni ciclo un ritardo di 1 secondo per avere la possibilità
di vedere i 10 numeri casuali che si generano. Per fare questo usiamo la
funzione Wait until next ms multiple che si trova seguendo il percorso All
Function>Time & Dialog e colleghiamo in ingresso una costante intera pari
a 1000 (la funzione Wait… accetta in ingresso valori espressi in ms) come
mostrato in figura:
Eseguite ora il VI e osserverete i valori casuali compresi tra 0 e 1 aggiornasi
per 10 volte con frequenza di 1 secondo. Proviamo ora a raccogliere i 10
valori che si generano in un array. L’operazione potrebbe sembrare complicata
ma LabView è in grado di ricordare questi valori e restituirli all’uscita
del ciclo. Riaprite ora il VI appena creato e collegate l’uscita del generatore
di numeri casuali con il bordo destro (va bene qualsiasi bordo) della struttura
FOR, come in figura
Nel punto di arrivo di questo collegamento si può creare un quadrato pieno
o un quadrato con due parentesi quadre.
Se il quadratino è pieno vuol dire che verrà passato all’esterno solo l’ultimo
valore. Se il quadratino contiene all’interno le parentesi quadre vuol dire
che passerà un array i cui elementi saranno i valori casuali generati. Per
passare da una modalità all’altra bisogna cliccare con il tasto destro del
mouse e scegliere la voce enable indexing per abilitare l’indicizzazione
o disable indexing per disabilitare l’indicizzazione. Abilitate quindi l’indicizzazione
e poi premete ancora con il tasto destro del mouse sul quadratino (che dovrebbe
essere arancione, ad indicare che il numero è un reale) e scegliete la voce
create e poi indicator. Verrà creato subito un indicatore array (vedremo
più avanti qualcosina più in dettaglio sugli array) come in figura:
Provate ora ad eseguire il VI… nell’indicatore array ci sarà la raccolta
dei 10 numeri casuali!
Cicli WHILE
Passiamo ora a vedere come funziona il ciclo while. Come per il ciclo for,
tutto quello che si trova all’interno del riquadro while verrà ripetuto
ma stavolta finche non si verifica una condizione booleana. Procediamo subito
con un esempio. Aprite un VI vuoto e disponete all’interno un ciclo while
con la tecnica del drag and drops.
Probabilmente LabView collegherà subito un controllo chiamato STOP sul quadratino
in basso a sinistra (se non lo fa lui, fatelo voi… si tratta solo di disporre
un pulsante nel pannello di controllo e collegarlo nel diagramma a blocchi).
Bene, il pulsante rappresenta la condizione booleana, quindi la pressione
dello stesso comporterà l’uscita dal ciclo. Se il cerchio all’interno del
quadratino situato in basso a destra è rosso vuol dire che si uscirà dal
ciclo quando il valore booleano collegato è TRUE. Al contrario se il cerchio
è verde si uscirà con il valore FALSE. Per cambiare questa impostazione
è sufficiente cliccare con il tasto destro e scegliere la modalità desiderata
In basso a destra trovate invece l’indice dell’iterazione corrente. Costruite
adesso il seguente diagramma a blocchi (dovreste già essere in grado di
completare tutte le operazioni autonomamente)
Eseguite il VI e guardate cosa succede… premete poi il tasto STOP. Se questo
vi ha già entusiasmato rimanete calmi… faremo di meglio!! Non chiudete questo
VI perché sarà utilizzato immediatamente.
Sfhift register
Avete pensato che quando un ciclo è in esecuzione potrebbe esservi utile
ricordare il valore di una variabile all’iterazione precedente?? Gli shift
register servono per questo. Riprendete l’esempio precedente, cliccate con
il tasto destro sul bordo del ciclo while e scegliete l’opzione add shift
register. Compariranno due quadratini, uno a destra e uno a sinistra. La
variabile collegata a destra, sarà poi “ricordata” nell’iterazione successiva
e ritroverete il suo valore nel quadratino di sinistra. Collegando invece
nella parte esterna del quadratino di sinistra una costante, andate ad impostare
il valore iniziale dello shift register… più difficile a dirsi che a farsi!!
Completate il VI come in figura.
Eseguite e guardate cosa succede: l’indicatore numeric riporta l’indice
dell’iterazione corrente; l’indicatore numeric 2 riporta l’indice che l’indicatore
numeric aveva al ciclo precedente (che in questo caso coincide anche con
il numero dell’iterazione precedente). Potete “allungare” la memoria dello
shift register in modo da ricordare i valori di una variabile di 2 o 3 o
N cicli precedenti. Per fare ciò cliccate su uno dei due quadratini dello
shift register con il tasto destro e selezionate la voce add element. Aggiungete
un indicatore come in figura ed eseguite il VI.
A destra dello shift register di destra potete invece collegare un indicatore
il quale, a ciclo terminato, vi restituirà l’ultimo valore presente nello
shift register che corrisponderà quindi all’indice dell’ultima iterazione.
Salvate il VI come “while con shift register.vi”
Esercizio Conclusivo
Vogliamo adesso creare un VI che generi numeri casuali tra 0 e 10, e ne
trovi il massimo e il minimo. Il programma si deve arrestare quando sono
stati creati 20 numeri casuali o quando l’operatore preme un tasto di stop.
Seguite le figure in basso che contengono anche le indicazioni sulla dislocazione
delle funzioni utilizzate.
Vi è piaciuto?? Inizia già a farsi interessante! Prima di chiudere vi faccio
notare qualcosa che riguarda comunque i cicli: quando premete il pulsante
STOP, l’arresto del ciclo non si ferma immediatamente, ma si ferma solo
quando rilasciate il pulsante e inoltre, dopo il rilascio, il pulsante ritorna
al valore di partenza! Questo dipende dall’azione meccanica associata al
controllo. Per cambiare l’azione meccanica cliccate dal pannello di controllo
con il tasto destro sul pulsante e selezionate mechanical action.
Fate un po’ di prove e osservate i risultati!