LabView: Corso Base pag. 7 Cicli ripetitivi enumerativi o ciclo FOR Le istruzioni all interno del ciclo vanno ripetute un numero prefissato di volte. Al programma va fornito il numero di ripetizioni desiderato. Durante l esecuzione bisogna contare il numero di ripetizioni. Un esecutore uomo può memorizzare il valore del conteggio a mente o con le dita delle mani; il computer ha bisogno di memorizzare il valore del conteggio in una variabile intera che svolga le funzioni di contatore. Il contatore: 1. va posto al valore iniziale (di solito 1 o 0 ) fuori del ciclo 2. dentro il ciclo va ogni volta incrementato di 1. 3. dopo l incremento va effettuato il controllo se sia stato superato il numero di ripetizioni desiderate. 4. in caso affermativo si esce dal ciclo. In LabView il terminale iterativo svolge le funzioni di contatore. Il suo valore iniziale è zero e viene incrementato ad ogni ciclo. Il numero di cicli desiderato si fornisce tramite il terminale N che di solito è collegato ad una costante numerica o ad un controllo numerico di tipo intero. Il ciclo continua finchè il valore del terminale iterativo è minore del valore specificato nel terminale del conteggio. Esempio: Voglio eseguire il ciclo 3 volte N deve valere 3 Il ciclo viene eseguito per valori del terminale iterativo i = 0, 1, 2 Essendo il prossimo valore di i uguale al valore specificato nel terminale del conteggio, il ciclo termina Come si può notare nel disegno della pagina precedente, un ciclo For non è contenuto come il ciclo While all interno della Palette Execution Controls Bisogna quindi far comparire la Palette All Functions e al suo interno scegliere tructures Il For Loop è è indicato in figura. Come si può osservare nella Palette tructures si trova anche il While Loop (senza il pulsante di TOP)
LabView: Corso Base pag. 8 Visualizzazione del numero di ripetizioni effettuate e inseriamo un indicatore numerico all interno di un ciclo For e mandiamo in esecuzione il programma ci accorgiamo che: il ciclo termina quasi istantaneamente nell indicatore non si visualizzano tutti i numeri da 0 fino a 9, o meglio l occhio non riesce a vedere i numeri intermedi ma vede semplicemente il valore finale 9 assunto dal terminale Questo dipende dal fatto che la velocità di esecuzione del ciclo è molto elevata. Inserimento di ritardi nei cicli Per rallentare l esecuzione si può inserire all interno del ciclo una funzione di ritardo. Dalla Palette Functions si seleziona All Functions e poi Time & Dialog All interno di Time & Dialog c è una vasta scelta di funzioni per la gestione del tempo. cegliamo la funzione Wait (ms) che è rappresentata come un orologio da polso e inseriamola all interno del ciclo. Questa funzione attende il numero di millisecondi specificati al suo ingresso. Collegare ad essa una costante con valore pari a 1000 significa: aspetta 1000 ms = 1 secondo Il valore del Terminale iterativo verrà visualizzato ad intervalli di 1 secondo e quindi lo vedremo assumere tutti i valori da 0 fino a 9
LabView: Corso Base pag. 9 Passaggio dei dati attraverso i cicli Quando un dato attraversa un ciclo proveniente dall esterno del ciclo o diretto dall interno del ciclo verso l esterno, sul bordo del ciclo si crea un piccolo quadrato colorato chiamato tunnel. Il colore del tunnel dipende dal tipo di dato che sta attraversando il ciclo. Per non sbagliare a posizionare controlli e indicatori rispetto al ciclo ricordiamo che: Il dato proveniente dall esterno passa il suo valore al ciclo prima che il ciclo venga eseguito. Il trasferimento del dato dal ciclo verso l esterno avviene alla fine del ciclo. Questo qui accanto non è lo schema corretto per visualizzare il numero di ripetizioni ad intervalli di un secondo. Notiamo che infatti l indicatore ora è posizionato fuori del ciclo. Il valore di i viene passato all esterno del ciclo tramite il tunnel solo a fine ciclo. Il valore visualizzato nell indicatore sarà 0 per tutti i 10 secondi di esecuzione del ciclo mentre i assume i valori da 0 fino a 9 dentro il ciclo. Quando il ciclo termina i vale 9 e sarà questo l unico valore di i a passare all esterno e ad essere visualizzato nell indicatore. Questo schema ha un posizionamento errato del terminale booleano che dovrebbe determinare l uscita dal ciclo while. e il terminale è posizionato all interno viene controllato ad ogni ciclo e quindi si ha la possibilità di arrestare il ciclo premendo il tasto e facendo pervenire il valore True al terminale condizionale Posizionato come in figura, passa il suo valore al ciclo all inizio, 1 volta sola. e non è premuto passerà il valore False Il ciclo continuerà in eterno perché al terminale condizionale arriverà sempre questo valore acquisito all inizio del ciclo. Le successive pressioni del pulsante non avranno alcun effetto perché il LabView è tutto impegnato ad eseguire le istruzioni all interno del ciclo e non comunica più con l esterno. Rimozione di cicli dal programma Prestare attenzione quando si vuole cancellare un ciclo! e si cancella semplicemente, verranno distrutti anche tutto il codice e gli oggetti all interno di esso. e si vuole salvare il codice ciccare con il destro sul bordo del ciclo e scegliere nel menù che compare la voce Remove While Loop oppure Remove For Loop
LabView: Corso Base pag. 10 Il FeedBack Node upponiamo di voler creare un programma che faccia la somma dei primi N numeri interi. Esempio: ommiamo i primi 4 numeri interi Dobbiamo sommare 1 + 2 + 3 + 4 Il risultato è 10 In una programmazione procedurale basta creare un ciclo di tipo For in cui (detta la variabile destinata a contenere il valore della somma ed i la variabile contatore) eseguire ripetitivamente la istruzione: i = + i Come appare questa istruzione il LabView in cui i dati sono rappresentati da fili? Dobbiamo prendere la funzione addizione e riportare la sua uscita al suo ingresso creando una specie di ciclo. Questo crea un problema perché in Labview: l addizione non può essere eseguita fino a che i dati non sono presenti ai suoi terminali di ingresso l uscita dell addizione sarà presente solo al termine della esecuzione della aaddizione. Poiché abbiamo collegato l uscita all ingresso, l ingresso non sarà presente fino a che non ci sarà l uscita. L uscita non ci sarà fino a che non sarà presente l ingresso! ommo Num N I = 0 i = 1 = + i i = i + 1 I N Fine o e tentiamo un collegamento del genere i fili di collegamento si rompono a mostrare la impossibilità di eseguire la operazione desiderata. Tuttavia la nostra istruzione è all interno di un ciclo e quindi per il Labview assume un significato diverso. All ingresso della addizione noi vogliamo il valore che ha nel ciclo precedente. L uscita della addizione ci darà il nuovo valore di che sarà poi usato come valore precedente nel ciclo successivo. E al primo ciclo che valore ha? Il filo quindi non si rompe ma viene inserito tra l uscita e l ingresso un feedback node, cioè una freccia la cui direzione ci fa capire che il dato dall uscita viene riportato all ingresso nel ciclo successivo. I valori presenti al di qua e al di là della freccia sono diversi, proprio come nella formula = + i Nella programmazione tradizionale partiamo con il valore 0. La stessa cosa dovremo dire al Labview che pretenderà fuori dal ciclo un valore iniziale per il filo corrispondente ad. Ad ogni feedback node corrisponde un Initializer Terminal che compare automaticamente e a cui va fornito il corretto valore iniziale. Notiamo che poiché i va da 0 a N - 1 abbiamo aggiunto 1 prima di inviarlo alla somma in modo da sommare i valori da 1 a N. Notiamo anche il tunnel che porta alla fine del ciclo il risultato nell indicatore della omma.
LabView: Corso Base pag. 11 Feedback Node: approfondimento Per convincerci che il valore presente all uscita del nodo somma dell esercizio precedente non è uguale al valore presente al suo ingresso, possiamo apportare le seguenti modifiche al programma precedente, visualizzando sulla interfaccia utente i valori presenti all uscita e all ingresso del nodo somma. Il valore riportato in ingresso è il valore che aveva la uscita nel ciclo precedente. La cattura seguente della interfaccia utente ci fa vedere che a fine ciclo (ingresso1= 10), l ingresso2 vale 45 (pari alla somma totalizzata in precedenza ( 1+2+3+4+5+6+7+8+9 ) e la somma risultante è : 45 + 10 = 55