Introduzione a National Instruments LabVIEW Cosa è e a cosa serve… E’ un linguaggio di programmazione grafico orientato a: • Acquisizione dati • Controllo di strumenti VME VXI e molto altro! Profibus GPIB Installare LabVIEW • LabVIEW installato nei computer del laboratorio, con licenza “campus” • Per provare sul proprio PC senza licenza: versione di prova (valida 30 giorni) scaricabile dal sito National Instruments: https://lumen.ni.com/nicif/i/evallvuser/content.xhtml • Necessari circa 2 GB liberi su disco • Attenzione alle versioni! – In generale, progetti salvati da versioni precedenti possono essere aperti con una qualsiasi versione successiva. – E’ possibile salvare per la versione corrente o fino a una certa versione precedente... Attenzione in particolare quando si ha a che fare con installazioni su PC “datati” con versioni di LabVIEW di qualche anno fa. LabVIEW: una lunga storia ... al 2011 Dal 1986 ... (sull’unico personal computer allora esistente, ovvero il Macintosh) LabVIEW: una lunga storia ... 5.0 6i (6.0) 6.1 7express (7.0) 7.1 8.0 8.20 8.5 8.6 2009 (9.0) 2010 (10.0) 2011 (11.0) Nei laboratori di fisica delle alte energie si possono trovare anche versioni “antiche”... 1998 2000 2001 2003 2004 2005 2007 2008 … ma niente paura! LabVIEW: un prodotto modulare • In realtà le funzionalità di base e lo “stile” di programmazione non sono cambiate in modo radicale sin dalle prime versioni, anche se il prodotto si è arricchito di una quantità enorme di funzioni e librerie aggiuntive • Un prodotto modulare • Molte librerie e funzioni aggiuntive sviluppate da produttori “third party” sono state acquisite da National Instruments e inserite nella versione successiva di LabVIEW o rese facilmente integrabili come librerie standard: toolkit • Moltissimi add-on o toolkit scaricabili dal sito National Instruments (ad esempio, alcuni plugin per salvare o rileggere dati in formati standard) Esempio: Internet toolkit, tcp/ip socket, httpd server, ftp server, ecc… LabVIEW: un prodotto modulare Principali componenti • Signal processing, analysis, and connectivity • Integration with real-time systems, FPGAs, and other deployment hardware • Data management, data logging, and reporting • Control and simulation • Application distribution Hardware e sistemi embedded • Molti produttori di hardware forniscono driver e codice di esempio – e in qualche caso tutto ciò che serve a controllare e rendere funzionale il dispositivo – in forma di librerie e vi di LabVIEW • National Instruments ha anche cominciato a sviluppare sistemi “embedded”, nei quali il codice LabVIEW implementato direttamente nei dispositivi: Compact Field Point • Dati disponibili su server httpd • Il linguaggio di LabVIEW fu pensato per abbinare un ambiente di sviluppo grafico con un metodo di programmazione basato sul flusso dei dati, anziché sui flussi di controllo come nei linguaggi sequenziali tradizionali. Una delle conseguenze fondamentali di questa originaria scelta è la sua naturale inclinazione al parallelismo • La principale metafora dello strumento virtuale: virtual instrument (vi) Lo strumento virtuale “Diagram” Control Indicator “Panel” Diagramma a blocchi Colore e spessore del filo=tipo di variabile Real Array di Real Integer Cluster (struttura di variabili di tipo diverso) Boolean String “Diagram” Bordo spesso=Controllo Bordo sottile=Indicatore VISA • Linguaggio standard di input/output per la programmazione di strumenti e dispositivi • API (application program interface) di alto livello che si interfaccia con i driver di basso livello VISA Seriale GPIB VXI NI 488.2 NI-VXI Driver seriale (sistema operativo) • Risorsa=strumento, risorse gestite da un unico Resource Manager • Sessione=connessione alla risorsa, attraverso il RM • Messaggi e eventi Lo strumento virtuale Sub-vi “Block Diagram” Driver Control Indicator “Panel” Hardware Panel Font, allineamento, ecc. Icona/connettore toolbar Esegui Esegui in “loop” Interrompi l’esecuzione Palette dei controlli e degli indicatori Sospendi l’esecuzione Block Diagram Toolbar Palette delle funzioni e delle strutture di dati Diagram toolbar Highlight: attiva/disattiva la modalità di debug. In modalità debug, quando si manda in RUN il vi, l’esecuzione avviene passo per passo, mostrando il flusso di dati (e i valori delle variabili) nel block diagram. Step into: fa uno step di esecuzione, e quando arriva a un vi, entra e si mette in attesa dello step successivo Step over: esegue completamente un nodo – senza entrare nel nodo (se è vi) – e si mette in pausa al nodo successivo Step out: completa l’esecuzione del nodo corrente e sale al livello superiore (se si è già al livello top è disabilitato) Connettori, fili, nodi, ecc. Seleziona colore Seleziona/Sposta Modifica/inserisci testo Connetti filo Break-point Scorri Cattura colore Seleziona colore Probe (guarda il valore) Diagram: strutture di controllo • CASE (If/then) • LOOP (while) If =FALSE… If =TRUE… • Può funzionare come uno switch/case del C con variabili numeriche, string, eccetera… • Attenzione al default! Diagram: strutture di controllo • CASE (If/then) • LOOP (while) Variabile integer che incrementa il suo valore per ogni ciclo del loop (0,1,2,…) Shift register: contiene il valore di una variabile che viene “riportata” al ciclo successivo While loop Esegue tutto il contenuto fino a che: - La variabile boolean diventa TRUE (stop when…) oppure - La variabile boolean diventa FALSE (loop until…) Loop Diagram: strutture di controllo • LOOP (for) Ripete N volte il codice contenuto, N deve essere una variabile integer Nota: anche in LabVIEW esiste il cast, ovvero il meccanismo per cui una variabile può essere trattata come variabile di tipo diverso. Esempi: • Nel caso del numero di iterazioni del for loop, se si mette in input al connettore N una variabile numerica di tipo double essa verrà forzata a integer • Nel caso in cui si faccia un’operazione aritmetica tra variabili integer e double, il risultato sarà evidentemente un double L’operazione di cast viene segnalata con un puntino (attenzione: si può disabilitare) (right click) N.B. Approfittiamo per sottolineare che, a parte versioni molto precedenti, la visualizzazione di controlli e indicatori è (di default) di tipo “icon” Diagram: strutture di controllo • LOOP (for) • Come nel while-loop, i è un integer che contiene l’indice del loop • Il nodo di ingresso in un loop è detto tunnel • Naturalmente non modifica le variabili scalari • Di default tratta anche le variabili di tipo array senza modificarle Attenzione agli spezzoni di filo “orfani” Spesso segnalano una connessione mancante o venuta a mancare e dunque un’interruzione nel “flusso” del dato Rendono non eseguibile il vi (freccia RUN “rotta”) Diagram: strutture di controllo • LOOP (for) array di integer a 2 dimensioni Calcola la dimensione di un array Estrae una componente da un array • Il tunnel di ingresso in un loop, di default tratta le variabili di tipo array senza modificarle • Se invece si attiva l’indexing ciascun ciclo del loop accederà a una compentente dell’array • Si può allora lasciare il connettore N senza input, attivando l’auto-indexing: il numero di iterazioni del loop viene determinato dalla dimensione dell’array Diagram: strutture di controllo • SEQUENCE: una successione di “frame” eseguiti uno dopo l’altro Variabile locale (definita in questo frame) Variabile locale (non ancora disponibile perché definita in un frame successivo) Variabile locale definita in un frame precedente La sequence sopra equivale semplicemente a: Sequence Panel: indicatori e controlli Waveform chart: rappresenta l’andamento dei valori assunti da una variabile numerica Push button: controllo di tipo boolean Gauge: indicatore di tipo “analogico” del valore istantaneo di una variabile numerica Molti altri elementi: menù, tabelle, elementi grafici… Panel LabVIEW 2011 (Windows XP) LabVIEW 7 express (Sun Solaris) Boolean Boolean Determina il comportamento meccanico del bottone: - Torna sù o rimane schiacciato? - Cambia stato quando viene schiacciato o quando viene lasciato? - Latch? Numeric (e Graph) Numeric Suggerimento: Il tasto destro del mouse è spesso molto prezioso… Array drag Cluster String Context help Uno strumento fondamentale!... Gestione file Gestione file Oggetto di tipo file-path (simile al tipo string) file-reference Cluster con le variabili di errore Apre il file (attraverso il sistema operativo) e restituisce un “puntatore” di tipo file-reference Costante ring integer Scrivi una string Leggi una string Mostra la string in un indicatore (string) Chiudi il file (attraverso il sistema operativo) Graph Graph Express vi Non sembra fare tanta differenza… Express vi La principale differenza tra vi e express vi è che quest’ultimo non richiede in pratica programmazione, ma vengono configurati con delle dialog box Express vi …torniamo al nostro esempio del graph XY Supponiamo di voler aggiornare il graph in modo dinamico Simula un segnale sinusoidale Wait Express vi La principale differenza tra vi e express vi è che quest’ultimo non richiede in pratica programmazione, ma vengono configurati con delle dialog box Molto utili e semplici da usare Esempio tipico è l’analisi dei segnali: Express vi Gli express vi prevedono un nuovo tipo di dati il “dynamic data type” E di conseguenza, lo strumento di conversione da/a a dati non dinamici (che è naturalmente un express vi a sua volta) Legge una tensione, per esempio una sonda di temperatura Converti da gradi F a gradi C vi e sub-vi Ripeti fino a che non viene spinto il bottone di stop vi e sub-vi Blocco di codice ripetuto Blocco di codice ripetuto vi e sub-vi Un nuovo vi con il blocco di codice che ci interessa… Doppio click per modificare l’icona (utile per distinguere i diversi vi che creiamo nel momento in cui li riutilizzeremo come “sub-routine”) Singolo click per modidicare il connector pane Click su indicatore/controllo e su un connettore per associarli A questo punto sarà utilizzabile all’interno di un altro vi Naturalmente connettendo un input (controllo) boolean e un output (indicatore) double vi e sub-vi Il codice da cui siamo partiti diventa quindi più leggibile: Gerarchia dei vi Attenzione: • Ciascun vi può essere il “top” della gerarchia se viene aperto ed eseguito in standalone • Un vi può essere richiamato da diversi vi all’interno della stessa gerarchia: attenzione agli input/output! • Non solo il numero e tipo di connettori, • Ma anche la loro posizione sul “connector pane” Non è così complicato… Viene mostrata la gerarchia anche di alcuni vi forniti di default da LabVIEW: in questo esempio “Write to spreadsheet file” e “Read from spreadsheet file” • Se uno o più sub-vi non vengono trovati o non sono eseguibili (per esempio il loro connector pane è differente da quello che il vi “top” richiederebbe), naturalmente il vi top non è eseguibile, e questo viene segnalato dalla freccia RUN rotta • Una finestra elenca i sub-vi che hanno errori e il dettaglio degli errori Gerarchia dei vi Attenzione! • LabVIEW ricorda la posizione nel filesystem dei sub-vi che vengono “richiamati” da un vi, • Quando si apre un vi già salvato, cercherà di aprire il file che corrisponde a ciascun vi nella posizione in cui si trovava quando è stato salvato il vi “top”, poi avvia una ricerca automatica (sullo stesso identico nome di file, ma in altre directory), infine – se non lo trova – apre una dialog per farlo localizzare all’utente… • Quando si chiuderà il vi “top” sarà necessario salvarlo anche se solo qualche sub-vi è stato trovato in una directory differente rispetto all’ultimo salvataggio Variabili locali Variabili locali Da “indicatore” (variabile in write) diventa “controllo” (variabile in read) Variabili globali Modifica e salva su disco il pannello… • Utilizzabile e modificabile da ogni vi e sub-vi nella gerarchia • Di fatto, un sub-vi essa stessa • Modificabile anche da qualsiasi altro vi in memoria (che naturalmente include la variabile globale), anche se non fa parte della gerarchia A proposito di locali e globali… Spesso si dice che un buon stile di programmazione non dovrebbe prevedere l’uso di variabili globali e, in LabVIEW, nenache delle variabili local E’ certamente vero che rallentano l’esecuzione e richiedono più memoria… … ma spesso semplificano la programmazione e – cosa ancora più importante – migliorano la leggibilità del Block Diagram • In generale: LabVIEW chiede di salvare il vi quando lo si chiude ogni volta che la versione in memoria è/appare differente da quella salvata sul disco (nell’esempio anche se nessuna modifica è stata fatta dal programmatore, il vi è stato salvato su un diverso sistema operativo e dunque le chiamate di sistema sono state “ricompilate”) C-include (cin) C-include (cin) (right click) Sempre più C: LabWindows/CVI LabWindows/CVI • E’ un IDE (Integrated Development Environment) ANSI C • Fornisce una serie di strumenti per lo sviluppo di interfacce grafiche… • …ed è naturalmente orientato all’acquisizione dati e al controllo di strumenti • Ha naturalmente un gran numero di librerie standard • Non è solo una questione di linguaggio grafico piuttosto che ANSI C: LabWindows/CVI permette lo sviluppo di sistemi “real time” Gestione file Nella gestione dei file può manifestarsi qualche (in genere piccola) incompatibilità tra una versione e l’altra o tra diverse piattaforme LabVIEW 7 express (Sun Solaris) LabVIEW 2011 (Windows XP) MAX MAX Labview è… Manuali, guide, tutorial... • Introduzione a LabVIEW online: – http://www.ni.com/gettingstarted/ labviewbasics/i/ • Tutorial completo: – www.ni.com/pdf/manuals/320998a.pdf • Wiki pages dedicate: – http://labviewwiki.org/LabVIEW • Labview portal: – http://www.labviewportal.eu/en/home