REPARTO SERVOMECCANISMI & CONTROLLI LNF DIV. … · LabVIEW e’ un programma ideato dalla National...

81
A B CLabVIEW “Sviluppo di Software per la Stazione di raggi cosmici EEE” Appunti scritti in occasione dello Stage con l’ ITST “ E.Fermipresso i LNF dell’INFN 7 11 Maggio 2012 Ubaldo Denni Maria Antonietta Frani

Transcript of REPARTO SERVOMECCANISMI & CONTROLLI LNF DIV. … · LabVIEW e’ un programma ideato dalla National...

A B C…LabVIEW

“Sviluppo di Software per la Stazione di raggi cosmici EEE”

Appunti scritti in occasione dello Stage con l’ ITST “ E.Fermi” presso i LNF dell’INFN

7 – 11 Maggio 2012

Ubaldo Denni

Maria Antonietta Frani

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

2

U.Denni M.A.Frani

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

3

U.Denni M.A.Frani

Prefazione

Non è un corso su LabVIEW, ma un percorso minimo per permettere l’utilizzo di

LabVIEW sulla manipolazione ed elaborazione dei files di acquisizione della stazione

di Raggi Cosmici dell’esperimento EEE.

Il corso si è svolto presso i Laboratori Nazionali di Frascati dell’I.N.F.N. con undici

studenti del quarto e quinto anno dell’ I.T.S.T. “E.Fermi” di Frascati.

Le ore complessive del corso sono state quindici tra teoria ed esercizi, divise in

cinque pomeriggi.

Sono stati trattati i seguenti argomenti:

Introduzione LabVIEW

L’ambiente LabVIEW

Creazione, modifica e verifica di un VI

Creazione di un SubVI

Cicli: While Loop, For Loop

Strutture : Case e Sequence

Array e Cluster

Grafici

Stringhe ed I/O Files

Gestione degli errori

Lavorare sui Files di acquisizione dell’esperimento EEE

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

4

U.Denni M.A.Frani

Introduzione a LabVIEW LabVIEW e’ un programma ideato dalla National Instruments ed è presente sul mercato sin dal 1987. LabVIEW significa: Laboratory Virtual Instrument Engineering Workbench. E’ un programma applicativo che usa il linguaggio grafico G ( Graphical Language ), il programmatore ha a propria disposizione un’interfaccia ad alto livello (icone) di facile utilizzo. Il linguaggio di programmazione G può essere considerato l’equivalente del codice sorgente nella programmazione tradizionale, ma differisce da quest’ultima in quanto crea programmi sotto forma di diagramma a blocchi a flusso di dati , in cui è il flusso dei dati a determinare l’esecuzione, mentre i linguaggi tradizionali creano programmi basati sulla scrittura di linee di codice. Quando lavoriamo con LabVIEW, creiamo un progetto, Project, che raccoglie tutti i files, VI, o folders del nostro lavoro. I programmi realizzati con LabVIEW sono chiamati strumenti virtuali ( Virtual Instruments ) perché il loro aspetto e il loro funzionamento può imitare quello di strumenti reali.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

5

U.Denni M.A.Frani

L’ambiente LabVIEW

Quando avviate LabVIEW, Start → Programmi → LabVIEW ,appare la seguente finestra di dialogo:

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

6

U.Denni M.A.Frani

Scegliendo Empty Project apriamo la finestra del progetto:

Il Project Explorer è composto da: Project root: il nome del progetto

My Computer: rappresenta il computer dove si sta lavorando ( Target), sono elencati i VI top levels e/o altri VI ed altri files usati nella programma

Dependencies: contiene i subVI che dipendono dai VI sopra indicati Build Specifications: contiene i files .exe, dll, installer e zip, che servono per la distribuzione del nostro programma . Utilizziamo il progetto per raggruppare tutti gli elementi di un programma, files LabVIEW e non-LabVIEW, per creare specifiche e trasferire o caricare i files in altri Target.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

7

U.Denni M.A.Frani

Un Target è un dispositivo sul quale può girare un VI. Salviamo Empty Project con nome progetto. Lvproj, dalla barra dei Menu File Save oppure tasto destro del mouse su Project: Untitled Project 1.

Per creare una VI tasto destro del mouse su My Computer New VI . Per aggiungere al progetto un VI già esistente, un file di configurazione o un folder, tasto destro del mouse su My Computer Add Files... Per vedere dove sono salvati i nostri programmi cliccare sul tab Files.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

8

U.Denni M.A.Frani

Scegliendo Blank VI è possibile lavorare direttamente con il pannello frontale e il diagramma.

I VI contengono tre componenti principali: il pannello frontale che rappresenta l’interfaccia con utente, il diagramma che il codice sorgente e l’icona con il riquadro connettori Pannello Frontale. Come abbiamo detto è l’Interfaccia con cui un utente deve interagire; quindi creare un pannello frontale di semplice comprensione ed accattivante, diventa un buon biglietto da visita per lo sviluppatore L’interfaccia utente di un VI e` l’equivalente del pannello frontale di uno strumento fisico, per analogia con il pannello frontale di uno strumento vero, gli ingressi sono chiamati Controlli e le uscite Indicatori. Si possono utilizzare diversi tipi di controlli e indicatori come manopole, interruttori, pulsanti, istogrammi, grafici e cosi via per rendere il pannello frontale più chiaro all’utente e completo nella sua funzionalità. I controlli simulano i dispositivi di Input dello strumento e i dati di ingresso al diagramma a blocchi. Gli indicatori simulano i dispositivi di Output dello strumento e visualizzano i dati dal diagramma a blocchi che acquisisce, elabora e genera.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

9

U.Denni M.A.Frani

Controlli e indicatori li troviamo nella barra dei Menu in View Control Pallete o tasto destro del mouse sul pannello.

Si dividono in: numeric, boolean, array, cluster, string, etc… Ogni contenitore contiene controlli e indicatori di varie forme da cui il programmatore sceglie quello più adatto alle sue esigente o che rappresenta meglio il frontalino dello strumento virtuale.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

10

U.Denni M.A.Frani

Ogni elemento ha le sue proprietà, tasto destro sul controllo o indicatore e scegliere Properties, un controllo numerico ha le seguenti proprietà:

Apparence: visibile, invisibile, grigetto

Data range: valore di default, rappresentazione numerica, range di lavoro e azioni

Format e Precision: formato di rappresentazione, digit di precisione, etc…

Documentation: commento al controllo numerico

Data Binding: per la pubblicazione del controllo tramite datasocket o shared variabili

Key Navigation: assegnazione di un evento ad una azione sul controllo numerico

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

11

U.Denni M.A.Frani

Diagramma: Il diagramma a blocchi e` la finestra dove viene “disegnato” il programma ed e’ composto da nodi, terminali e collegamenti.

Gli oggetti del pannello frontale appaiono come terminali nel diagramma. I terminali rappresentano il tipo di dato del controllo o dell’indicatore, sono porte di ingresso e di uscita che scambiano informazioni tra il pannello frontale e lo schema a blocchi. I terminali sono analoghi ai parametri e alle costanti nei linguaggi di programmazione testuali. I nodi sono oggetti nel diagramma che hanno ingressi e/o uscite ed eseguono operazioni quando il VI è in Run. Sono analoghe alle dichiarazioni, operatori, funzioni e subroutines dei linguaggi di programmazione tradizionali. I nodi possono essere Funzioni, SubVI o Strutture.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

12

U.Denni M.A.Frani

Le Funzioni sono elementi operativi fondamentali di LabVIEW. Una funzione base viene rappresentata con lo sfondo giallo chiaro sulla sua icona, non hanno pannello frontale e diagramma a blocchi, ma soltanto terminali di ingresso e di uscita per il passaggio dei dati. Le funzioni si trovano sulla barra dei menu View Function Palette oppure tasto destro sul diagramma a blocchi.

Le Function Palette sono divise per gruppi:

Programming: strutture, manipolazione di array, manipolazione di cluster, scrittura files, etc…

Measurament I/O: per controllare dei device esempio Field point.

Instrument I/O: per controllare dei device con RS232, GBIP etc…

Mathematics: funzioni matematiche.

.......

……..

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

13

U.Denni M.A.Frani

I SubVI sono VI creati per l'utilizzo all'interno di un altro programma, per inserirli in un diagramma a blocchi si accede dalla barra dei Menù in Function Palette Select a VI…. Qualsiasi VI potrebbe essere utilizzato come subVI. Facendo doppio click sul subVI , posizionato nel diagramma, compare il pannello frontale e da li è possibile accedere al suo diagramma a blocchi. Le Strutture sono utilizzate per il controllo del processo, come le strutture di condizionamento o di ciclo . I dati vengono trasmessi tramite i collegamenti, per i collegamenti utilizzeremo lo strumento “rocchetto” che si trova nelle Tools Palette (dalla barra dei menu View Tools Palette). I collegamenti hanno differenti colori, stili e spessori in funzione del tipo di dati da loro rappresentato. Quando connettiamo due dati non omogenei o due terminali di ingresso ad un terminale di uscita abbiamo il collegamento rotto che appare come una linea tratteggiata nera con una X rossa in mezzo.

La freccia di Run rotta indica che c’è un errore nel programma. Cliccando sulla freccia rotta compare una finestra di dialogo che indica e descrive l’errore.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

14

U.Denni M.A.Frani

E’ possibile fare una ricerca, in modo testuale, di Controlli, VI e Funzioni dalle Controls Palette o Functions Palette, cliccando il tab Search.

E’ stato già detto che la programmazione in LabVIEW è di tipo Data Flow o flusso di dati. I dati fluiscono in una sola direzione, da un terminale sorgente ad uno o più terminali destinazione. Un nodo e’ eseguito solo quando i dati sono disponibili a tutti i suoi terminali di ingresso, finita l’esecuzione, il nodo fornisce i dati a tutti i suoi terminali di uscita.

Rispetto ad un linguaggio testuale dove le linee di programma vengono eseguite in sequenza, in LabVIEW possiamo eseguire funzioni o gestire subVI in parallelo.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

15

U.Denni M.A.Frani

L' icona con i suoi terminali rappresenta la nostra funzione all'interno di un programma. Un subVI si presenta sotto forma di icona con terminali di ingresso e di uscita.

I VI sono gerarchici; possiamo utilizzare un VI come top level o come sottoprogramma all’interno di un diagramma a blocchi ed in questo caso è chiamato subVI

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

16

U.Denni M.A.Frani

Usare più subVI, in un programma, facilita il debugging del programma stesso. L’esecuzione sarà più ordinata e facile da seguire permettendo di trovare più facilmente eventuali errori. Gli strumenti che usiamo per lo sviluppo e il debugging dei programmi li troviamo nei Tools Palette, dalla barra dei menu in View Tools Palette . E’ possibile visualizzarli anche premendo il tasto Shift della tastiera insieme al tasto dx del mouse su un punto qualsiasi del pannello o del diagramma. Con la barra spaziatrice della tastiera è possibile fare una selezione veloce degli strumenti più utilizzati. Usando il tasto tab, della tastiera si visualizzeranno tutti i tools che si utilizzano sul pannello o sul diagramma

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

17

U.Denni M.A.Frani

La barra degli strumenti è un prezioso aiuto quando facciamo il debugging della nostra applicazione

Per mandare in esecuzione il programma utilizzeremo gli strumenti presenti sulla barra del pannello e del diagramma.

Per mandare in esecuzione una VI selezionare la freccia, che è presente sulla barra degli strumenti sia del pannello sia del diagramma.

Possiamo fermare l’esecuzione del programma spingendo questo tasto, ma il programma rimarrà in una condizione indefinita. Si consiglia di inserire sempre un pulsante per fermare il programma in modo da completare il ciclo di esecuzione.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

18

U.Denni M.A.Frani

Con il pulsante Pause si mette in attesa un VI in esecuzione e viene evidenziato, sul diagramma a blocchi, dove si è fermata l'esecuzione. Cliccate di nuovo per continuare l'esecuzione del VI. Per controllare se il nostro programma funziona correttamente effettuaremo il debug utilizzando i vari tools messi a disposizione sulla barra degli strumenti del diagramma a blocchi. Abbiamo visto che un primo debug viene eseguito mentre “scriviamo” il nostro programma, con l’indicazione della freccia di Run rotta quando sbagliamo il tipo di collegamento o non effettuiamo il collegamento.

Cliccando sul pulsante Light si vede il flusso di dati che si sposta da un terminale di ingresso ad una funzione e/o terminale di uscita attraverso i collegamenti. Cliccando di nuovo si ritorna nell’esecuzione normale.

Cliccando sul pulsante Retrain si salvano i dati in ogni punto del programma in modo che inserendo una Sonda, su un filo, si può visualizzare l’ultimo valore dei dati.

Cliccando sul pulsante Step Into si procedere passo-passo in un ciclo, in un subVI etc... L’esecuzione di un VI procede di nodo in nodo. Ogni nodo lampeggia per indicare che è pronto per l’esecuzione.

Cliccando sul pulsante Step Over si procede passo-passo senza entrare nel ciclo, subVI etc.. che riteniamo funzionare correttamente, il nodo viene eseguito normalmente.

Cliccando sul pulsante Step Out si esce dalla modalità passo-passo di un ciclo, di un subVI etc…. l’esecuzione verrà completata normalmente. Altri strumenti di debug si trovano nelle Tools Palette.

Utilizziamo lo strumento Break per inserire dei punti di pausa nei VI, nelle funzioni, nei nodi, nei collegamenti e nelle strutture per bloccare l’esecuzione del programma in quel punto.

Utilizziamo lo strumento Probe per inserire sonde sui collegamenti dello schema a blocchi e verificare valori intermedi in un VI che produce risultati dubbi o inattesi. Quando sviluppiamo un programma è sempre utile tenere aperta la finestra di Help sia per avere suggerimenti che diminuire eventuali errori.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

19

U.Denni M.A.Frani

La finestra di Help si chiama dalla barra dei Menu Help Show Contex Help, oppure premendo da tastiera CTR + h.

La finestra di aiuto visualizza le informazioni di base sugli oggetti LabVIEW quando si sposta il cursore su di essi. Gli oggetti sono VI, funzioni, costanti, strutture….. Possiamo capire se i terminali da connettere del VI o funzione sono obbligatori, consigliati o opzionali Obbligatorio – Label in grassetto Consigliato – Label normale Optional – Label grigio Da notare che, se c’è un terminale con nome in grassetto non connesso, avremmo la freccia di esecuzione programma rotta.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

20

U.Denni M.A.Frani

Quando inseriamo un controllo o un indicatore sul pannello questi vengono riportati anche sul diagramma.

Notiamo che a seconda del tipo di controllo o indicatore inserito, nel diagramma saranno presenti delle icone di colore e forma leggermente diversi I tipi di dati si possono riconoscere dal colore e dallo “spessore” dei collegamenti

Quando inseriamo un controllo o un indicatore è buona norma dargli un nome, Label.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

21

U.Denni M.A.Frani

Che cos'è chi

Abbiamo visto che ci sono vari tipi di controlli e indicatori, cerchiamo di conoscerli: Numeric: rappresentano i numeri che vanno da -inf a + inf , possono essere interi, unsigned interi, a virgola mobile e complex, nel diagramma sono visualizzati di colore blu o arancione

Interi: rappresentano i numeri interi reali positivi e negativi

I8: 8 Bits 2 digit di precisione range tra -128 e 127 I16: 16 Bits 4 digit di precisione range tra -32768 e 32767 I32: 32 Bits 9 digit di precisione range tra -214743648 e 214483647 I64: 64 Bits 18 digit di precisione range tra -1E19 e 1E19 Unsigned Interi: rappresentano tutti i numeri interi reali positivi

U8: 8 Bits 2 digit di precisione range tra 0 e 255 U16: 16 Bits 4 digit di precisione range tra 0 e 65535 U32: 32 Bits 9 digit di precisione range tra 0 e 4294967295 U64: 64 Bits 18 digit di precisione range tra 0 e 2E19

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

22

U.Denni M.A.Frani

Virgola mobile: rappresentano tutti i numeri positivi e negativi reali

SGL: Singola precisione 32 Bits 6 digit di precisione range tra: Min numero positivo: 1.40e–45 Max numero positivo: 3.40e+38 Min numero negativo: –1.40e–45 Max numero negativo: –3.40e+38 Si usano quando sappiamo che dobbiamo minimizzare la memoria sul disco DBL: Doppia precisione 64 Bits 15 digit di precisione range tra: Min numero positivo: 4.94e–324 Max numero positivo: 1.79e+308 Min numero negativo: – 4.94e–324 Max numero negativo: – 1.79e+308 E' il default dei controlli e indicatori numerici EXT:Precisione estesa 128 Bits i numero di digit dopo la virgola variano a seconda della piattaforma utilizzata, vanno da 15 a 20 digit, range tra : Min numero positivo: 6.48e–4966 Max numero positivo: 1.19e+4932 Min numero negativo: – 6.48e–4966 Max numero negativo: – 1.19e+4932 Si usano quando si salvano dati con una precisione estesa sul disco, ma la grandezza e la precisione memorizzata dipendono dal tipo di piattaforma utilizzata. Numeri Complessi: sono numeri a virgola mobile con una parte reale e una immaginaria. Hanno le stesse caratteristiche dei numeri a virgola mobile

CSG: Numero complesso a singola precisione CDB: Numero complesso a doppia precisione CXT: Numero complesso a precisione estesa.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

23

U.Denni M.A.Frani

Boolean

Sono controlli o indicatori che simulano interruttori, pulsanti e led; possono assumere solo due valori: vero o falso, 1 o 0. Sul diagramma vengono visualizzati con il colore verde

Un controllo booleano può lavorare con azioni meccaniche diverse:

Come interruttore: Switch when pressed: cambia stato quando è premuto il tasto del mouse Switch when released: cambia stato quando viene rilasciato il tasto del mouse Switch until released: cambia stato fino a quando è premuto il tasto del mouse Come pulsante: Latch when pressed: cambia stato al click del mouse e lo mantiene fino a quando non viene letto nel VI Latch when released: cambia lo stato solo quando il mouse viene rilasciato, mantiene lo stato fino a quando non viene letto nel VI. Latch until released: cambia lo stato quando clicchiamo sul pulsante, mantiene lo stato fino a quando non è letto dal VI o fino a quando non è rilasciato il pulsante del mouse

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

24

U.Denni M.A.Frani

String Raggruppao sequenze di caratteri alfanumerici visibili e non, sul diagramma viene visualizzata con il colore rosa

con le stringhe possiamo lavorare con:

Normal display: visualizza tutti i caratteri stampabili, quelli non stampabili vengono visualizzati come piccoli quadri. '\' code display: visualizza i backslash per tutti i caratteri non stampabili, si consiglia di utilizzarlo quando si deve inviare codice ASCII tramite una seriale (RS232, etc..) ad uno strumento o device in generale. Password display: visualizza un asterisco per ogni carattere digitato Hex display: visualizza il carattere digitato in valore esadecimale.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

25

U.Denni M.A.Frani

Array

Raggruppa dati omogenei in modo ordinato. Sul diagramma viene visualizzato con il colore del tipo di dato.

Un array può avere una o più dimensioni e per ciascuna dimensione più elementi di dati omogenei. Sono utilizzati quando si lavora per memorizzare dati simili, per esempio per acquisire valori di temperatura nel tempo si utilizza un array ad una dimensione. Ad ogni elemento inserito corrisponde un indice, l'indice in un array parte da zero. Gli array possono essere di tipo numerico, booleano, di stringhe o un array di cluster e segue le proprietà dell'oggetto utilizzato.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

26

U.Denni M.A.Frani

Cluster Riunisce dati di tipo diverso, ma devono essere o controlli o indicatori. Sul diagramma è visualizzato con il colore rosa o marrone.

Un cluster lo possiamo immaginare come un doppino telefonico che racchiude fili con funzioni diverse. Raggruppare dati implica avere un ordine di collegamento nel diagramma e un minor numero di terminali nel riquadro dei connettori.

E’ possibile per i controlli impostare dei valori di default, che verranno inizializzati ogni volta che viene aperto un VI, usare il tasto destro del mouse sul controllo Data Operation Make current value default oppure nel caso che vogliamo impostare dei valori di default per tutti i controlli del pannello dalla barra dei menu Edit Make current value default. Possiamo inserire un commento, per una migliore comprensione del programma, al controllo e/o all’indicatore che verrà visualizzato nella finestra di Help al passaggio del mouse su di essi. E’ possibile inserire un commento usando il tasto destro del mouse sul controllo e scegliere Description e tips o properties, cosi si aprirà una finestra di dialogo dove è possibile inserire il commento.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

27

U.Denni M.A.Frani

Esercizi (a)

1) Creare una cartella sul desktop dove salvare i nostri lavori, apriamo LabVIEW e prendiamone confidenza.

2) Creare un Progetto e salvarlo come Temperatura.Lvproj nella nostra cartella di lavoro.

3) Creare un VI che simuli la lettura di un termometro, con una temperatura

che va da 0 a 100 °C. Salvare la VI come Termometro.vi Nota: per simulare la temperatura utilizziamo la funzione Random Number (0-1) che si trova in Function Programming Numeric.

4) Creare un VI che converte i Celsius in Fahrenheit. Salvare la VI come C_to_F.vi

Fare il Debugging del VI.

5) Copiare il seguente pannello e riordinarlo, per convenzione gli ingressi si posizionano a sinistra del pannello le uscite a destra.

Salvare come Temperatura_C_or_F.vi

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

28

U.Denni M.A.Frani

Creazione di subVI

La potenza di LabVIEW la possiamo vedere anche nella natura gerarchica di un VI. Dopo aver creato un VI è possibile configurarlo ed utilizzarlo nello schema a blocchi di una altro VI, chiamandolo cosi modulo o subVI. Costruire un programma usando molti moduli o subVI ci permette di avere una “leggibilità” migliore, un debug più semplice ed una eventuale modifica in un tempo minore. È possibile utilizzare un subVI in più VI, un subVI corrisponde ad una chiamata di subroutine nei linguaggi di programmazione testuale. Cliccando due volte su un subVI si aprirà il pannello frontale, con i suoi controlli e indicatori, e da qui possiamo aprire lo schema a blocchi del programma, con i suoi terminali, nodi e collegamenti. Per creare un subVI, è necessario creare una icona e connettori. L’angolo destro superiore del pannello frontale e del diagramma visualizza l’icona del VI. Questa icona è la stessa che appare quando inserite il VI nello schema a blocchi.

Il riquadro dell’icona e dei connettori corrisponde alla dichiarazione di funzione nei linguaggi tradizionali.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

29

U.Denni M.A.Frani

L’icona di default è la seguente:

Il numero ci indica quanti nuovi VI sono stati aperti al lancio di LabVIEW. Un’icona è una rappresentazione grafica di un VI. Essa può contenere testo, immagini o entrambi ed ha dimensioni di 32x32 pixel. Per utilizzare un VI come subVI abbiamo bisogno di un riquadro dei connettori. Il riquadro dei connettori è un insieme di terminali che corrispondono ai nostri controlli e indicatori, esso definisce gli ingressi e le uscite che si possono connettere.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

30

U.Denni M.A.Frani

Per editare una icona fare doppio click su di essa oppure usare il tasto destro del mouse scegliendo dal menu di pop up edit icon

Ci vengono proposte delle immagini da poter utilizzare nella nostra icona, volendo possiamo crearne noi o importarle da file, con dimensione di 32x32 pixel. Abbiamo detto che per utilizzare un VI come subVI è necessario costruire un riquadro dei Connettori

Per definire un riquadro dei connettori cliccare col tasto destro del mouse sull’icona nell’angolo superiore destro e selezionate dal menu di pop up Show Connector. Ogni rettangolo sul riquadro dei connettori rappresenta un terminale. Utilizziamo i rettangoli per assegnare ingressi e uscite.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

31

U.Denni M.A.Frani

Possiamo selezionare un numero di terminali differente cliccando con il tasto destro del mouse sul riquadro dei connettori e selezionando Patterns dal menu di pop up. Potete lasciare i terminali in più non collegati questo vi consentirà di effettuare eventuali cambiamenti futuri con un impatto minimo sulla VI. Potete anche avere più controlli o indicatori sul pannello frontale che terminali connessi. Il numero massimo di terminali disponibile per un subVI è 28. Quando collegate controlli e indicatori al riquadro dei connettori, per convenzione, disponete gli ingressi sulla sinistra e le uscite sulla destra per evitare schemi di collegamento poco chiari. Per assegnare un terminale ad un controllo o ad un indicatore del pannello frontale cliccate in successione sul terminale, sul controllo o sull’indicatore del pannello frontale ed infine su un’area libera del pannello frontale e di conseguenza Il terminale passerà al colore del tipo di dato del controllo e/o indicatore.

Per poter definire il tipo di collegamento che deve essere applicato al terminale cliccare con il tasto destro del mouse sul terminale stesso e dal menu di pop up scegliere This connection is ….. obbligatorio, consigliato o opzionale.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

32

U.Denni M.A.Frani

E’ possibile creare un subVI selezionando una parte di codice sul diagramma e quindi dalla

barra dei menu selezionare Edit Create SubVI. LabVIEW crea i controlli e gli indicatori per il nuovo subVI ed un'icona di default sostituisce la nostra selezione. Possiamo modificare il nostro subVI facendo un doppio click su di esso.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

33

U.Denni M.A.Frani

Per inserire un subVI in un diagramma a blocchi cliccare con il tasto destro del mouse sul diagramma e dal menu Function select VI… si aprirà la finestra di dialogo di Windows per selezionare la VI. Oppure se il subVI è aperto trascinare l’icona sul diagramma del VI. Quando si scrive un programma è buona norma inserire un commento al programma. In LabVIEW è possibile inserire un commento da VI Properties, tasto destro del mouse sull’icona

e dal menù a tendina scegliere Documentation.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

34

U.Denni M.A.Frani

In VI description scrivere una breve descrizione di ciò che fa il programma, questo commento comparirà nella finestra di Help quando passeremo con il mouse sopra l’icona del VI. E’ possibile creare una descrizione del programma in HTML e l’indicazione di dove risiede il file html può essere inserita in Help Path o cercata con il tasto Browse…

Facendo scorrere il menù a tendina vediamo che possiamo avere delle informazioni del VI, possiamo configurare il VI, per esempio la posizione del pannello sul monitor, possiamo fare aprire un pannello di un subVI quando viene chiamata in un VI o caricata da LabVIEW. Per visualizzare un pannello senza le barre di scorrimento o senza la barra degli strumenti, dal menù a tendina, scegliere Windows Appearance e poi Custom.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

35

U.Denni M.A.Frani

Possiamo impostare la priorità del VI o mandarlo in esecuzione quando è aperto scegliendo dal menù a tendina Execution.

Esercizi (b)

1) Creare un subVI per ogni VI sviluppata precedentemente, Termometro.vi, C_to_F.vi Temperatura_C_or_F.vi.

2) Utilizzare Termometro.vi e C_to_F.vi, come subVI in Temperatura_C_or _F.vi. 3) Inserire un commento per ogni subVI .

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

36

U.Denni M.A.Frani

Cicli While Loop e For Loop

I cicli o loops vengono utilizzati nella programmazione quando una o più istruzioni devono essere eseguite più di una volta. In LabVIEW abbiamo due cicli: While Loop e For Loop, dal menu Functions Programming Structures

Un ciclo While viene eseguito fino a che non viene soddisfatta una condizione, per esempio leggi un valore fino a quando non premo un pulsante di stop. Il ciclo For viene eseguito un numero di volte che noi impostiamo, per esempio leggi un valore per 10 volte.

Il ciclo While è composto da:

un terminale di condizione, per default è vero. Ferma il ciclo se la condizione è vera ( Stop if True ). E’ possibile modificare la condizione in Continue if True facendo click con il tasto destro del mouse sul terminale

un terminale di iterazione i che indica il numero dei cicli effettuati. Il conteggio dell'iterazione inizia sempre da zero.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

37

U.Denni M.A.Frani

Da notare che se la condizione di uscita è soddisfatta il ciclo While verrà eseguito almeno una volta. Il dato presente nel Tunnel (definito come terminale di collegamento dati in ingresso e/o uscita di una struttura) di uscita è sempre il valore dell’ultima iterazione e appare come un blocco solido.

Ogni volta che utilizziamo un ciclo While è buona norma inserire un ritardo di almeno 5 ms, dal menu Functions Programming Timing, per non impegnare molta CPU del computer.

Un ciclo For è composto da:

un terminale di ingresso N che indica quante volte ripetere il ciclo

un terminale di iterazione i che indica il numero di cicli effettuati. Il conteggio dell'iterazione inizia sempre da zero.

Da notare che se colleghiamo ad N il valore zero, il ciclo For non verrà mai eseguito.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

38

U.Denni M.A.Frani

Il dato presente nel tunnel in uscita appare come un blocco con delle parentesi quadre interne. I valori di tutte le iterazioni sono “inseriti” in un contenitore di dati omogeneo ed ordinato chiamato Array.

Programmando con i cicli, abbiamo bisogno anche di dover accedere ai dati prodotti nella iterazione precedente. Se per esempio stiamo acquisendo e dobbiamo effettuare una media degli ultimi tre valori dobbiamo mantenere in memoria anche i valori acquisiti nelle altre iterazioni. Questo è possibile farlo con i cicli utilizzando i registri a scorrimento Shift Register. Tasto destro del mouse sul bordo del ciclo e dal menu di pop up selezionare Add Shift Register.

Un registro a scorrimento appare come una coppia di terminali con frecce con direzione opposta l’uno rispetto all’altro sui lati verticali della cornice del ciclo. Il terminale di destra contiene una freccia verso l’alto e memorizza i dati alla fine dell’iterazione. LabVIEW trasferisce i dati collegati al lato sinistro del registro nella iterazione successiva.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

39

U.Denni M.A.Frani

Volendo effettuare la media degli ultimi tre dati acquisiti, cliccare con il tasto destro del mouse sul terminale di sinistra e dal menu di pop up selezionate Add Element per due volte e poi fare la somma dei tre elementi e dividere per tre.

Per inizializzare un registro a scorrimento collegate al terminale di sinistra una costante o un controllo . Se non inizializzate il registro il ciclo utilizza o il valore scritto nel registro quando l’ultimo ciclo è stato eseguito, o il valore di default per il tipo di dato se il ciclo non è mai stato eseguito.

La differenza dei due cicli è che:

While alla fine delle iterazioni restituisce in uscita soltanto l’ultimo valore.

For alla fine delle iterazioni restituisce in uscita un Array. E’ possibile connettere in ingresso e/o far restituire in uscita un Array da un ciclo While cliccando con il tasto destro del mouse sul Tunnel di ingresso e/o uscita e selezionando Enable Indexing. E’ possibile connettere in ingresso e/o far restituire in uscita un dato da un ciclo For cliccando con il tasto destro del mouse sul Tunnel di ingresso e/o di uscita e selezionando Disable Indexing.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

40

U.Denni M.A.Frani

Strutture

Le strutture le troviamo nel menu Functions Programming Structures.

Quando si programma è normale dover effettuare delle scelte, in LabVIEW la struttura che utilizziamo e’ la Case Structure:

La struttura Case è simile all’ istruzione If… Then… Else o Switch nei linguaggi di programmazione testuali.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

41

U.Denni M.A.Frani

Utilizzando l’istruzione If abbiamo due contenitori, nella parte alta dei quali sono indicate le condizioni True o False.

La condizione sarà collegata al simbolo con il punto interrogativo. A seconda della condizione verrà eseguito il programma all’interno del relativo contenitore. Se usiamo la struttura come funzione Switch, abbiamo tanti contenitori quante sono le condizioni. Da notare che il primo contenitore è impostato come Default, se una condizione non è contemplata verrà eseguito il codice all’interno di questo contenitore.

Cliccare sul bordo della struttura Case per aggiungere, duplicare, rimuovere, o riordinare le condizioni e per impostare la condizione di default.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

42

U.Denni M.A.Frani

Gli ingressi connessi sono disponibili in tutti i contenitori ma non è necessario utilizzare ogni ingresso. Quando colleghiamo una uscita per una condizione, nel bordo di tutti i contenitori appaiono dei tunnel nella stessa posizione. I tunnel di uscita non collegati appaiono come quadrati bianchi e possiamo notare che la freccia di esecuzione è rotta. Dobbiamo connettere ogni uscita del contenitore con tipi di dati compatibili.

Esiste un selettore che può essere utilizzato come la funzione If.. Then.. Else e si chiama Select Si trova in Function Programming Comparison

Quando la condizione è vera passerà tutto ciò che è connesso nel terminale True, se è falsa passerà soltanto quello che è connesso al terminale False.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

43

U.Denni M.A.Frani

Utilizziamo la struttura Sequence per controllare l’ordine di esecuzione quando non esiste una dipendenza naturale dei dati. Un nodo che riceve dati da un altro nodo dipende da esso e viene eseguito solo dopo che il precedente ha terminato l’esecuzione. Come nelle strutture Case i dati in ingresso sono disponibili per tutti i frames. I collegamenti in uscita delle strutture Sequence possono avere solo una sorgente di dati a differenza delle strutture Case. L’uscita può partire da ogni frame ma i dati lasciano la struttura Sequence solo quando tutti i frames hanno completato l’esecuzione. Esistono due tipi di strutture Sequence:

Flat Sequence , si presenta come i fotogrammi di un rullino fotografico, i dati passano da un frame all’altro. Per inserire nuovi frames fare click con il tasto destro del mouse a destra o sinistra della struttura e scegliere Add Frame After o Before.

Stacked Sequence, Per inserire nuovi frames fare click con il tasto destro del mouse a destra o sinistra della struttura e scegliere Add Frame After o Before, per passare un dato da un frame all’altro dobbiamo utilizzare un terminale locale, tasto destro sulla struttura Add Sequence Local. Nel terminale locale della sequenza che contiene la sorgente dei dati compare una freccia rivolta verso l’esterno. Il terminale, nei frames successivi, contiene una freccia rivolta verso l’interno ad indicare che il terminale è una sorgente di dati per quel frame. Non potete utilizzare il terminale locale della sequenza nei frames che precedono quello sorgente dei dati, apparirà come un quadratino opaco.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

44

U.Denni M.A.Frani

Esercizi (c)

1. Costruite un VI, chiamato Calculator.vi, che funzioni come una calcolatrice, l’utente

deve poter scegliere l’operazione da effettuare.

2. creare un VI che generi numeri casuali fino a quando il numero generato corrisponde

ad un numero impostato. Visualizzare il numero di iterazioni.

3. Creare un programma che permettaall’utente può scegliere se leggere la temperatura

in °C o °F, utilizzare il pannello di Temperatura_C_or_F.vi

4. Acquisire 1000 valori di temperatura.

5. Scrivere un programma che simuli la lettura di una sonda di temperatura. L’utente

decide quando deve fermare l’acquisizione.

6. Acquisire 1000 valori di temperatura, visualizzare la media delle ultime tre letture,

l’utente può decidere di fermare l’acquisizione.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

45

U.Denni M.A.Frani

Aggregazione dati: Array e Cluster

Un array può avere una o più dimensioni e per ciascuna dimensione più elementi di dati omogenei Ogni dimensione può avere fino a 231-1 elementi e le dimensioni possono essere “infinite” perché dipendono dalle prestazioni del computer, infatti in base al numero di elementi e dimensioni verrà allocata la RAM e se il computer non ne ha a sufficienza ci sarà un continuo “swap” con l’hard disk rallentandone visibilmente la velocità. Gli Array si trovano nel pannello Controls Modern Array, Matrix & Cluster, le funzioni che ci permettono di lavorare con gli Array si trovano nel menu del diagramma in Functions Programming Array

Gli Array possono essere formati da controlli o indicatori, booleani, stringa, numerici… etc; sono raggruppati in modo ordinato e omogeneo. Quando creiamo un Array da pannello notiamo un numero, indice che può essere incrementato e un contenitore vuoto dove possiamo inserire il nostro controllo o indicatore . E’ da notare che sul diagramma il terminale Array rimarrà di colore nero finché non si inserirà il tipo di dato.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

46

U.Denni M.A.Frani

Useremo gli Array per lavorare con una raccolta di dati omogenei o per esegure calcoli ripetitivi. Gli Array sono ideali per la memorizzazione dei dati generati nei cicli in cui ogni iterazione produce un elemento nell’Array. Gli elementi degli Array sono ordinati. Un Array utilizza un indice, in modo da accedere rapidamente ad un elemento particolare. L’indice parte da zero.

Un Array bi-dimensionale memorizza gli elementi in una griglia. E’ necessario avere un indice di colonna e un indice di riga per individuare un elemento, entrambi gli indici partono da zero. L’illustrazione seguente mostra un Array bi-dimensionale a 6 colonne e 4 righe, che contiene 6 x 4 = 24 elementi.

Indice di colonna

Indice di riga 0

1 2 3

0 1 2 3 4 5

Per aggiungere dimensioni ad un Array, cliccate con il tasto destro del mouse sul display indice e selezionate Add Dimension dal pop up.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

47

U.Denni M.A.Frani

Per creare un Array in modo automatico possiamo utilizzare un For Loop, per creare un Array a due dimensioni possiamo utilizzare due For Loop, uno dentro l’altro. Il For Loop interno crea le colonne e quello esterno le righe.

E’ da notare che se colleghiamo un tunnel di ingresso del For Loop ad un Array, LabVIEW imposta il terminale contatore sulla base delle dimensioni dell’ Array . Se colleghiamo più Array con un numero di elementi diversi o se impostiamo il terminale contatore, il numero di cicli eseguiti sarà uguale a quello con elementi minori. Per esempio, se colleghiamo una Array con 10 elementi ad un tunnel d’ingresso di un ciclo For Loop e impostiamo il terminale contatore a 15, il ciclo verrà eseguito 10 volte. Le Funzioni che si usano per lavorare con gli Array si trovano in Functions Programming Array

Array Size – Fornisce il numero di elementi presenti in ogni dimensione. Se l’Array è n-dimensionale, l’uscita Size è un Array di n elementi. Per esempio, la funzione Array Size fornisce un Size di 3 per l’ Array seguente.

Initialize Array – Crea un Array n-dimensionale in cui ogni elemento viene inizializzato al valore di Element. Nell’esempio la funzione Initialize Array fornisce un Array seguente: valore 4 e lunghezza 3

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

48

U.Denni M.A.Frani

Build Array – Concatena più Array o aggiunge elementi ad un Array n-dimensionale. Nell’ esempio vengono concatenati i due Array precedenti:

Per unire due Array cliccate con il tasto destro del mouse sul nodo della funzione e selezionate Concatenate Inputs dal pop up.

Array Subset – Fornisce la porzione di un Array che inizia da Index e contiene un numero di elementi pari a Lenght. Nell’esempio, utilizziamo l’Array precedente come ingresso, la funzione Array Subset fornisce un Array con un index di 2 e un lenght di 3.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

49

U.Denni M.A.Frani

Index Array – Fornisce l’elemento di un Array che si trova in index. Nell’esempio utilizziamo L’Array precedente come input, la funzione Index Array fornisce 2 per un index di 0.

Possiamo anche utilizzare la funzione Index Array per estrarre una riga o una colonna da un Array bi-dimensionale e creare un sotto Array da quella originale. Per far questo, colleghiamo un Array 2D all’ingresso della funzione. Sono disponibili due terminali Index. Il terminale Index superiore indica la riga e il secondo terminale indica la colonna. Possiamo collegare gli ingressi ad entrambi i terminali Index per indicizzare un singolo elemento o possiamo collegare un solo terminale per estrarre una riga o una colonna di dati. Nell’ esempio colleghiamo l’Array all’ingresso della funzione. La funzione Index Array fornisce l’Array seguente per un index (row) di 0.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

50

U.Denni M.A.Frani

Cluster

Il Cluster , a differenza dell’Array, è una struttura che raggruppa dati anche non omogenei l’importante è che siano tutti o controlli o indicatori. I Clusters li troviamo nel Pannello frontale in Controls Modern Array, Matrix & Cluster e le funzioni nel diagramma a blocchi in Fuctions Programming Cluster, Class e Varian

Un esempio di Cluster è il terminale di Errore di ingresso e di uscita. Il Cluster di errore è formato da una flag booleana, un codice numerico, e una stringa per specificare il tipo di errore.

Raggruppare diversi elementi di dati in un cluster elimina il disordine causato dai collegamenti sullo schema a blocchi e riduce il numero di terminali nel riquadro connettori. Nel pannello frontale per creare un cluster di controlli o indicatori, selezionate un contenitore cluster dalla finestra Controls Modern Array, Matrix & Cluster, inseritelo nel pannello frontale, quindi inserite controlli o indicatori.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

51

U.Denni M.A.Frani

Ordine dei cluster

Quando LabVIEW elabora cluster di dati sono importanti sia i tipi di dati dei singoli elementi sia l’ordine di inserimento degli elementi stessi nel Cluster. Gli elementi del Cluster hanno un ordine logico non collegato alla loro posizione nella finestra ma all’ordine di inserimento degli oggetti nella finestra del Cluster. Se cancellate un elemento nel Cluster, l’ordine di inserimento si riordina automaticamente. E’ possibile modificare l’ordine degli elementi del Cluster cliccando con il tasto destro del mouse sulla cornice e selezionando Reorder Controls In Cluster dal pop up. La barra degli strumenti e il cluster cambiano come mostrato in figura.

Il riquadro bianco su ogni elemento mostra la sua posizione corrente, Il riquadro nero mostra la nuova posizione dell’ordine dell’elemento. Per impostare l’ordine di un elemento digitate il nuovo numero nel campo Click to set to e cliccate sull’elemento. Salvate le modifiche cliccando sul pulsante Confirm nella barra degli strumenti. Per tornare alle impostazioni originarie cliccate sul pulsante Cancel.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

52

U.Denni M.A.Frani

Funzioni Utilizziamo una funzione Bundle per creare un Cluster, utilizziamo una funzione Unbundle per estrarre gli elementi di un Cluster.

Bundle: Crea un Cluster con gli elementi nell'ordine specificato.

Bundle by Name: Crea un Cluster con elementi i cui elementi devono avere un nome, Label.

Unbundle: Divide un Cluster in ciascuno dei suoi singoli elementi.

Unbudle by Name: Restituisce gli elementi del cluster.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

53

U.Denni M.A.Frani

E’ possibile modificare il valore di un solo elemento di un Cluster collegando al terminale centrale delle Funzioni Bundle o Bundle by Name il prototipo di Cluster con cui vogliamo lavorare. Notiamo che le due funzioni si dimensionano con il numero esatto di elementi, in questo modo possiamo modificare l’elemento che ci interessa.

Esercizi (d)

1. Costruire un VI che inverte l’ordine di un Array contenete 10 elementi

2. Creare una Tavola Pitagorica.

3. Costruire un VI che genera un Array ad una dimensione, che moltiplica insieme coppie

di elementi a partire dagli elementi 0 e 1 e fornisca il risultato.

4. Creare un Cluster di pulsanti ed visualizzare quello premuto.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

54

U.Denni M.A.Frani

Grafici Quando effettuiamo una acquisizione dati, per visualizzare il loro andamento, utilizziamo un grafico. I grafici sono degli indicatori e li troviamo nelle palette del pannello frontale in Controls Modern Graph

Per rappresentare, su un grafico, valori acquisiti in funzione del tempo utilizzeremo una Waveform Chart visualizzando una forma d’onda che si può paragonare ad un foglio di un elettrocardiogramma. Per visualizzare più forme d’onda in una Waveform Chart possiamo connettere più elementi aggregando i dati con un Cluster.

Possiamo personalizzare la nostra visualizzazione dei dati cliccando con il tasto destro del mouse sul grafico e dal pop up Advanced Update Mode selezionando Strip Chart o Scope Chart o Sweep Chart, la modalità di default è Strip Chart.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

55

U.Denni M.A.Frani

Un grafico Strip Chart mostra i dati che scorrono continuamente da sinistra a destra lungo il grafico. Un grafico Scope Chart mostra un insieme di dati per volta, come un impulso o un’onda. Un grafico Sweep Chart è simile ad una Strip Chart ma varia nella visualizzazione perché mostra i dati più vecchi sulla destra e quelli nuovi sulla sinistra di una linea di separazione verticale. È possibile modificare i valori minimi e massimi degli assi, facendo doppio click sul valore con lo strumento “etichetta” e digitando il nuovo valore. Allo stesso modo è possibile modificare il nome dell'asse. Questi valori possono essere cambiati anche attraverso le proprietà della chart, tasto destro del mouse sulla Chart Properties. Cliccando con il tasto destro del mouse su Legend è possibile cambiare lo stile, forma e colore della traccia che viene visualizzata nel grafico. E’ possibile visualizzare altri strumenti di controllo del grafico facendo click con il tasto destro del mouse su grafico Visibile Item … scegliendo la voce che interessa.

Per rappresentare una grande quantità di dati useremo un Waveform Graph, che si trova in Controls Modern Graph. Possiamo lavorare con i Graph come con le Chart, ridimensionarli, cambiare il colore, lo stile, etc… attraverso le proprietà.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

56

U.Denni M.A.Frani

È possibile esportare i dati in formato Excel o in formato immagine del nostro grafico, cliccando con il tasto destro del mouse sul grafico: Export ….

E’possibile collegare un dato tipo Array ad una dimensione per un grafico con una dimensione, oppure un Array a due o più dimensioni per un grafico con due o più dimensioni.

Esercizi (e)

1. Costruire un VI che misura la Temperatura una volta al secondo e visualizzarla nel grafico in funzione del tempo. Confrontare la temperatura con due limiti, Inferiore e Superiore, impostati dall’utente che saranno visualizzati nel grafico. Accendere un led al superamento dei limiti. Indicare il valore Max e min della temperatura.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

57

U.Denni M.A.Frani

Stringhe

Una stringa è una sequenza di caratteri alfanumerici, in codice ASCII, visualizzabile o meno. Le stringhe forniscono un formato indipendente dal sistema operativo e dai programmi. Alcune delle applicazioni più comuni delle stringhe sono:

Creazione di semplici messaggi di testo.

Trasferimento di dati numerici come stringhe di caratteri agli strumenti.

Memorizzazione di dati numerici su disco.

Trasferimento di informazioni all’utente tramite finestre di dialogo. I controlli o indicatori Stringa li troviamo nel pannello frontale in Controls Modern String & Path.

Se abbiamo un testo molto lungo da scrivere o da visualizzare possiamo minimizzare lo spazio inserendo una scrollbar, con il tasto destro del mouse sull’oggetto Visible Item Vertical Scrollbar

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

58

U.Denni M.A.Frani

Sul pannello frontale cliccate con il tasto destro del mouse su un controllo o su un indicatore di stringa per selezionare il tipo di visualizzazione.

Le funzioni che si usano per lavorare con le stringhe si trovano in Functions Programming String.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

59

U.Denni M.A.Frani

Le funzioni di stringa comprendono:

String Lenght – Fornisce il numero di caratteri in una stringa, compresi i caratteri di spazio. Nell’ esempio, la funzione String Lenght fornisce una lenght di 25:

Concatenate Strings – Unisce stringhe d’ingresso e Array 1D di stringhe in un’unica stringa.

String Subset – Fornisce la sottostringa che inizia da offset e contiene un numero di caratteri pari a lenght. L’Offset del primo carattere nella stringa è 0. Nell’esempio la funzione String Subset fornisce la stringa, come indicata sul pannello, per un offset di 13 e una lenght di 4:

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

60

U.Denni M.A.Frani

Match Pattern – Cerca una Regular Expression in una stringa che inizia da un offset, se trova una corrispondenza divide la stringa in tre sottostringhe. Se non viene trovata una corrispondenza, Match Substring è vuoto e Offset Past Match è –1. Nell’ esempio utilizziamo una regular expression di ”: ” utilizzando “VOLTS DC: +1.22863E+1” come ingresso:

Format Into String converte Arguments di un qualsiasi formato in una stringa. Nell’ esempio, la funzione Format Into String fornisce la seguente stringa per un Format String di ” %.4f”, una input string di “Voltage is ” e un Argument di “1.28”:

%.4 f: % specifica il formato, “.4 “ indica il numero di cifre alla destra del punto decimale e “f “ indica un numero a virgola mobile con formato frazionario.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

61

U.Denni M.A.Frani

Clicchiamo con il tasto destro del mouse sulla funzione e selezioniamo Edit Format String dal pop up per creare o modificare una Format String.

Scan From String converte una stringa contenente caratteri numerici validi [ 0-9 . + - ex E+/-x] in un numero. La funzione inizia verificando la Input String che si trova in Initial Search Location. La funzione può effettuare la scansione di Input String in diversi tipi di dato, come numeri o booleani, basandosi su Format String. Nell’ esempio, utilizziamo una Format String “ %f”, una Initial Search Location di 8 e come Input String “VOLTS DC+1.28E+2”:

Per convertire dei numeri in stringhe e delle stringhe numeriche in numeri utilizziamo: Functions Programming String String/Number Conversion

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

62

U.Denni M.A.Frani

Esercizi (f)

1. Controllare che la password inserita sia uguale a quella memorizzata, permettendo tre tentativi di inserimento, non deve essere case sensitive.

2. Indicare quanti spazi sono presenti nella frase: “La tensione misurata è 5.00 Volt”.

3. Cambiare gli spazi presenti nella stringa precedente con punti esclamativi.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

63

U.Denni M.A.Frani

I/O Files

Quando scriviamo o leggiamo un file nel computer effettuiamo delle chiamate di Input o di Output. Una tipica operazione di I/O su un file coinvolge i seguenti processi:

1. Creare o aprire un file. Specificando il percorso (Path). Una volta creato o aperto, il file sarà rappresentato da un numero di riferimento ( Refnum).

2. Leggere o scrivere un file. 3. Chiudere un file.

In LabVIEW si possono usare o creare i seguenti tipi di file: Binario, ASCII, LVM e TDM.

Binario - I files binari sono il formato base per tutti gli altri formati di files.

ASCII - I files ASCII, chiamati anche files di testo, è uno standard usato nella maggior parte dei programmi.

LVM – I files dei dati di misurazione di LabVIEW (.lvm), sono files di testo delimitati da un “tab”, che si possono aprire sia come foglio di calcolo sia come testo. Il file .lvm include informazioni sui dati, la data e l’ora di acquisizione. Questo tipo di formato è un tipo specifico di file ASCII creato per LabVIEW.

TDM – E’ un tipo specifico di file binario, creato per i prodotti della National Instrumets. Consiste di due diversi file: una sezione XML che contiene gli attributi dei dati e un file binario per la forma d’onda.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

64

U.Denni M.A.Frani

Le Path si trovano nel pannello in Controls Modern String & Path

Quando inseriamo il controllo Path sul pannello, notiamo che a fianco compare un simbolo di cartella (Browse Buttom), facendo click su di essa si apre la finestra di dialogo di Windows da cui possiamo selezionare il file.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

65

U.Denni M.A.Frani

Le funzioni che si usano per lavorare con i files si trovano in Functions Programming File I/O.

I primi quattro VI della prima riga che abbiamo nei Files I/O sono VI ad alto livello, composti da SubVI.

Write to Spreadsheet File – Converte una array 2D o 1D di numeri, in singola precisione, in una stringa di testo e scrive la stringa su un nuovo file o l’accoda ad un file esistente.

Si possono trasporre i dati, il VI apre o crea il file prima di scriverci e lo chiude successivamente. Potete utilizzare questo VI per creare un file testo leggibile dalla maggior parte di applicazioni di fogli elettronici.

Read From Spreadsheet File – Legge un numero di linee o righe specificate da un file di testo numerico, iniziando con un offset impostato e converte i dati in una array 2D di numeri in singola precisione. Il VI apre il file prima di leggerlo e lo chiude successivamente. Potete utilizzare questo VI per leggere un file di fogli elettronici salvato in formato testo.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

66

U.Denni M.A.Frani

Write to Misurament File – Un Express Vi scrive dati su un file in formato testuale (.lvm) o binario (.tdm). E’ possibile specificare il metodo di misurazione , il tipo di intestazione e il delimitatore.

Read from Misurament File – Un Express VI legge i dati in formato testuale (.lvm) o binario (.tdm). Possiamo specificare il nome del file, il formato e le dimensioni del segmento da leggere.

E’ sconsigliato inserire i VI di alto livello nei cicli, perché i VI eseguono operazioni di apertura e chiusura ogni volta che vanno in esecuzione. Per svolgere operazioni di I/O di base utilizziamo i seguenti VI e funzioni:

Open/Create/Replace File – Apre o sostituisce un file esistente o crea un nuovo file. Se il File Path è vuoto, il VI visualizza una finestra di dialogo da cui possiamo creare e/o aprire il file.

Read from Text File – Legge dati di tipo testo dal file specificato in file o refnum, se non è connesso niente si aprirà una finestra di dialogo di Windows.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

67

U.Denni M.A.Frani

Write text File – Scrive i dati sul file specificato in file o refnum, se non è connesso niente si aprirà una finestra di dialogo di Windows.

Close File – Chiude il file specificato da refnum.

Write to Binary File – Funziona come un Write text file.

Read from Binary File – Legge i dati di tipo binario. È necessario specificare il tipo di dati

letti

Build Path – Crea una nuova Path concatenando alla Path base una stringa o una Path relativa.

Strip Path - Restituisce il nome del componente finale di una Path.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

68

U.Denni M.A.Frani

Quando utilizzare i file binari I files binari richiedono meno spazio sul disco per memorizzare la stessa quantità di informazioni. Un intero (INT8) occupa su un file binario sempre un byte indipendentemente dal suo valore. Quindi utilizzeremo i files binari per memorizzare grandi quantità di dati. Gli svantaggi sono la non portabilità da un tipo di calcolatore ad un altro e il fatto che non si può creare o modificare un file binario usando un editor di testi. Quando utilizzare file di testo I files di testo sono i più diffusi. Quasi tutti i sistemi operativi, insieme alla maggior parte delle applicazioni software, possono leggere e scrivere file in formato testo. In un file di testo il numero 0 occupa 1 byte mentre 92134 occupa cinque byte (ha cinque cifre e servono cinque caratteri per scriverlo), quindi non li utilizzeremo per memorizzare una grande quantità di dati. Per esempio i file di testo sono preferibili quando progettiamo di leggere o manipolare dati con altre applicazioni software come fogli elettronici o Word Processor.

Esercizi (g)

1. Creare un VI che acquisisce la temperatura e memorizza i dati ogni cento misure effettuate. Il file, in formato txt, deve risiedere in una cartella creata da voi con il nome così formato : anno, mese e giorno; e il nome del file cosi formato: ora, minuti e secondi. L’intestazione del file deve avere la data e l’ora di creazione. Nel file devono essere memorizzati il numero della misura e il valore di temperatura separati da un TAB.

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

69

U.Denni M.A.Frani

Esercizi (h)

Il programma di acquisizione (Data Acquisition) genera una cartella per ogni giorno contenente circa 30 files, ognuno di 100.000 eventi 2012-05-08 LNF-02-2012-05-08-000001.bin … … … LNF-02-2012-05-08-000030.bin Il programma che spacchetta i dati (Analyzer) analizza una cartella alla volta e crea tanti file testo quanti sono i file.bin Il lavoro richiede di creare un unico file con i dati acquisiti in un giorno . Procedura:

• controllare se all’interno della cartella ci sono file.bin minori di 100Kbyte, se sì eliminarli • creare una nuova cartella identificata con il seguente nome (aaaa-mm-dd_new) che dovrà

contenere i file testo • eseguire l’Analyzer

L’Analyzer all’interno di ogni cartella genera 4 tipi di file testo:

- file.out - file.2tt - file.sum - file.tim • per le cartelle out , tim e 2tt

• per l’estensioni .out , .tim e 2tt • ad ogni file eliminare la prima riga (commenti) • fare l’append dei file salvandolo in un nuovo file con il nome

LNF-xx-aaaa-mm-dd-tot.estensione (out / tim / 2tt) (xx = sito esperimento, per ITST E.Fermi è “02”).

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

70

U.Denni M.A.Frani

Esercizi (a)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

71

U.Denni M.A.Frani

Esercizi (b)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

72

U.Denni M.A.Frani

Esercizi (c)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

73

U.Denni M.A.Frani

Esercizi (c)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

74

U.Denni M.A.Frani

Esercizi (d)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

75

U.Denni M.A.Frani

Esercizi (e)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

76

U.Denni M.A.Frani

Esercizi (f)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

77

U.Denni M.A.Frani

Esercizi (g)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

78

U.Denni M.A.Frani

Esercizi (g)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

79

U.Denni M.A.Frani

Esercizi (h)

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

80

U.Denni M.A.Frani

7 - 11 maggio 2012 REPARTO AUTOMATISMI & CONTROLLI LNF DIV. RICERCA

81

U.Denni M.A.Frani

Ver. 1.0.0 24 maggio 2012

Ringraziamo la Dottoressa Silvia Miozzi e il Sig. Giuseppe Papalino per la revisione del testo.