Guida/tutorial sull'utilizzo del linguaggio di programmazione Labview




Venerdì 4 Luglio 2008 16:39 RETI LABVIEW MYSQL Registrati HOMEPAGE



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

 ciclo for: si seleziona da function palette>structures. Si utilizza per azioni da ripetere N volte


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:

ciclo for: generazione di 10 numeri casuali compresi tra 0 e 1




ciclo for: indicatore del numero casuale compreso tra 0 e 1


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:

ciclo for: temporizzazione del ciclo for con introduzione di un ritardo di 1000ms


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

ciclo for: uscita dal ciclo for e utilizzo della funzione indexing


Nel punto di arrivo di questo collegamento si può creare un quadrato pieno o un quadrato con due parentesi quadre.

ciclo for: uscita dal ciclo for senza senza indexing




ciclo for: uscita dal ciclo for con indexing


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:

ciclo for: creazione di 10 numeri casuali e creazione di un indicatore array per la visualizzazione dei numeri creati




ciclo for: array contenente i 10 numeri reali casuali creati


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.

ciclo while: si seleziona da function palettes>structures e si utilizza per eseguire operazioni ripetitive sino al verificarsi di una condizione booleana.


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

ciclo while: pulsante di STOP che rappresenta la condizione booleana per l'uscita dal ciclo




ciclo while: cambio della condizione booleana di uscita


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)

ciclo while: introduzione di un indicatore per la visualizzazione dell'iterazione corrente del ciclo while e di un blocco per la temporizzazione a 1000ms




ciclo while: pulsante di STOP e indicatore del numero di iterazione corrente


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.

ciclo while: inserimento di uno shift register per avere memoria del valori precedenti




ciclo while: indicatore dell'iterazione corrente e di quella precedente


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.

ciclo while: estensione dello shift register per allungarne la memoria: adesso si potrà accedere anche al valore di due iterazioni precedenti




ciclo while: indicatori dell'iterazione corrente, di quella precedente e di quella prima ancora: come si può notare i numeri sono in sequenza


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.

cilco while: inserimente dell'indicatore che riporterà il valore dell'ultima iterazione




ciclo while: indicatore 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.

esercizio conclusivo lezione 3: diagramma a blocchi per l'individuazione del minimo e del massimo di un vettore di numeri casuali




esercizio conclusivo lezione 3: pannello di controllo dell'esercizio per l'individuazione del minimo e del massimo di un vettore di numeri casuali


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.

esercizio conclusivo lezione 3: caratteristica meccanica di un pulsante booleano


Fate un po’ di prove e osservate i risultati!



Sito dedicato alla programmazione open source C/C++Tcl Bash Php Mysql Gimp Labview ...powered by Cosimo Palma



Copyright 2004. Contact: c0sys Powered by c0sys