Esercitazione A-2
Transcript
Esercitazione A-2
LabVIEW Corso Base II Corso sulla versione software 6.0 Edizione settembre 2000 Part Number 320629G-01 Traduzione Luglio 2001 A Survey of Modern Computer-Based Experiments Copyright © Copyright 2000 National Instruments Corporation. Tutti i diritti riservati. In base alle leggi sul copyright questa pubblicazione non può essere riprodotta o trasmessa in alcuna forma elettronica o meccanica, inclusa la fotocopia, la registrazione, la memorizzazione in banche dati, o tradotta, completamente o parzialmente, senza il consenso preventivo della National Instruments Corporation. I prodotti e i nomi delle società elencati sono marchi o nomi commerciali registrati delle rispettive società. Marchi LabVIEW™, National Instrument™ e ni.com™ sono marchi registrati di National Instruments Corporation. I prodotti o le società citate sono marchi registrati o marchi delle rispettive società. Indice Worldwide Technical Support and Product Information ni.com National Instruments Corporate Headquarters 11500 North Mopac Expressway Austin, Texas 78759-3504 USA Tel: 512 794 0100 Worldwide Offices Australia 03 9879 5166, Austria 0662 45 79 90 0, Belgium 02 757 00 20, Brazil 011 284 5011, Canada (Calgary) 403 274 9391, Canada (Ontario) 905 785 0085, Canada (Québec) 514 694 8521, China 0755 3904939, Denmark 45 76 26 00, Finland 09 725 725 11, France 01 48 14 24 24, Germany 089 741 31 30, Greece 30 1 42 96 427, Hong Kong 2645 3186, India 91805275406, Israel 03 6120092, Italy 02 413091, Japan 03 5472 2970, Korea 02 596 7456, Mexico (D.F.) 5 280 7625, Mexico (Monterrey) 8 357 7695, Netherlands 0348 433466, New Zealand 09 914 0488, Norway 32 27 73 00, Poland 0 22 528 94 06, Portugal 351 1 726 9011, Singapore 2265886, Spain 91 640 0085, Sweden 08 587 895 00, Switzerland 056 200 51 51, Taiwan 02 2528 7227, United Kingdom 01635 523545 LabVIEW Corso Base II ii National Instruments Corporation Indice Indice Guida per lo studente A. Descrizione di questo manuale ...................................................................... GS-1 B. Prerequisiti ..................................................................................................... GS-3 C. Installazione del software per il corso ........................................................... GS-4 D. Obiettivi del corso.......................................................................................... GS-5 E. Tavola d’orientamento ................................................................................... GS-6 F. Convenzioni adottate nel corso ...................................................................... GS-7 Lezione 1 Pianificazione di applicazioni in LabVIEW A. Il processo di pianificazione e di progetto..................................................... 1-2 B. Il processo di implementazione ..................................................................... 1-3 C. Tecniche di gestione degli errori.................................................................... 1-4 D. Architetture di programmazione in LabVIEW .............................................. 1-10 E. Modelli di VI.................................................................................................. 1-21 Sommario, trucchi e consigli .............................................................................. 1-24 Lezione 2 Progettazione di pannelli frontali A. Nozioni fondamentali sull’interfaccia utente................................................. 2-2 B. Utilizzo di cluster booleani come menu......................................................... 2-14 C. Nodi proprietà ................................................................................................ 2-24 Proprietà comuni................................................................................................. 2-27 D. Proprietà dei grafici ....................................................................................... 2-37 E. Riferimenti al controllo .................................................................................. 2-46 F. Menu run-time di LabVIEW (opzionale)....................................................... 2-51 G. Diagrammi d’intensità ................................................................................... 2-60 Sommario, trucchi e consigli .............................................................................. 2-64 Esercizi aggiuntivi .............................................................................................. 2-66 National Instruments Corporation iii LabVIEW Corso Base I Indice Lezione 3 Tecniche di gestione dei dati A. Tecniche di gestione dei dati in LabVIEW.................................................... 3-2 B. Variabili locali ............................................................................................... 3-4 C. Variabili globali ............................................................................................. 3-14 D. Avvertenze importanti su variabili locali e globali........................................ 3-23 E. DataSocket ..................................................................................................... 3-26 Sommario, trucchi e consigli .............................................................................. 3-34 Esercizi aggiuntivi .............................................................................................. 3-35 Lezione 4 Tecniche avanzate di I/O su file A. Lavorare con file a flusso di byte .................................................................. 4-2 B. File datalog di LabVIEW............................................................................... 4-12 C. Salvataggio di dati su disco............................................................................ 4-19 Sommario, trucchi e consigli .............................................................................. 4-20 Esercizi aggiuntivi .............................................................................................. 4-21 Lezione 5 Sviluppo di grandi applicazioni in LabVIEW A. Assemblaggio di un’applicazione in LabVIEW ............................................ 5-2 B. Caratteristiche di LabVIEW per lo sviluppo di progetti................................ 5-14 C. Strumenti di LabVIEW per la gestione di progetti ........................................ 5-22 Sommario, trucchi e consigli .............................................................................. 5-34 Esercizi aggiuntivi .............................................................................................. 5-35 Lezione 6 Controllo delle prestazioni A. Panoramica sul multithreading e il multitasking in LabVIEW ..................... 6-2 B. La finestra Profile .......................................................................................... 6-6 C. Velocizzare i VI ............................................................................................. 6-13 D. Memoria di sistema........................................................................................ 6-26 E. Ottimizzazione dell’uso della memoria da parte dei VI................................. 6-29 Sommario, trucchi e consigli .............................................................................. 6-47 Appendice A. SubVI polimorfici.......................................................................................... A-2 B. Grafica personalizzata in LabVIEW .............................................................. A-7 C. Il Web Server in LabVIEW ........................................................................... A-14 D. Informazioni aggiuntive................................................................................. A-19 E. Tabella delle corrispondenze dei caratteri ASCII .......................................... A-21 LabVIEW Corso Base II iv National Instruments Corporation Guida per lo studente Grazie per aver acquistato il kit del Corso Base II di LabVIEW. Voi potrete iniziare a sviluppare un’applicazione subito dopo aver completato gli esercizi di questo manuale. Questo manuale e il software di accompagnamento vengono utilizzati nel Corso Base II di LabVIEW a carattere pratico della durata di due giorni. Voi potete utilizzare l’acquisto di questo kit per iscrivervi al corso senza versare la corrispondente quota di registrazione se vi registrate entro 90 giorni dall’acquisto del kit. Visitate la sezione Customer Education del sito ni.com per i programmi dei corsi online, i prospetti, i centri di formazione, e la registrazione di classi. A. Descrizione di questo manuale Questo manuale vi insegna ad utilizzare LabVIEW per sviluppare applicazioni di test e misure, di acquisizione dati, di controllo degli strumenti, di memorizzazione dati, di analisi delle misure e di generazione di rapporti. Questo manuale presuppone che abbiate familiarità con Windows, Macintosh o Unix e che abbiate esperienza nella scrittura di algoritmi sotto forma di diagrammi di flusso o di schemi a blocchi e che inoltre abbiate svolto il Corso Base I o abbiate un’esperienza equivalente. Il manuale è suddiviso in lezioni, ognuna delle quali copre un argomento o un insieme di argomenti. Ogni lezione consiste in: y Un’introduzione che descrive lo scopo della lezione e che cosa imparerete y Una descrizione degli argomenti trattati nella lezione y Un insieme di esercizi per fissare gli argomenti y Un insieme di esercizi aggiuntivi per approfondimenti se il tempo lo consente y Un sommario che sottolinea concetti importanti e le conoscenze impartite nella lezione National Instruments Corporation GS-1 LabVIEW Corso Base II Guida per lo studente Diversi esercizi presenti in questo manuale utilizzano un dispositivo plugin multifunzione per l’acquisizione dati (DAQ) collegato ad un DAQ Signal Accessory contenente un sensore di temperatura, un generatore di funzioni e dei LED. Se non possedete questo hardware, potete completare comunque la maggior parte degli esercizi. Assicuratevi di utilizzare le versioni demo dei VI quando lavorate con gli esercizi. Gli esercizi che richiedono esplicitamente dell’hardware sono contrassegnati con l’icona mostrata a lato. Potete anche utilizzare altro hardware rispetto a quello indicato precedentemente. Per esempio potete utilizzare un altro dispositivo DAQ della National Instruments collegato ad una sorgente di segnale, come ad esempio un generatore di funzioni. Ogni esercizio mostra una figura con un pannello frontale finito e lo schema a blocchi dopo che avete mandato in esecuzione il VI, come mostrato nell’illustrazione seguente. Dopo ogni schema a blocchi segue una descrizione di ogni oggetto presente nello schema a blocchi. 1 Pannello frontale LabVIEW Corso Base II 2 Schema a blocchi GS-2 3 Commenti (questi non li inserite) National Instruments Corporation Guida per lo studente B. Prerequisiti Prima di utilizzare questo manuale, assicuratevi di avere i seguenti: (Windows) Windows 95 o successivi installato sul vostro computer; (Macintosh) Power Macintosh con sistema operativo MacOS 7.6.1 o successivi; (UNIX) workstation Sun con Solaris 2.5 o successivi e software di sistema XWindows, una workstation modello HP 9000 serie 700 con HP-UX 10.20 o successivi o un PC con Linux kernel 2.0.x o successivi per architetture Intel x86. (Windows) Dispositivo DAQ multifunzione configurato come device 1 utilizzando Measurement & Automation Explorer; (Macintosh) Dispositivo DAQ multifunzione nello Slot 1 DAQ Signal Accessory, conduttori e cavi LabView Professional Development System 6.0 o successivi (Opzionale) Un’applicazione per word processing come (Windows) Notepad, WordPad, (Macintosh) TeachText, (UNIX) Text Editor, vi o vuepad I dischetti del Corso Base II di LabVIEW, contenenti i seguenti file: Nome file LVB2SW.exe LVB2Sol.exe LVB2Read.txt National Instruments Corporation Descrizione Archivio contenente i VI utilizzati nel corso Archivio contenente gli esercizi completi del corso File di testo che descrive la procedura di installazione del software del corso GS-3 LabVIEW Corso Base II Guida per lo studente C. Installazione del software per il corso Seguite i passi seguenti per installare il software di LabVIEW Corso Base. Windows 1. Avviate il programma denominato LVB2SW.exe. I file del corso verranno estratti nella directory c:\exercises\LV Basics 2. Basics2.llb verrà installata nella directory LabVIEW\user.lib. Quando avviate LabVIEW, comparirà una palette denominata Basics 2 Course nella palette User Libraries della palette Functions. 2. (Opzionale) Cliccate due volte su LVB2Sol.exe per installare le soluzioni di tutti gli esercizi nella directory c:\solutions\LV Basics 2. Macintosh 1. Come mostrato nei punti 1 e 2 dell’installazione sotto Windows, utilizzate un PC con Windows per estrarre i file e trasferirli nel vostro Macintosh. Se non avete accesso ad un PC, contattate National Instruments per i file decompressi. 2. Copiate i file sul vostro hard disk utilizzando la struttura a directory descritta nella sezione Windows. UNIX 1. Come mostrato nei punti 1 e 2 dell’installazione sotto Windows, utilizzate un PC con Windows per estrarre i file e trasferirli nella vostra workstation. Se non avete accesso ad un PC, contattate National Instruments per i file decompressi. 2. Caricate il disco PC che state utilizzando per trasferire i file. Il corso presuppone la struttura a directory descritta nella sezione Windows. Copiate tutti i file nelle opportune locazioni. LabVIEW Corso Base II GS-4 National Instruments Corporation Guida per lo studente D. Obiettivi del corso Il corso vi fornisce una preparazione che vi consente di: y Comprendere il processo di sviluppo dei VI. y Comprendere alcune architetture comuni di programmazione di VI. y Progettare interfacce utente (pannelli frontali) efficaci. y Utilizzare le tecniche di gestione dei dati nei VI. y Utilizzare le tecniche avanzate di I/O su file. y Utilizzare LabVIEW per creare le vostre applicazioni. y Migliorare l’utilizzo della memoria e le prestazioni dei vostri VI. Applicherete questi concetti nella Lezione 5, Sviluppo di applicazioni più grandi in LabVIEW. Nella Lezione 5, voi realizzerete un progetto che utilizza i VI che avete creato nelle Lezioni 1, 2, 3 e 4. Mentre questi VI singolarmente illustrano concetti e caratteristiche specifici di LabVIEW, essi fanno parte di un progetto più grande che completerete nella Lezione 5. Il progetto che realizzerete dovrà soddisfare i punti seguenti: y Fornire un’interfaccia utente a menu. y Richiedere all’utente di entrare nel programma con un nome e una password corretti. y Se l’immissione dei dati da parte dell’utente non è corretta, disabilitare le altre caratteristiche. y Acquisire dati con la specifica configurazione dell’utente. y L’utente può analizzare un sottoinsieme di dati e salvare i risultati su file. y L’utente può caricare e visualizzare precedentemente salvati su disco. i risultati dell’analisi Questo corso non vi fornisce le descrizioni seguenti: y Metodi di programmazione in LabVIEW coperti dal LabVIEW Corso Base I. y Teoria della programmazione y Ogni VI interno, funzione o oggetto y Lo sviluppo di un’applicazione completa per ogni studente della classe. National Instruments Corporation GS-5 LabVIEW Corso Base II Guida per lo studente E. Tavola d’orientamento Pianificazione di applicazioni in LabVIEW Sviluppo di diagrammi di flusso per il VI Application Exercise Progettazione di pannelli frontali Realizzazione di: Menu di interfaccia utente, VI Acquire Data, VI Analyze & Present Data, VI Disable Controls Tecniche di gestione dei dati Realizzazione del VI Login Tecniche avanzate di I/O su file Creazione di progetti più grandi Realizzazione del VI Save Data to File (completa il VI Analysis & Present Data) Studio del VI View Analysis File Assemblaggio di parti per realizzare il VI Application Exercise e terminare il progetto Considerazioni sulle prestazioni LabVIEW Corso Base II GS-6 National Instruments Corporation Guida per lo studente F. Convenzioni adottate nel corso Nel manuale del corso vengono adottate le convenzioni seguenti: » Il simbolo » vi guida attraverso i menu nidificati e le opzioni delle finestre di dialogo fino all’azione finale. La sequenza File»Page Setup»Options vi indica che dovete partire dal menu File, scegliere la voce Page Setup e quindi scegliere Options dall’ultima finestra di dialogo. Questa icona indica una nota, e vi avverte di leggere una informazione importante. Questa icona vi indica che l’esercitazione richiede un’interfaccia GPIB plug-in o un dispositivo DAQ. bold Il testo in grassetto vi indica le voci che voi dovete selezionare o su cui cliccare del software, come le voci di menu e le opzioni della finestra di dialogo. Il testo in grassetto indica anche nomi di parametro, controlli e pulsanti del pannello frontale, finestre di dialogo, sezioni di finestre di dialogo, nomi di menu e nomi di palette. italic Il testo in corsivo indica variabili, enfasi, un riferimento incrociato o un’introduzione ad un concetto chiave. Questo font indica anche del testo che dovete introdurre o un valore che dovete applicare. courier Il testo in questo font indica testo o caratteri che dovete inserire da tastiera, sezioni di codice, esempi di programmazione, ed esempi di sintassi. Questo font viene usato anche per nomi propri di drive di dischi, percorsi, directory, sottoprogrammi, nomi di dispositivi, funzioni, operazioni, variabili, nomi file ed estensioni, parti di codice. courier bold Arial narrow Il testo in questo font indica una piattaforma specifica e indica che il testo seguente si applica solo a quella piattaforma. Click tasto destro (Macintosh) Premere <Command> e cliccare per ottenere la stessa azione di un click col tasto destro del mouse. National Instruments Corporation GS-7 LabVIEW Corso Base II Guida per lo studente LabVIEW Corso Base II GS-8 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Questa lezione descrive alcuni argomenti riguardanti lo sviluppo di applicazioni in LabVIEW, incluso il processo di progettazione, l’organizzazione di subVI componenti e il processo di combinazione di questi componenti per creare un’applicazione completa. Questa lezione descrive anche le comuni architetture di programmazione in LabVIEW tramite alcuni strumenti che vi aiutano nella realizzazione di VI. Imparerete: A. A pianificare e progettare nel modo migliore lo sviluppo di applicazioni in LabVIEW B. A convertire le vostre linee guida in subVI di LabVIEW C. A conoscere le tecniche di gestione degli errori D. A conoscere le architetture di programmazione in LabVIEW più comuni E. A conoscere i modelli dei VI National Instruments Corporation 1-1 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW A. Il processo di pianificazione e di progetto Per impostare grandi progetti in LabVIEW, vedrete che di solito inizierete con un approccio di tipo top-down. Questo vuol dire che inizialmente definite le caratteristiche e le specifiche generali. Dopo aver definito i requisiti dell’applicazione in base alle esigenze del vostro cliente, iniziate a sviluppare i subVI che volete eventualmente assemblare per creare il progetto completo. Questo stadio rappresenta il periodo di sviluppo bottom-up. Il riscontro con il cliente vi aiuta a determinare nuove caratteristiche e miglioramenti per la successiva versione del prodotto, riportandovi alla fase progettuale. Lo schema seguente illustra questo processo di sviluppo del progetto. Processo di confronto con il cliente Definizione del progetto Prove e rilascio del prodotto finale Progetto del diagramma di flusso Integrazione di subVI nel progetto Implementazione dei nodi come VI Prove sui subVI Top-Down Bottom-up Processo di sviluppo dei progetti in LabVIEW Progettare un diagramma di flusso vi aiuta a visualizzare il funzionamento della vostra applicazione e ad impostare la gerarchia complessiva del vostro progetto. Siccome LabVIEW è un linguaggio di programmazione a flusso di dati e i suoi schemi a blocchi sono simili a diagrammi di flusso tipici, è importante pianificare con cura questo diagramma. Potete implementare direttamente molti nodi del diagramma di flusso come subVI di LabVIEW. Pianificando con cura il diagramma di flusso prima dell’implementazione della vostra applicazione in LabVIEW, potrete risparmiare del tempo successivamente. LabVIEW Corso Base II 1-2 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Tenete comunque presente le seguenti linee guida per lo sviluppo del progetto: • Definite accuratamente le specifiche del sistema. • Determinate in maniera chiara le aspettative dell’utente finale. • Documentate che cosa deve effettuare l’applicazione. • Pianificate per il futuro modifiche ed aggiunte. B. Il processo di implementazione Dopo aver completato il processo di pianificazione, implementate la vostra applicazione sviluppando i subVI che corrispondono ai nodi del diagramma di flusso. Sebbene non possiate sempre adottare questo approccio, esso vi aiuta a rendere la vostra applicazione modulare. Definendo in maniera chiara una gerarchia delle specifiche della vostra applicazione, create uno schema per l’organizzazione dei VI che sviluppate. Inoltre, la struttura a moduli rende più facile il test di piccole parti di un’applicazione prima di passare ad una loro combinazione. Se realizzate un’intera applicazione su un unico schema a blocchi senza subVI, potreste non essere in grado di iniziare un test senza prima aver realizzato la maggior parte dell’applicazione. A quel punto, risulta molto difficile risolvere problemi che si dovessero presentare. Inoltre, effettuando test su parti più piccole di VI, più specifiche, potete determinare difetti di programmazione iniziali e correggerli prima di investire ore in implementazione. Prevedendo uno sviluppo modulare e gerarchico, è più facile mantenere il controllo del codice sorgente del vostro progetto e dello stato del progetto. Un altro vantaggio che deriva dall’utilizzo di subVI è che sarà più facile in futuro apportare modifiche e miglioramenti all’applicazione. Dopo aver realizzato e testato i subVI necessari, potrete completare l’applicazione in LabVIEW. Questa è la parte di sviluppo bottom-up. National Instruments Corporation 1-3 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW C. Tecniche di gestione degli errori Nel LabVIEW Corso Base I, avete utilizzato i cluster di error in e di error out per trasferire le informazioni sugli errori tra funzioni e subVI. Questi cluster di errore contengono tre parti di informazioneun booleano di stato che indica un valore true per un errore, un numero che indica il codice di errore e la stringa sorgente che visualizza quale funzione o subVI ha generato l’errore. Potete utilizzare la funzione Unbundle o Unbundle By Name che si trova nella palette Functions»Cluster per estrarre questa informazione come indicato nello schema a blocchi seguente. Cluster di errore L’esempio precedente illustra un tipico uso dell’approccio error in/error out. I VI di I/O su File e le funzioni utilizzano i cluster di errore per passare le informazioni da un’operazione alla successiva. Potete quindi utilizzare i VI di gestione degli errori dalla riga in basso della palette Time&Dialog per avvisare l’utente di ogni condizione di errore verificatasi. I VI di gestione degli errori Il VI Simple Error Handler prende il cluster error in o il valore del codice di errore e in caso di errore apre una finestra di dialogo che descrive l’errore e le possibili ragioni di esso. Potete anche modificare il tipo di finestra di dialogo che si apre visualizzando un pulsante OK, non visualizzare per niente una finestra di dialogo o visualizzare una finestra di dialogo e fornire all’utente la possibilità di continuare o di arrestare il VI. Il VI General Error Handler accetta il cluster error in o il valore del codice di errore e in caso di errore appare una finestra di dialogo del tipo specificato. Comunque potete anche impostare una lista di gestione degli errori per fare in modo che gli errori specificati siano cancellati o impostati quando occorre. LabVIEW Corso Base II 1-4 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Potete inoltre utilizzare il VI General Error Handler per aggiungere errori alla tabella interna di descrizione degli errori. La tabella di descrizione degli errori descrive tutti gli errori di LabVIEW e le operazioni relative. Perciò potete aggiungere i vostri codici di errore e le descrizioni ai VI di gestione degli errori. Fate riferimento a LabVIEW Help per informazioni su come modificare i vostri VI di gestione degli errori. In caso di errore, i VI Simple Error Handler e General Error Handler aprono una finestra di dialogo che visualizza le informazioni contenute nel cluster di errore e i possibili motivi di quell’errore come descritto nella tabella interna di descrizione degli errori. Talvolta avete linee separate di operazioni che vengono eseguite in parallelo da LabVIEW e ogni operazione mantiene i propri cluster di errore. Potete utilizzare il VI Merge Errors per combinare diversi cluster di errore in uno. Il VI Merge Errors controlla i cluster di errore in arrivo o la matrice dei cluster di errore e pone in uscita il primo errore trovato. Se non ci sono errori, LabVIEW restituisce il primo messaggio di avviso e il codice di errore è un valore positivo. Altrimenti LabVIEW fornisce una condizione di assenza di errore. National Instruments Corporation 1-5 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Inserimento della gestione degli errori nei vostri VI Dovreste inserire la gestione degli errori nei vostri VI in aggiunta all’utilizzo dei cluster di errore per VI e funzioni interne. Per esempio, quando state costruendo un subVI da utilizzare in un progetto più grande, potreste non volere l’esecuzione di subVI in caso di errore occorso precedentemente. Potete collegare i cluster di errore ad una struttura Case per considerare le condizioni di Error o No Error come mostrato nell’esempio seguente. Inserite qui il codice da eseguire quando non ci sono stati errori Come mostrato nell’esempio precedente, inserite il codice che volete eseguire nella condizione No Error e quindi definite il valore di errore in uscita corrispondente alla condizione in funzione di quello che avviene in quella condizione. Nell’esercizio successivo realizzerete un VI che genera dati, li analizza e li presenta sul pannello frontale utilizzando i cluster di errore in modo appropriato. LabVIEW Corso Base II 1-6 National Instruments Corporation Lezione 1 Esercitazione 1-1 Obiettivo: Pianificazione di applicazioni in LabVIEW VI Generate & Analyze Data Realizzare un VI che generi, analizzi e visualizzi i dati utilizzando tecniche di gestione degli errori Realizzerete un VI che genera una sinusoide con rumore, calcola la risposta in frequenza di questi dati e rappresenta gli andamenti temporali e in frequenza su due grafici. Utilizzerete i cluster di errore e i VI di gestione degli errori per monitorare correttamente le condizioni di errore Nota Utilizzerete questo VI nell’appendice. Pannello frontale 1. Aprite un nuovo VI. 2. Aggiungete tre cursori verticali che si trovano nella palette Controls»Numeric, il pulsante Stop che si trova nella palette Controls»Boolean, e due grafici di forme d’onda che si trovano nella palette Controls»Graph, come indicato nel pannello frontale precedente. Etichettateli opportunamente. Creerete due clusterSampling Info e averaging parametersdallo schema a blocchi. National Instruments Corporation 1-7 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Schema a blocchi 3. Aprite e realizzate lo schema a blocchi utilizzando i componenti seguenti. a. Inserite un ciclo While che si trova nella palette Functions»Structures. Questo impone al VI di continuare a generare e ad analizzare i dati finché l’utente clicca sul pulsante di Stop. Cliccate con il tasto destro del mouse sul terminale condizionale e selezionate Stop If True. b. Inserite il VI Sine Waveform che si trova nella palette Functions»Analyze»Waveform Generation. Questo VI genera una forma d’onda sinusoidale con una data frequenza, ampiezza e impostazioni sul campionamento. Per creare il controllo del cluster con le impostazioni sul campionamento, cliccate con il tasto destro del mouse sul terminale d’ingresso e selezionate Create»Control dal menu rapido. c. Inserite il VI Uniform White Noise Waveform che si trova nella palette Functions»Analyze»Waveform Generation. Questo VI genera un rumore bianco uniforme definito da ampiezza e informazioni sul campionamento. d. Inserite il VI Merge Errors che si trova nella palette Functions»Time & Dialog. Questo VI combina i cluster di errore che provengono dai VI Sine e Noise in un unico cluster di errore. e. Inserite il VI Add Waveforms che si trova nella palette Functions»Waveform»Waveform Operations. Questa funzione somma le due forme d’onda per ottenere una sinusoide con rumore. f. Inserite il VI FFT Power Spectrum che si trova nella palette Functions»Analyze»Waveform Measurements. Questo VI calcola la risposta in frequenza dell’ingresso della forma d’onda tempo-variante e media i dati secondo i parametri specificati. LabVIEW Corso Base II 1-8 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Per creare il controllo del cluster dei parametri della media, cliccate con il tasto destro del mouse sul terminale d’ingresso e selezionate Create»Control dal menu rapido. g. Inserite la funzione Wait Until Next ms Multiple che si trova nella palette Functions»Time & Dialog. Questa funzione determina l’esecuzione del ciclo While ogni mezzo secondo. Per creare una costante, cliccate con il tasto destro del mouse sul terminale d’ingresso e selezionate Create»Constant dal menu rapido. h. Inserite la funzione Unbundle By Name che si trova nella palette Functions»Cluster. Questa funzione estrae il booleano di stato dal cluster di errore in modo da arrestare il ciclo in caso di errore. i. Inserite la funzione Or che si trova nella palette Functions»Boolean. Questa funzione combina il Boolean dello stato di errore e il pulsante Stop del pannello frontale affinché il ciclo si fermi se uno di questi valori diventa True. j. Inserite il VI Simple Error Handler che si trova nella palette Functions»Time & Dialog. Una finestra di dialogo appare in questo VI in caso di errore e visualizza informazioni sull’errore. 4. Salvate questo VI come Generate & Analyze Data.vi nella directory c:\exercises\LV Basics 2. 5. Osservate come i VI che avete utilizzato nello schema a blocchi gestiscono gli errori. Cliccate due volte sul VI Sine Waveform e aprite il suo schema a blocchi. Notate che la prima cosa che fa è di osservare l’errore nel cluster per verificare l’esistenza di errori precedenti. Se c’è stato un errore, LabVIEW fornisce una forma d’onda vuota e passa all’esterno le informazioni sull’errore. Se non ci sono stati errori, LabVIEW genera una forma d’onda sinusoidale con i parametri d’ingresso specificati. 6. Avviate il VI. Potete regolare i controlli del pannello frontale per vedere i cambiamenti temporali e in frequenza delle forme d’onda. Potete forzare un errore inserendo valori sbagliati in questi controlli. Per esempio, una frequenza di campionamento Fs troppo bassa o troppo alta fornisce un errore. Attivando l’averaging mode, potete estrarre il picco della sinusoide dal rumore indipendentemente dalle ampiezze. Notate come agiscono le diverse tecniche di media sul segnale. 7. Fermate il VI e chiudetelo quando avete finito. Fine dell’esercitazione 1-1 National Instruments Corporation 1-9 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW D. Architetture di programmazione in LabVIEW Potete sviluppare meglio programmi in LabVIEW e in altri linguaggi di programmazione se seguite tecniche e architetture di programmazione coerenti. I programmi strutturati sono più facili da mantenere e da capire. Ora che avete creato diversi VI in LabVIEW sia nel LabVIEW Corso Base I che in esperienze di programmazione simili, questo concetto di programmazione strutturata viene descritto più in dettaglio. Uno dei modi migliori per creare un’architettura di programmazione che sia facile da comprendere è di seguire tecniche di programmazione modulare e realizzare subVI per operazioni ripetute o raggruppabili per analogia. Per esempio, fate riferimento al VI che avete realizzato nell’esercitazione 1-1. I subVI che avete utilizzato rendono il VI molto facile da seguire e da capire ed ogni parte può essere riutilizzata in altri VI. Con la documentazione dello schema a blocchi e quella presente nell’opzione File»VI Properties»Documentation, un VI modulare è facile da capire e da modificare nel futuro. Potete strutturare i VI in maniera diversa a seconda della funzionalità che volete assegnarli. Questa sezione descrive alcuni tipi comuni di architetture per VI, con i loro vantaggi/svantaggisemplice, generale, a cicli paralleli, a condizioni multiple e a macchine di stato. Architettura di VI semplice Quando fate dei calcoli o effettuate delle misure veloci di laboratorio, non avete bisogno di un’architettura complessa. Il vostro programma potrebbe essere un singolo VI che esegue una misura, o un calcolo e visualizza o registra i dati su disco. L’architettura di VI semplice di solito non richiede un’azione specifica di avvio o di stop da parte dell’utente e il VI può essere attivato quando l’utente clicca sul pulsante di run. Oltre ad essere utilizzata per semplici applicazioni, questa architettura viene usata per componenti funzionali all’interno di applicazioni più grandi. Potete convertire questi semplici VI in subVI che vengono usati come blocchi costituenti di applicazioni più grandi. LabVIEW Corso Base II 1-10 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Il pannello frontale e lo schema a blocchi precedente sono del VI Convert C to F che avete realizzato nel LabVIEW Corso Base I. Questo VI esegue l’unico compito di convertire un valore da gradi Celsius in gradi Fahrenheit. Potete utilizzare questo semplice VI in altre applicazioni che necessitano di questa conversione senza aver bisogno di ricordare l’equazione. Architettura generale di un VI Nel progettare un’applicazione, generalmente dovete passare attraverso tre fasi: Inizializzazione Questa sezione viene utilizzata per inizializzare l’hardware, leggere le informazioni di configurazione dai file o per richiedere all’utente la posizione dei file. Applicazione principale Questa sezione in generale consiste in almeno un ciclo che viene ripetuto fino a quando l’utente decide di uscire dal programma o il programma si arresta per altri motivi come il completamento di un I/O. Chiusura Questa sezione di solito si occupa di chiudere i file, di scrivere le informazioni di configurazione su disco o di ripristinare l’I/O sullo stato di default. Lo schema a blocchi seguente mostra questa architettura generale. Per applicazioni semplici, il ciclo dell’applicazione principale può essere abbastanza semplice. Quando avete interfacce utente complicate o eventi multipli, come ad esempio azioni dell’utente, trigger sull’I/O e così via, questa sezione può diventare più complicata. Le illustrazioni successive mostrano le strategie di progetto che potete adottare per progettare grandi applicazioni. Inserite qui il vostro codice National Instruments Corporation 1-11 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Notate nello schema a blocchi precedente che i collegamenti del cluster di errore controllano l’ordine di esecuzione delle tre sezioni. Il ciclo While non può iniziare l’esecuzione se il VI Startup non ha finito l’esecuzione e ha fornito il cluster di errore. Di conseguenza, il VI Shutdown non può essere eseguito finché il programma principale all’interno del ciclo While non ha terminato l’esecuzione e il cluster di errore è passato all’esterno del ciclo. Un’altra cosa da notare nello schema a blocchi precedente è la funzione di attesa. Una funzione di attesa è necessaria in molti cicli soprattutto se quel ciclo sta monitorando un ingresso da parte dell’utente sul pannello frontale. Senza la funzione di attesa, il ciclo potrebbe rimanere in esecuzione continuativamente, utilizzando tutte le risorse del sistema. La funzione di attesa forza l’esecuzione asincrona del ciclo anche se l’intervallo di attesa viene impostato su zero millisecondi. Se le operazioni all’interno del ciclo principale dipendono da azioni dell’utente, allora il periodo di attesa può essere aumentato ad un livello accettabile per i tempi di reazione. Un’attesa di 100-200 ms è di solito buona per la maggior parte degli utenti che non si accorgono del ritardo tra la pressione di un pulsante e la successiva esecuzione di un’azione. Architettura di VI a cicli paralleli Alcune applicazioni richiedono che il programma risponda a diversi eventi concorrenti e li esegua. Un modo di progettare la sezione principale di questa applicazione è di assegnare un ciclo differente ad ogni evento. Per esempio, potreste avere un ciclo differente per ogni pulsante del pannello frontale associato ad un’azione e per ogni altro genere di eventi, come una selezione di menu, trigger su I/O e così via. Lo schema a blocchi seguente mostra l’architettura di VI a cicli paralleli. Inserite qui il codice per il primo processo Inserite qui il codice per il secondo processo Questa struttura è lineare e va bene per alcuni VI semplici del tipo a menu in cui si aspetta che l’utente selezioni un pulsante tra tanti che portano ad azioni differenti. Questa architettura di VI è vantaggiosa rispetto ad altre tecniche anche nel consentire che un evento non vi impedisca di LabVIEW Corso Base II 1-12 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW rispondere ad altri eventi aggiuntivi. Per esempio, se un utente seleziona un pulsante che determina la comparsa di una finestra di dialogo, i cicli paralleli possono continuare a rispondere ad eventi di I/O. Quindi, il vantaggio principale dell’architettura di VI a cicli paralleli è la sua abilità nel gestire processi multipli indipendenti e contemporanei. Gli svantaggi principali dell’architettura a cicli paralleli riguardano il coordinamento e la comunicazione tra cicli differenti. Il pulsante Stop per il secondo ciclo nello schema a blocchi precedente è una variabile locale. Non potete utilizzare delle linee per passare i dati tra i cicli, perché ciò impedirebbe l’esecuzione in parallelo dei cicli. Invece dovete usare delle tecniche globali per passare le informazioni tra i processi. Ciò può portare a condizioni di conflitto in cui compiti differenti tentano di leggere e di modificare gli stessi dati contemporaneamente determinando risultati inconsistenti e rendendo difficile la ricerca degli errori. Fate riferimento alla Lezione 3, Tecniche di gestione dei dati, di questo corso, per ulteriori informazioni sulle variabili globali, sulle variabili locali e le condizioni di conflitto. Nota Architettura di VI con strutture Case multiple Lo schema a blocchi seguente mostra come progettare un VI che possa gestire eventi multipli che possono passare dati in avanti e all’indietro. Invece di usare cicli multipli, potete utilizzare un singolo ciclo che contenga strutture Case separate per ogni evento. Questa architettura di VI dovrebbe essere usata anche nella situazione in cui avete diversi pulsanti sul pannello frontale e ognuno attiva eventi diversi. Le condizioni FALSE seguenti sono vuote. Codice della Azione 1 Codice della Azione 2 Un vantaggio di questa architettura è che potete utilizzare delle linee per passare i dati. Ciò aumenta la leggibilità. Inoltre riduce il bisogno di utilizzare dati globali e di conseguenza rende meno probabile che incontriate situazioni di conflitto. Potete utilizzare i registri a scorrimento sulla cornice del ciclo per riportare i valori da un’iterazione alla successiva, passando anche i dati. National Instruments Corporation 1-13 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Esistono diversi svantaggi nell’architettura di VI con strutture Case multiple. Innanzitutto potete finire con l’avere schemi a blocchi che sono molto grandi e difficili da leggere, modificare e correggere. Inoltre, siccome tutti i gestori degli eventi sono nello stesso ciclo, ognuno viene gestito in modo seriale. Di conseguenza, se un evento prende molto tempo, il vostro ciclo non riesce a gestire altri eventi. Un problema collegato è che gli eventi sono gestiti alla stessa velocità siccome nessun evento può essere ripetuto finché tutti gli oggetti nel ciclo While hanno terminato. In alcune applicazioni, potreste aver bisogno di impostare la priorità degli eventi sull’interfaccia utente per renderli sufficientemente confrontabili con gli eventi di I/O. Architettura di VI con macchine a stati Potete realizzare schemi a blocchi più compatti utilizzando una singola struttura Case per gestire tutti i vostri eventi. L’architettura di VI con macchine a stati è un metodo per il controllo dell’esecuzione di VI in modo non lineare. Questa tecnica di programmazione è molto utile in VI che sono frazionabili in diversi compiti semplici, come nei VI che agiscono come interfaccia utente. Create una macchina a stati in LabVIEW con un ciclo While, una struttura Case e un registro a scorrimento. Ogni stato della macchina a stati è una condizione nella struttura Case. Inserite i VI e altro codice che volete eseguire nella condizione corretta. Un registro a scorrimento memorizza lo stato da eseguire fino all’iterazione successiva del ciclo. Lo schema a blocchi della macchina a stati è mostrato nelle figure seguenti. LabVIEW Corso Base II 1-14 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Codice della Azione 1 Codice della Azione 2 In questa architettura, progettate l’elenco dei possibili eventi, o stati, e quindi mappateli ognuno su una condizione. Per il VI dello schema a blocchi precedente, gli stati possibili sono startup, idle, event 1, event 2 e shutdown. Questi stati sono memorizzati in una costante. Ogni stato ha la sua condizione in cui potete inserire i nodi opportuni. Mentre una condizione è in esecuzione, lo stato successivo viene determinato sulla base del risultato corrente. Lo stato successivo viene memorizzato nel registro a scorrimento. In caso di errore in uno degli stati, viene richiamata la condizione shutdown. Il vantaggio dell’architettura con macchine a stati è che lo schema a blocchi può diventare molto più piccolo, rendendone più facile la lettura e la correzione. Un inconveniente della struttura Sequence è che non si può saltare o interrompere un frame. L’architettura con macchine a stati risolve questo problema perché ogni condizione determina quale stato dev’essere eseguito successivamente. Uno svantaggio dell’architettura con macchine a stati è che con questo approccio potete perdere degli eventi. Se due eventi si presentano nello stesso istante, questo modello gestisce il primo e perde il secondo. Ciò può condurre ad errori che sono difficili da correggere perché possono presentarsi solo occasionalmente. Versioni più complesse dei VI con architettura con macchine a stati contengono codice aggiuntivo che realizza una coda di eventi e stati e così non li perdete. National Instruments Corporation 1-15 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Note aggiuntive sulle architetture di programmazione Come con altri linguaggi di programmazione, vengono usati diversi metodi e tecniche di programmazione quando si progetta un VI in LabVIEW. Le architetture mostrate in questa sezione costituiscono dei metodi comuni per fornirvi un’idea di come si deve affrontare la scrittura di un VI. Le strutture dei VI diventano molto più complicate al crescere delle dimensioni delle applicazioni e quando vengono combinati diversi tipi di hardware, di interfacce utente e metodi di verifica degli errori. Tuttavia, vedrete utilizzare queste stesse architetture di programmazione di base. Esaminate gli esempi più grandi e le demo che vengono fornite con LabVIEW e descrivete quale architettura di VI viene usata e perché. Risorse aggiuntive per la realizzazione di applicazioni in LabVIEW sono descritte nel manuale LabVIEW Development Guidelines. Nel paragrafo successivo realizzerete un VI che utilizza una semplice architettura di VI per verificare il nome e la password di un utente. LabVIEW Corso Base II 1-16 National Instruments Corporation Lezione 1 Esercitazione 1-2 Obiettivo: Pianificazione di applicazioni in LabVIEW VI Verify Information Realizzare un VI che mostri una semplice architettura. Realizzerete un VI che accetta un nome e una password e verifica la corrispondenza in una tabella contenente le informazioni degli impiegati. Se il nome e la password coincidono, vengono forniti, come verifica, il nome e un oggetto booleano. Nota Utilizzerete questo VI nella Lezione 3. Pannello frontale 1. Aprite un VI e realizzate il pannello frontale precedente. Modificate i controlli a stringa come descritto nelle etichette cliccando con il tasto destro del mouse sul controllo. Il controllo Table che si trova nella palette Controls»List & Table è una matrice bidimensionale di stringhe in cui la prima cella è l’elemento 0,0. 2. Inserite le informazioni mostrate nel pannello frontale precedente in Table e salvate questi valori come default cliccando con il tasto destro del mouse su Table e selezionando Data Operations»Make Current Value Default dal menu rapido. National Instruments Corporation 1-17 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Schema a blocchi Il nome corrisponde Il nome non corrisponde 3. Aprite e realizzate lo schema a blocchi precedente utilizzando i componenti seguenti. a. Inserite un ciclo While che si trova nella palette Functions»Structures. Questo consente al VI di effettuare continuamente verifiche finché c’è una corrispondenza di nome o non ci sono più righe nella tabella. Notate che è abilitata l’indicizzazione sulla matrice dei nomi ma non sulle altre due voci inserite all’interno del ciclo While. Abilitate l’indicizzazione cliccando con il tasto destro del mouse sul tunnel e selezionando Enable Indexing dal menu rapido. b. Inserite una struttura Case che si trova nella palette Functions»Structures. Se l’ingresso Nome coincide con una voce presente nell’elenco della prima colonna della tabella, allora vengono verificate anche le password. Se Nome non corrisponde all’inserimento corrente, il ciclo passa all’iterazione successiva. Prima di creare una costante booleana nella condizione False, completate i collegamenti della condizione True. Quindi selezionate la condizione False e cliccate con il tasto destro del mouse il tunnel bordato di verde e selezionate Create»Constant dal menu rapido. c. Inserite la funzione Index Array che si trova nella palette Functions»Array. Questa funzione viene utilizzata per tirare fuori la matrice dei nomi dalla tabella. Quando collegate la tabella all’ingresso della matrice di questa funzione, appaiono due indici, di riga e di colonna. LabVIEW Corso Base II 1-18 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Cliccate con il tasto destro del mouse sull’indice inferiore, di colonna, e selezionate Create»Constant dal menu rapido. Utilizzerete due di queste funzioni, quindi fatene una copia e inseritela nella struttura Case alla condizione True. d. Inserite la funzione Array Size che si trova nella palette Functions»Array. Questa funzione fornisce le dimensioni della matrice dei nomi. e. Inserite la funzione Decrement che si trova nella palette Functions»Numeric. Questa funzione decrementa di uno il numero dei nomi della matrice così si può controllare il ciclo While che parte da 0. f. Inserite la funzione Equal? che si trova nella palette Functions»Comparison. Utilizzerete due di queste funzioni per verificare se l’ingresso Nome coincide con una voce della tabella e analogamente per Password. g. Inserite la funzione Less Than? che si trova nella palette Functions»Comparison. Questa funzione controlla il terminale condizionale del ciclo While. Il ciclo continua ad essere eseguito finché il numero di iterazione corrente è inferiore al numero di righe nella tabella. h. Inserite la funzione Not Or che si trova nella palette Functions»Boolean. Questa funzione controlla anch’essa il terminale condizionale del ciclo While affinché il ciclo continui fino a quando viene trovata una coincidenza o non ci sono più righe nella tabella. i. Inserite la costante Empty String che si trova nella palette Functions»String. Utilizzerete due di queste costanti, una per la condizione True e l’altra per la False. Se i nomi corrispondono ma non le password o se nessuno dei due corrisponde, allora viene fornita una stringa vuota nell’indicatore Nome Confermato. j. Inserite la funzione Select che si trova nella palette Functions»Comparison. Questa funzione viene usata con la verifica della password. Se la password corrisponde, il nome corrente viene inviato all’indicatore Nome Confermato; altrimenti viene inviata la stringa vuota. 4. Salvate il VI come Verify Information.vi. 5. Andate sul pannello frontale ed assicuratevi di avere alcuni nomi, i nomi non devono essere gli stessi usati nel manuale del corso, e password nel controllo della tabella. Se non lo avete già fatto, cliccate con il pulsante destro del mouse sulla tabella e selezionate Data Operations»Make Current Values Default così nomi e password vengono memorizzati permanentemente nella tabella. National Instruments Corporation 1-19 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW 6. Inserite i valori nei controlli Nome e Password ed avviate il VI. Se Nome e Password coincidono con una delle righe presenti in tabella, viene fornito il nome nell’indicatore Nome Confermato e si accende il LED Verificato. Altrimenti viene fornita una stringa vuota e il LED è spento. Assicuratevi di provare diverse combinazioni di nomi e password per verificare il comportamento corretto del VI. 7. Create un’icona per questo VI perché lo utilizzerete come subVI in un esercizio più avanti. Per creare l’icona, cliccate con il tasto destro del mouse sull’icona nell’angolo superiore destro del pannello frontale o dello schema a blocchi e selezionate Edit Icon dal menu. Disegnate un’icona simile a quella mostrata qui. 8. Create il riquadro dei connettori per questo VI cliccando con il tasto destro del mouse sull’icona del pannello frontale e selezionando Show Connector dal menu rapido. Selezionate uno schema e collegate gli oggetti del pannello frontale ai terminali come mostrato nel riquadro dei connettori seguente. 9. Salvate il VI con lo stesso nome. 10. Arrestate e chiudete il VI quando avete finito. Fine dell’esercitazione 1-2 LabVIEW Corso Base II 1-20 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW E. Modelli di VI Nell’ultima sezione, avete imparato qualcosa sulle architetture di programmazione dei VI. Affinché non dobbiate partire da zero nella realizzazione di un nuovo VI con un pannello frontale e uno schema a blocchi vuoto, vengono inclusi nel pacchetto di LabVIEW alcuni modelli. Questi modelli si trovano nella directory LabVIEW 6\Templates e contengono file con l’estensione .vit. LabVIEW fornisce alcuni modelli di base e comunque non tutte le architetture di VI descritte sono disponibili come modelli. Potete salvare un VI che avete creato come modelli utilizzando l’opzione File»Save with Options come mostrato nella seguente finestra di dialogo. Questa opzione vi consente di salvare architetture di VI e altre strutture di programmazione che utilizzate spesso per i vostri modelli. Ora esaminerete un paio di modelli. National Instruments Corporation 1-21 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Esercitazione 1-3 Obiettivo: VIT Timed While Loop with Stop e State Machine Esaminare due modelli di VI forniti con LabVIEW. Esaminerete i modelli di VI che mostrano sia l’architettura con la macchina a stati sia quella generale. Pannello frontale 1. Aprite il Timed While Loop with Stop.vit dalla directory LabVIEW 6\Templates. Il pannello frontale contiene solo il pulsante di Stop. Schema a blocchi 2. Aprite ed esaminate lo schema a blocchi. 3. Noterete come questo VI possieda l’architettura generale di un VI. Esso contiene un ciclo While che si arresta quando cliccate sul pulsante del pannello frontale e una funzione di attesa nel ciclo assicura che questo ciclo non utilizzi tutte le risorse del sistema. 4. Tornate al pannello frontale ed avviate il VI. Esso non fa niente ma continua l’esecuzione fino a quando premete il pulsante di Stop. 5. Arrestate e chiudete il VI quando avete finito. 6. Aprite State Machine.vit dalla 6\Templates. Il pannello frontale è vuoto. LabVIEW Corso Base II il 1-22 directory LabVIEW National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Schema a blocchi 7. Aprite ed esaminate lo schema a blocchi. 8. Questa architettura con macchine a stati è implementata in un modo leggermente diverso da quello descritto precedentemente. Questo VI utilizza una costante di stringa per contenere gli stati della struttura Case mentre il VI mostrato precedentemente usava una del tipo enumerated, simile al controllo di tipo ring, per controllare gli stati. Siccome la struttura Case accetta sia numeri che stringhe, non importa come avete specificato i differenti stati. La chiave nell’architettura con macchine a stati è che avete un ciclo While con una struttura Case all’interno in cui ogni condizione è uno stato differente dell’applicazione complessiva. Lo stato successivo viene determinato mentre il VI è in esecuzione sulla base di quello che accade nello stato corrente. 9. Chiudete il VI quando avete finito. Fine dell’esercitazione 1-3 National Instruments Corporation 1-23 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Sommario, trucchi e consigli LabVIEW Corso Base II y In molti casi viene usato un approccio del tipo top-down per pianificare la strategia complessiva di un progetto. Lo sviluppo e l’implementazione di un’applicazione di solito è del tipo bottom-up. y Nella progettazione di un’applicazione in LabVIEW, è importante determinare l’aspettativa finale dell’utente, cosa deve realizzare esattamente l’applicazione e quali modifiche future potrebbero essere necessarie prima di investire una gran quantità di tempo nello sviluppo di subVI. Dovreste realizzare un diagramma di flusso che vi aiuti a capire come dovrebbe operare l’applicazione e discuterne in dettaglio con il vostro cliente. y Dopo aver realizzato il diagramma di flusso, potete sviluppare VI per implementarne i vari passi. È una buona idea di rendere modulare la vostra applicazione in compiti logici elementari, quando possibile. Lavorando con piccoli moduli, potete correggere un’applicazione testando ogni modulo singolarmente. Questo approccio rende molto più facile dell’applicazione in futuro. y I cluster di errore sono un metodo potente di gestione degli errori usato in quasi tutti i VI di I/O e le funzioni di LabVIEW. Questi cluster passano le informazioni sugli errori da un VI al successivo. y Un gestore degli errori alla fine del flusso dei dati può ricevere il cluster di errore e visualizzare le informazioni sugli errori in una finestra di dialogo. y Le architetture di VI più comuni sono quella semplice, quella generale, quella a cicli paralleli, quella a strutture Case multiple e quella a macchine a stati. Ciascuna di queste architetture ha i suoi vantaggi e svantaggi in funzione di quello che deve fare l’applicazione. y L’architettura di VI con macchine a stati è molto utile per VI d’interfaccia utente e genera un codice semplice e chiaro. y Molti modelli di VI vengono forniti con LabVIEW così non avete bisogno ogni volta di iniziare lo sviluppo di un VI da pannelli frontali e schemi a blocchi vuoti. y Fate riferimento al manuale LabVIEW Development Guidelines per ulteriori informazioni sulla progettazione e realizzazione di VI. 1-24 National Instruments Corporation Lezione 1 Pianificazione di applicazioni in LabVIEW Note National Instruments Corporation 1-25 LabVIEW Corso Base II Lezione 1 Pianificazione di applicazioni in LabVIEW Note LabVIEW Corso Base II 1-26 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Questa lezione vi introduce alla progettazione e realizzazione di interfacce utente per i vostri VI. Dapprima una panoramica ed un elenco di cose da considerare durante la realizzazione del pannello frontale. Quindi in alcune sezioni successive vengono descritti alcuni metodi e strumenti comuni per la personalizzazione dei pannelli. Le sezioni conclusive descrivono parti aggiuntive e oggetti dei pannelli utilizzati per lo sviluppo di interfacce utente. Imparerete: A. A conoscere gli elementi fondamentali dell’interfaccia utente. B. Ad utilizzare cluster booleani come menu. C. A conoscere i Property Nodes. D. A conoscere le proprietà dei grafici. E. Ad utilizzare i Control References. F. A conoscere i menu run-time di LabVIEW. G. A conoscere gli Intensity Plots. National Instruments Corporation 2-1 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali A. Nozioni fondamentali sull’interfaccia utente Quando sviluppate applicazioni che vengono utilizzate da altre persone, dovete seguire alcune regole fondamentali riguardanti l’interfaccia utente. Se il pannello frontale contiene troppi oggetti o presenta un miscuglio di colori e di testo, gli utenti potrebbero non utilizzare correttamente il VI o non ottenere le informazioni importanti dai dati. Questa sezione descrive alcuni elementi da considerare nella realizzazione di pannelli frontali. Una regola da seguire durante la realizzazione di un’interfaccia utente di un VI è di mostrare solamente le parti nel pannello frontale che l’utente ha bisogno di vedere in quel momento. L’esempio seguente mostra un subVI che richiede all’utente un nome come login. Ci sono dei cluster di errore perché è un subVI ma l’utente non ha bisogno di vedere quelle parti o il nome del percorso del file. L’esempio successivo mostra lo stesso subVI dopo che il pannello frontale è stato ridimensionato e la barra dei menu, le barre di scorrimento e la barra degli strumenti sono stati rimossi con l’opzione VI Properties»Window Appearance»Dialog. LabVIEW Corso Base II 2-2 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Utilizzo dei colori Un uso corretto dei colori può migliorare l’aspetto e la funzionalità del vostro pannello frontale. L’utilizzo di troppi colori, tuttavia, può causare contrasti che fanno apparire i pannelli frontali troppo pieni e dispersivi. Ecco alcuni suggerimenti sugli abbinamenti dei colori: y Iniziate con il grigioselezionate uno o due toni di grigio ed evidenziate i colori che hanno un buon contrasto con lo sfondo. y Aggiungete i colori con parsimoniasui grafici, sui pulsanti d’interruzione ed eventualmente sui cursori per le impostazioni importanti. Gli oggetti piccoli hanno bisogno di colori più brillanti e di più contrasto rispetto a quelli più grandi. y Utilizzate spaziature ed allineamenti per raggruppare gli oggetti invece di adottare i colori. y Dei luoghi buoni per imparare ad utilizzare i colori sono i pannelli degli strumenti stand-alone, le cartine, i giornali e la natura. Inoltre ricordate che circa il venti per cento degli ingegneri non riconoscono tutti i colori. Essi si basano sui contrasti piuttosto che sui colori quando devono distinguere gli oggetti. Spaziatura ed allineamento Gli spazi vuoti e l’allineamento sono probabilmente le tecniche più importanti per raggruppare e separare. Più sono gli oggetti che i vostri occhi possono trovare su una linea, più chiara è l’organizzazione. Quando gli oggetti sono disposti su una linea l’occhio segue la linea da sinistra a destra o dall’alto verso il basso. Questo è collegato alla direzione della scrittura. Sebbene alcune culture procedano da destra a sinistra, quasi tutti seguono dall’alto verso il basso. Oggetti centrati sono meglio di quelli disposti casualmente, ma meno ordinati rispetto a quelli allineati a sinistra o a destra. Una fascia di spazio vuoto agisce come un vero strumento di allineamento. Gli oggetti centrati hanno i bordi non allineati e l’ordine non è chiaro. National Instruments Corporation 2-3 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali I menu sono allineati a sinistra e i collegamenti relativi a destra come mostrato nell’esempio in basso a sinistra del menu File di LabVIEW. E’ più difficile individuare voci nel menu con allineamento al centro come mostrato nell’esempio in basso a destra. Notate come delle semplici linee che dividono sezioni del menu vi aiutino a trovare le voci più rapidamente, rafforzando le relazioni tra le voci della sezione. Testo e font Il testo è più facile da leggere e l’informazione ha più senso quando la visualizzazione è ordinata. Per tenerne conto durante la realizzazione di pannelli frontali, provate a raggruppare controlli correlati, utilizzando spazi vuoti o linee. Questi metodi funzionano meglio quando non distraggono dal contenuto informativo. Usare troppi font rende il vostro pannello frontale troppo pieno e disorganizzato. E’ meglio utilizzare due o tre dimensioni diverse dello stesso tipo di font. Il Serif aiuta le persone a riconoscere intere parole a distanza. Se state utilizzando più di una dimensione di un font, assicuratevi che le dimensioni siano abbastanza diverse. Altrimenti apparirà come un errore. Analogamente, se utilizzate due diversi tipi di font, assicuratevi che siano distinguibili. Alcune stazioni di operatori possono essere abbagliate o gli utenti potrebbero aver bisogno di leggerle a grande distanza rispetto ai normali computer o con un touch screen. Perciò dovreste utilizzare font più grandi e maggior contrasto. Consigli e strumenti per l’interfaccia utente Non è necessario o non è intelligente perdere tempo a rendere ogni pannello frontale chiaroconcentratevi su quelli che gli utenti vedono di più. LabVIEW Corso Base II 2-4 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Alcuni degli strumenti interni di LabVIEW per rendere i pannelli frontali user-friendly, comprendono controlli di dialogo, controlli tab, decorazioni, menu e ridimensionamento automatico degli oggetti del pannello frontale. Controlli di dialogo Una tecnica comune che si usa per l’interfaccia utente è di avere finestre di dialogo che compaiono al momento opportuno per interagire con l’utente. Potete fare in modo che un VI appaia come una finestra di dialogo selezionando quell’opzione nella finestra di dialogo File»VI Properties»Window Appearance. La palette Controls»Dialog Controls contiene alcuni tipi di oggetti disponibili nelle finestre di dialogo di sistema. Dovreste utilizzare questi controlli di dialogo per realizzare finestre di dialogo tipo quelle di sistema. I controlli di dialogo cambiano aspetto secondo il sistema operativo e le impostazioni di Window Appearance e di solito ignorano i click a colori eccetto quello trasparente. Se state integrando un grafico o controlli non di dialogo nel pannello frontale, provate a modificarli nascondendo alcune cornici o selezionando colori simili a quelli di sistema. Controlli Tab Gli strumenti fisici di solito hanno delle buone interfacce utente. Prendete spunto da questi ma considerate controlli più piccoli o più efficienti, come quelli tipo ring o controlli tab laddove ha senso. I controlli tab si trovano nella palette Controls»Dialog Controls o nella palette Controls»Array & Cluster e offrono un modo conveniente per raggruppare insieme oggetti del pannello frontale. Il modo di utilizzare il controllo tab è di disporlo sul pannello frontale come mostrato precedentemente. Aggiungete tab cliccando con il tasto destro del mouse su un tab esistente e selezionando Add Page After, Add Page Before o Duplicate Page dal menu. Rietichettate i tab con lo strumento Testo ed inserite altri oggetti sul pannello frontale nelle pagine appropriate. I terminali di questi oggetti sono presenti nello schema a blocchi così come lo sono terminali di ogni altro oggetto del pannello frontale. National Instruments Corporation 2-5 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Il controllo tab si collega direttamente ad una struttura Case come mostrato precedentemente e il nome della pagina compare in alto come nome della condizione. Potete quindi collegare i dati agli altri terminali a seconda delle necessità. Decorazioni Uno dei metodi più semplici e spesso trascurato per raggruppare o separare oggetti è di utilizzare una delle possibilità offerte dalla palette Controls»Decorations. Potete scegliere di utilizzare vari tipi di riquadri, frecce e linee dalla palette nel modo seguente: Potete trovare ulteriori decorazioni nella palette Controls»Classic Controls. La palette seguente mostra i diversi riquadri, cornici, linee, frecce, cerchi e triangoli. LabVIEW Corso Base II 2-6 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Menu I menu costituiscono un buon modo di presentare la maggior parte delle funzionalità del pannello frontale in modo ordinato e in uno spazio relativamente piccolo. In tal modo si lascia spazio sul pannello frontale per azioni necessarie in caso di emergenza, voci per principianti, voci necessarie per la produttività e voci che non rientrano nei menu. Assicuratevi anche di aggiungere pulsanti rapidi per i menu per le voci richieste più frequentemente. Più avanti nella lezione imparerete a creare i vostri menu in un VI. Ridimensionamento automatico di oggetti del pannello frontale Come già detto precedentemente, potete utilizzare le opzioni in VI Properties»Window Appearance per modificare l’aspetto del pannello frontale quando un VI è in esecuzione. Con le opzioni in VI Properties»Window Size potete impostare le dimensioni minime di una finestra, mantenere le proporzioni della finestra al variare dello schermo e impostare il ridimensionamento degli oggetti del pannello frontale in due modi diversi. La maggior parte delle applicazioni professionali non ridimensiona ogni controllo quando le dimensioni della finestra variano, ma prendono una tabella, un grafico o un elenco per adattarlo alla finestra, lasciando gli altri oggetti vicino al bordo della finestra. Per ridimensionare un oggetto del pannello frontale al variare del pannello frontale, selezionate quell’oggetto e quindi Edit»Scale Object With Panel. L’esercizio seguente utilizza alcune delle tecniche descritte per creare un VI con un’interfaccia utente facile da usare. National Instruments Corporation 2-7 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-1 Obiettivo: VI Scope Panel Disporre e separare in modo logico gli oggetti del pannello frontale per rendere l’interfaccia utente di un VI più semplice da leggere e da utilizzare. Ridimensionerete, riorganizzerete e disporrete in modo diverso gli oggetti del pannello frontale per rendere l’interfaccia utente più semplice da utilizzare. Pannello frontale 1. Aprite il VI Scope Panel dalla directory c:\exercises\LV basics 2. Il pannello frontale è quello mostrato sopra. 2. Spostate i controlli per raggruppare in maniera logica quelli che presentano delle affinità (non tutti possono essere collegati ad un gruppo). Per esempio il pulsante ON/OFF, il potenziometro di posizionamento e il potenziometro Volts/Div etichettati con Channel A operano tutti sul canale A e quindi ha senso disporli vicini l’uno all’altro. Altri due esempi di gruppi potrebbero essere i controlli del Channel B e i tre controlli di trigger. Ricordatevi di utilizzare le possibilità offerte nella barra degli strumenti da Align Objects e Distribute Objects. Consiglio 3. Dopo aver raggruppato i controlli, utilizzate la decorazione Raised Box sulla palette Controls»Decorations per rendere più visibili le separazioni tra i gruppi. LabVIEW Corso Base II 2-8 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Ridimensionate la finestra affinché il pannello frontale si adatti alla finestra, come mostrato nell’esempio seguente. Dovete utilizzare il pulsante Reorder sulla barra degli strumenti delle decorazioni per scegliere Move to Back, affinché i controlli siano visibili al di sopra dei riquadri evidenziati inseriti. Consiglio 4. Selezionate File»VI Properties per visualizzare la finestra di dialogo VI Properties. Selezionate Window Size dal menu a tendina superiore della finestra di dialogo VI Properties. Nella sezione Minimum Panel Size, cliccate sul pulsante <<Set to Current Window Size per impostare le dimensioni minime dello schermo sulle dimensioni correnti della finestra. Cliccate su OK per tornare al pannello frontale. 5. Selezionate il grafico del pannello frontale e selezionate Edit»Scale Object With Panel. LabVIEW ridimensiona il grafico quando viene ridimensionata l’intera finestra e sposta gli altri oggetti. 6. Salvate il VI con lo stesso nome. 7. Ridimensionate la finestra. Notate che il grafico si ridimensiona con la finestra e i controlli mantengono una distanza proporzionale con il grafico e tra di loro, ma non si allargano o si restringono. Tuttavia notate che le decorazioni non si ridimensionano. Per ottenere ciò, dovete utilizzare pulsanti booleani che sembrano gli stessi in ogni condizione e li ridimensionate da programma. Ciò richiede l’uso di Property Nodes e l’argomento verrà trattato più avanti in questa lezione. 8. Chiudete il VI quando avete finito. Fine dell’esercitazione 2-1 National Instruments Corporation 2-9 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-2 Obiettivo: VI Acquire Data Modificare un VI per utilizzare il controllo tab con tecniche appropriate di progettazione dell’interfaccia utente Modificherete il VI Generate & Analyze affinché utilizzi il controlo tab. Una pagina del tab servirà per la generazione dei dati come prima e la seconda pagina servirà per l’acquisizione dati da un dispositivo DAQ. Nota Utilizzerete questo VI nel progetto della Lezione 5. Pannello frontale 1. Aprite il VI Generate & Analyze che avete realizzato nell’esercitazione 1-1. Ridimensionate il pannello frontale per fare spazio alla sinistra degli altri oggetti del pannello frontale visto che aggiungerete il controllo tab. 2. Inserite nel pannello frontale un controllo tab che si trova nella palette Controls»Array & Cluster come mostrato precedentemente. Selezionate i controlli Sine Frequency, Sine Amplitude, Sampling Info e Noise Amplitude e inseriteli nella prima pagina del controllo tab. LabVIEW Corso Base II 2-10 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali 3. Nominate le due pagine del controllo tab Simulate e DAQ rispettivamente. Cliccate sulla pagina DAQ e aggiungete oggetti nel modo seguente: 4. Salvate il VI come Acquire Data.vi. 5. Cliccate con il tasto destro del mouse sul controllo DAQ Channel Name e assicuratevi che sia selezionata l’opzione Allow Undefined Names. 6. Per cambiare la scala sul potenziometro per leggere 20.0k invece di 20,000, cliccate con il tasto destro del mouse sul potenziometro e selezionate Format & Precision. Selezionate Engineering Notation e il k viene aggiunto per rappresentare le migliaia. National Instruments Corporation 2-11 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Schema a blocchi 7. Aprite e modificate lo schema a blocchi come precedentemente utilizzando i seguenti componenti: mostrato a. Inserite una struttura Case che si trova nella palette Functions»Structures dello schema a blocchi. Quando è utilizzata con un controllo tab, una condizione corrisponde alla pagina Simulate e l’altra alla pagina DAQ. b. Inserite il VI AI Acquire Waveform che si trova nella palette Functions»Data Acquisition»Analog Input dello schema a blocchi. Questo VI acquisisce dati da un canale d’ingresso analogico sul dispositivo DAQ. Nota Se non avete un dispositivo DAQ o una DAQ Signal Accessory, utilizzate il VI Demo Acquire Waveform che si trova nella palette Functions»User Libraries»Basic 2 Course dello schema a blocchi al posto del VI Acquire Waveform. Il VI Demo Acquire Waveform simula l’acquisizione dati da un canale d’ingresso analogico ad una frequenza di campionamento specificata e fornisce in uscita il numero di campioni specificato. LabVIEW Corso Base II 2-12 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali c. Create una costante di cluster cliccando con il tasto destro del mouse sul tunnel della struttura Case e selezionando Create»Constant dal menu rapido. Questa costante passa in uscita i valori di default per il cluster di errore corrispondenti alla condizione DAQ. 8. Salvate il VI. 9. Osservate come avete aggiunto nuove funzionalità a questo VI senza complicare troppo il codice. L’utilizzo dei controlli tab è un modo molto efficiente per aggiungere nuovi oggetti sul pannello frontale per l’interfaccia utente e anche per aggiungere funzionalità allo schema a blocchi senza ingrandire troppo le finestre del pannello frontale e dello schema a blocchi. 10. Avviate il VI. Potete anche regolare i controlli del pannello frontale per vedere cambiare gli andamenti temporali e in frequenza. Passate dalla pagina Simulate a quella DAQ del controllo tab. 11. Arrestate e chiudete il VI quando avete finito. Fine dell’esercitazione 2-2 National Instruments Corporation 2-13 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali B. Utilizzo di cluster booleani come menu Potete utilizzare pulsanti booleani in un cluster per realizzare un menu per un’applicazione. Considerate per esempio un’applicazione in cui un operatore configura un sistema e può eseguire due test. Un possibile VI a menu per questa applicazione è il seguente. Cluster di pulsanti etichettati (azione meccanica → latch when released) Ordine del cluster: (0) Pulsante Configure (1) Pulsante Test 1 (2) Pulsante Test 2 La funzione Cluster to Array converte il cluster booleano in una matrice booleana a tre elementi. Quindi ogni elemento del cluster rappresenta un elemento della matrice. La funzione Search 1D Array della palette Functions»Array ricerca nella matrice monodimensionale di valori booleani creata dalla funzione Cluster to Array il valore TRUE. Un valore TRUE per un qualsiasi elemento della matrice indica che avete cliccato su un pulsante del cluster. La funzione Search 1D Array restituisce l’indice del primo valore TRUE che trova nella matrice. Se non cliccate su un pulsante, Search 1D Array fornisce un valore dell’indice di –1. Se nessun pulsante viene premuto, viene eseguita la condizione –1, cioè nulla viene eseguito. Cliccando sul pulsante Configure si esegue la condizione 0, che potrebbe, per esempio, chiamare il subVI Configure. Cliccando sul pulsante Test 1 si esegue la condizione 1, che potrebbe chiamare il subVI Test 1 e cliccando sul pulsante Test 2 si esegue la condizione 2. Il ciclo While testa ripetutamente lo stato dei controlli booleani fino a quando cliccate sul pulsante Stop. Lo schema a blocchi del VI è il seguente. LabVIEW Corso Base II 2-14 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Vuoto. Search 1D Array fornisce –1 se non ci sono bottoni premuti Richiama il subVI Configure Richiama il subVI Test 1 Search 1D Array fornisce 1 se viene premuto il pulsante Test 1 Search 1D Array fornisce 0 se viene premuto il pulsante Configure Richiama il subVI Test 2 Search 1D Array fornisce 2 se viene premuto il pulsante Test 2 Conversione di cluster Potete convertire un cluster in una matrice se tutti i componenti del cluster hanno lo stesso tipo di dati (per esempio, tutti booleani o tutti numerici). Con tale conversione, potete utilizzare le funzioni delle matrici per processare i componenti all’interno del cluster. La funzione Cluster to Array presente nelle palette Functions»Cluster e in Functions»Array converte un cluster di componenti dello stesso tipo in una matrice monodimensionale di dati dello stesso tipo. L’esempio seguente mostra un cluster booleano a quattro componenti convertito in una matrice booleana a quattro elementi. L’indice di ogni elemento della matrice corrisponde all’ordine logico del componente nel cluster. Per esempio, Button 1 (componente 0) corrisponde al primo elemento (indice 0) della matrice, Button 2 (componente 1) al secondo elemento (indice 1), e così via. National Instruments Corporation 2-15 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 2 1 3 1 Pannello frontale 2 Pannello del cluster 3 Schema a blocchi La funzione Array to Cluster (nelle palette Functions»Cluster e in Functions»Array) converte una matrice monodimensionale in un cluster in cui ogni componente del cluster è dello stesso tipo dell’elemento della matrice. Nota Dovete cliccare con il tasto destro del mouse sull’icona della funzione per impostare il numero di componenti nel cluster. Il numero di default dei componenti nel cluster di uscita è nove. Potete combinare il concetto di una macchina a stati con un cluster di menu booleano per fornire un potente sistema di menu. Per esempio, può darsi che dobbiate realizzare l’applicazione seguente, che può essere suddivisa in una serie di stati. Valore di stato Nome di stato Descrizione -1, Deafult No Event Menu booleano di controllo per determinare lo stato successivo LabVIEW Corso Base II 0 Login 1 Configure 2 Acquire 2-16 Accesso dell’utente Configura l’acquisizione Acquisisce dati Stato successivo Dipende dal pulsante premuto. Se non viene premuto alcun pulsante, lo stato successivo è No Event. No Event (0) Acquire (2) No Event (0) National Instruments Corporation Lezione 2 Progettazione di pannelli frontali L’esempio seguente rappresenta una macchina a stati per questa applicazione. Il pannello frontale consiste in un cluster di pulsanti booleani, in cui ogni pulsante corrisponde ad uno stato nella macchina a stati. Nello stato –1 (stato No Event), il cluster di pulsanti booleani viene controllato per vedere se un pulsante è stato premuto. La funzione Search 1D Array fornisce l’indice del pulsante premuto (o –1 se non vengono premuti pulsanti) per determinare lo stato successivo da eseguire. Il valore di stato corrispondente viene caricato nel registro a scorrimento, e così all’iterazione successiva del ciclo While viene eseguito lo stato selezionato. In ognuno degli altri stati, il registro a scorrimento viene caricato con lo stato successivo da eseguire utilizzando una costante numerica. Normalmente questo è lo stato –1, e quindi il menu booleano verrà verificato di nuovo ma nello stato 1 (Configure) lo stato successivo è lo stato 2 (Acquire). National Instruments Corporation 2-17 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-3 VI Menu Obiettivo: Realizzare un sistema di menu per un’applicazione Esiste un insieme di dipendenze tra le diverse operazioni dell’applicazione da realizzare in questo corso. In molte circostanze, dopo aver eseguito una certa operazione, l’applicazione dovrebbe tornare nello stato “No Event”, in cui l’applicazione controlla un menu per vedere quale pulsante è stato premuto. Le dipendenze dell’applicazione possono essere descritte come una semplice macchina a stati, in cui ogni stato numerico porta ad uno stato successivo. La tabella seguente riassume questa serie di dipendenze. Valore di stato Nome di stato Descrizione -1, Default No Event Menu booleano di controllo per determinare lo stato successivo 0 Login 1 2 Acquire Analyze 3 View 4 Stop Accesso dell’utente Acquisisce dati Analizza dati e possibilmente li salva su file Visualizza i file dati salvati Arresta il VI Stato successivo Dipende dal pulsante premuto. Se non viene premuto alcun pulsante, lo stato successivo è No Event. No Event No Event No Event No Event No Event In questa esercitazione realizzerete la macchina a stati da utilizzare in questa applicazione osservando il suo funzionamento. Nota Utilizzerete questo VI nella Lezione 5. LabVIEW Corso Base II 2-18 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Pannello frontale 1. Aprite un nuovo VI. 2. Realizzate il pannello frontale seguendo l’esempio precedente. Ogni pulsante nel cluster, quando viene premuto, attiva uno stato opportuno. Quando realizzate il pannello frontale, assicuratevi che il pulsante Login sia il cluster di ordine 0. Acquire Data è il cluster di ordine 1, Analyze & Present Data è il cluster di ordine 2, View Analysis File è il cluster di ordine 3 e Stop è il cluster di ordine 4. L’ordine del cluster del cluster dei menu determina il numero dello stato che verrà eseguito. Suggerimenti: y Create per primo il pulsante con l’etichetta più grande. y Impostate l’azione meccanica su Latch When Released. y Utilizzate Copy e Paste per creare altri pulsanti. y Utilizzate Align e Distribute nella disposizione dei pulsanti. National Instruments Corporation 2-19 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Schema a blocchi 1. Costruite lo schema a blocchi come mostrato in precedenza. a. Inserite nello schema a blocchi un ciclo While che si trova nella palette Functions»Structures. In tal modo il VI continua a generare ed analizzare i dati fino a quando l’utente preme il pulsante Stop. Create il registro a scorrimento cliccando con il tasto destro del mouse sul bordo sinistro o destro del ciclo e selezionando Add Shift Register dal menu rapido. LabVIEW Corso Base II 2-20 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali b. Inserite nello schema a blocchi una struttura Case che si trova nella palette Functions»Structures. Questa struttura genera gli stati per la macchina a stati. Aggiungete condizioni cliccando con il tasto destro del mouse sulla cornice della struttura Case. Assicuratevi di definire la condizione –1 come default. c. Inserite la funzione Wait Until Next ms Multiple che si trova nella palette Functions»Time & Dialog. Questa funzione determina l’esecuzione del ciclo While dieci volte al secondo. Create una costante cliccando con il tasto destro del mouse sul terminale d’ingresso e selezionando Create»Constant. d. Inserite la funzione Cluster to Array che si trova nella palette Functions»Cluster o Functions»Array. In questa esercitazione questa funzione converte il cluster di pulsanti booleani in una matrice di dati booleani. L’oggetto booleano del cluster di ordine 0 diventa l’elemento booleano di indice 0 della matrice, quello di ordine 1 del cluster diventa l’elemento di indice 1 della matrice e così via. e. Inserite la funzione Search 1D Array che si trova nella palette Functions»Array. In questa esercitazione, questa funzione ricerca nella matrice booleana fornita da Cluster to Array un valore TRUE. Un valore TRUE di un qualsiasi elemento indica che avete cliccato sul pulsante corrispondente. La funzione fornisce un valore –1 se non avete cliccato su un pulsante. f. Inserite la funzione One Button Dialog che si trova nella palette Functions»Time & Dialog. Utilizzerete quattro di queste funzioni per indicare quale stato è stato selezionato e caricato nel registro a scorrimento. 2. Salvate il VI come Menu.vi. 3. Avviate il VI, Quando cliccate sui pulsanti Login, Acquire Data, Analyze & Present Data o Data File View, compare una finestra di dialogo per indicare lo stato corrispondente in cui vi trovate. 4. Utilizzando l’esecuzione passo-passo e evidenziata, osservate come viene eseguito il VI. Notate che finché non premete un pulsante, la funzione Search 1D Array fornisce un valore –1, che determina l’esecuzione continua da parte del ciclo While dello stato -1. Una volta che viene premuto un pulsante, comunque, l’indice dei dati booleani viene usato per determinare lo stato successivo da eseguire. Notate come gli stati del VI corrispondano agli stati nella tabella precedente l’esercitazione. Nelle ultime esercitazioni sostituirete i VI che avete creato per le funzioni One Button Dialog per realizzare l’applicazione. National Instruments Corporation 2-21 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 5. Cliccate sul pulsante Stop per arrestare l’esecuzione. 6. Chiudete il VI quando avete finito. Fine dell’esercitazione 2-3 LabVIEW Corso Base II 2-22 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Esercitazione 2-4 VI Cluster Conversion Example (Opzionale) Obiettivo: Esaminare un VI che utilizza cluster per processare dati. Esaminerete un VI che utilizza cluster per processare dati. Il VI rappresenta un cluster contenente quattro pulsanti etichettati. Il VI tiene traccia del numero di volte che avete cliccato su ogni pulsante. Pannello frontale 1. Aprite il VI Cluster Conversion Example che si trova in c:\exercises\LV Basics 2. Schema a blocchi La condizione False è vuota e serve solo per passare il cluster dal registro a scorrimento di sinistra a quello di destra. 2. Aprite ed esaminate lo schema a blocchi. 3. Avviate il VI. Cliccate su un pulsante. L’indicatore digitale corrispondente dovrebbe incrementarsi ogni volta che cliccate su un pulsante. 4. Chiudete il VI. Non salvate le modifiche. Fine dell’esercitazione 2-4 National Instruments Corporation 2-23 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali C. Nodi Proprietà In alcune applicazioni, potreste aver bisogno di modificare da programma l’aspetto degli oggetti del pannello frontale in risposta a certi ingressi. Per esempio, se un utente inserisce una password non valida, potreste causare l’accensione di un LED rosso. Un altro esempio potrebbe essere di cambiare il colore della traccia su un grafico. Quando i punti si trovano al di sopra di una certa soglia, potreste attivare una traccia rossa invece che verde. Anche ridimensionare gli oggetti del pannello frontale, nascondere parti del pannello frontale e aggiungere cursori al grafico può essere fatto da programma utilizzando i Nodi Proprietà. I Nodi Proprietà in LabVIEW sono molto potenti e consentono molti utilizzi. Questo corso copre solo un utilizzo dei Nodi Proprietà per modificare da programma l’aspetto e le caratteristiche funzionali degli oggetti del pannello frontale. Potete impostare proprietà come i colori del display, la visibilità, la posizione, le dimensioni, il lampeggiamento, le stringhe di menu, le scale dei grafici, i cursori dei grafici e molto altro. Fate riferimento a Help»Contents and Index in LabVIEW per ulteriori informazioni sui Nodi Proprietà. Creazione di Nodi Proprietà Create Nodi Proprietà selezionando l’opzione Create»Property Node dal menu rapido di un oggetto del pannello frontale o dal suo terminale sullo schema a blocchi. Selezionando Create»Property Node si crea un nuovo nodo sullo schema a blocchi vicino al terminale dell’oggetto. Se l’oggetto ha una propria etichetta, il Nodo Proprietà ha la stessa etichetta. Potete modificare l’etichetta dopo aver creato il nodo. Potete creare un qualsiasi numero di Nodi Proprietà per un oggetto del pannello frontale. Siccome ci sono molte proprietà differenti per gli oggetti del pannello frontale, copriremo soltanto le proprietà comuni. Selezionate Help»Contents and Index per trovare informazioni su una proprietà particolare. Utilizzo dei Nodi Proprietà Quando create un Nodo Proprietà, esso inizialmente possiede un terminale che rappresenta una proprietà che potete modificare per l’oggetto corrispondente del pannello frontale. Utilizzando questo terminale sul Nodo Proprietà, potete sia impostare (scrivere) la proprietà che leggere lo stato corrente di quella proprietà. Per esempio, se create un Nodo Proprietà per un controllo digitale, esso appare sullo schema a blocchi con la proprietà Visible mostrata nel suo terminale. Una piccola freccia appare sul lato destro di quel terminale, ad indicare che potete leggere un valore dalla proprietà Visible del controllo digitale. LabVIEW Corso Base II 2-24 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Potete modificarla in una proprietà di scrittura cliccando con il tasto destro del mouse sul nodo e selezionando Change To Write dal menu rapido. Collegando un FALSE booleano a quel terminale si provocherà la sparizione del controllo digitale dal pannello frontale quando il Nodo Proprietà riceve i dati. Collegando un TRUE si determina la ricomparsa del controllo. Potete leggere lo stato corrente di una proprietà cliccando con il tasto destro del mouse sul terminale Nodo Proprietà e selezionando Change To Read. Quando viene chiamato il Nodo Proprietà, porrà in uscita un booleano TRUE se il controllo è visibile o un booleano FALSE se è invisibile. Dal terminale sul Nodo Proprietà, potete selezionare le proprietà cliccando sul nodo con lo strumento Modifica, mostrato a sinistra, e selezionando la proprietà desiderata dal menu rapido. Potete leggere o impostare più di una proprietà sullo stesso nodo allargando il Nodo Proprietà. Utilizzando lo strumento Posiziona, mostrato a sinistra, cliccate sull’angolo inferiore del Nodo Proprietà e trascinate l’angolo verso il basso per allargare il nodo. Quando allargate il nodo, aggiungete terminali. Potete quindi associare ogni terminale del Nodo Proprietà con una proprietà dal suo menu rapido. Alcune proprietà sono cluster. Questi cluster contengono diverse proprietà che voi potete separare utilizzando la funzione Unbundle che si trova nella palette Functions»Cluster. Per scrivere su queste proprietà è necessaria la funzione Bundle: Lettura di proprietà raggruppate Scrittura di proprietà raggruppate National Instruments Corporation 2-25 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Per accedere alle proprietà raggruppate, selezionate l’opzione All Elements dal menu rapido della proprietà. Per esempio, potete accedere a tutti gli elementi nella proprietà Position selezionando Position»All Elements o potete accedere ad un singolo elemento da quel gruppo. Ordine di esecuzione di Nodi Proprietà I terminali del Nodo Proprietà vengono eseguiti dall’alto verso il basso. Nell’esempio seguente, nel Nodo Proprietà di un grafico di forme d’onda, il grafico viene dapprima reso visibile. Quindi Plot 0 viene impostato come traccia attiva, il suo colore è rosso e il nome della traccia nella legenda viene aggiornato. Infine, Plot 1 viene impostato come traccia attiva, il suo colore è il verde e il nome della traccia nella legenda viene cambiato. Ordine di esecuzione Utilizzo della finestra Context Help Utilizzate la finestra di LabVIEW Context Help e Help»Contents and Index per trovare descrizioni, tipi di dati e valori accettabili per i Nodi Proprietà. Con la finestra di Context Help attiva, passate il cursore sopra i terminali del Nodo Proprietà per visualizzare informazioni. L’esempio seguente mostra l’help per una singola proprietà ed un cluster con diverse proprietà. LabVIEW Corso Base II 2-26 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Proprietà comuni Ci sono molte proprietà disponibili in LabVIEW per i vari oggetti del pannello frontale. Questa sezione descrive le proprietà Visible, Disable, Key Focus, Blink, Position, Bounds e Value, che sono comuni a tutti gli oggetti del pannello frontale. Vengono inoltre introdotti alcuni Nodi Proprietà per alcuni tipi particolari di controlli e indicatori. Proprietà Visible La proprietà Visible, mostrata a sinistra, imposta o legge la visibilità di un oggetto del pannello frontale. L’oggetto associato è visibile quando è TRUE, nascosto quando è FALSE. Esempio di collegamentoImpostate un controllo digitale su uno stato invisibile. Un booleano TRUE rende visibile il controllo, come mostrato. Schema a blocchi Pannello frontale Visible = TRUE Visible = FALSE Proprietà Disabled La proprietà Disabled, mostrata a sinistra, imposta o legge lo stato di accesso dell’utente ad un oggetto. Un valore di 0 abilita un oggetto affinché l’utente possa lavorarci. Un valore di 1 disabilita l’oggetto, impedendone il funzionamento. Un valore di 2 disabilita e fa diventare grigio l’oggetto. Esempio di collegamentoDisabilitate l’accesso dell’utente al controllo digitale. Il controllo non cambia aspetto quando viene disabilitato. National Instruments Corporation 2-27 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esempio di collegamentoDisabilitate l’accesso dell’utente al controllo e fatelo diventare grigio Proprietà Key Focus La proprietà Key Focus, mostrata a sinistra, imposta o legge il key focus di un oggetto del pannello frontale. Quando è TRUE, il cursore è attivo nell’oggetto associato. Nella maggior parte dei controlli, potete inserire valori nel controllo digitandoli con la tastiera. Potete anche impostare il key focus sul pannello frontale premendo il tasto <Tab> mentre si è in esecuzione o premendo il tasto associato al controllo (assegnato utilizzando l’opzione Key Navigation). Esempio di collegamentoAttivate sul controllo digitale il key focus. Potete allora inserire un nuovo valore nel controllo senza selezionarlo con il cursore. Proprietà Blinking La proprietà Blinking, mostrata a sinistra, legge o imposta lo stato di lampeggiamento di un oggetto. Impostando questa proprietà su TRUE, un oggetto inizierà a lampeggiare. Potete impostare la frequenza di lampeggiamento e i colori selezionando Tools»Options e quindi Front Panel e Colors dal menu a tendina. Quando questa proprietà è impostata su FALSE, l’oggetto smette di lampeggiare. Esempio di collegamentoAbilitate il lampeggiamento di un controllo digitale. 1 1 Schema a blocchi 2 2 Pannello frontale: Normale 3 3 Pannello frontale: lampeggiante Proprietà Value La proprietà Value, mostrata a sinistra, legge o imposta il valore corrente di un oggetto. Quando impostate la proprietà Value in scrittura, essa scrive il valore collegato all’oggetto sia nel caso di un controllo che di un indicatore. LabVIEW Corso Base II 2-28 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Quando impostate la proprietà Value in lettura, essa legge il valore collegato all’oggetto sia nel caso di un controllo che di un indicatore. L’esempio seguente mostra un valore di pi greco scritto su un controllo numerico e il valore all’interno di una stringa scritto su un’altra stringa. Proprietà Position La proprietà Position, mostrata a sinistra, imposta o legge la posizione dell’angolo superiore sinistro di un oggetto sul pannello frontale. La posizione è determinata in unità di pixel relative all’angolo superiore sinistro del panello frontale. Questa proprietà consiste in un cluster di due interi di tipo long senza segno. Il primo elemento nel cluster (Left) è la posizione del bordo sinistro del controllo relativamente al bordo sinistro del pannello frontale, e il secondo elemento nel cluster (Top) è la posizione del bordo superiore del controllo relativamente al bordo superiore del pannello frontale. Esempio di collegamentoFate cambiare posizione al controllo digitale sul pannello frontale. National Instruments Corporation 2-29 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Proprietà Bounds La proprietà Bounds, mostrata a sinistra, legge i limiti di un oggetto sul pannello frontale in unità di pixel. Il valore include il controllo e tutte le sue parti, inclusa l’etichetta, la legenda, la scala e così via. Questa proprietà consiste in un cluster di due interi di tipo long senza segno. Il primo elemento nel cluster (Width) è la larghezza dell’oggetto in pixel, e il secondo (Height) l’altezza dell’oggetto in pixel. Questa è una proprietà di sola lettura. Essa non ridimensiona un controllo o un indicatore del pannello frontale. Alcuni oggetti hanno altre proprietà per il ridimensionamento, come la proprietà Plot Area Size per i grafici. Esempio di collegamentoDeterminate i limiti di un controllo digitale. Proprietà Numeric: Format and Precision La proprietà Format and Precision, mostrata a sinistra, imposta o legge il formato (tipo di notazione) e precisione (numero di cifre visualizzate dopo il punto decimale) degli oggetti numerici del pannello frontale. L’ingresso è un cluster di due interi di tipo long senza segno. Il primo elemento imposta il formato e il secondo imposta la precisione. La proprietà Format può assumere uno dei seguenti valori interi: 0 - Notazione decimale 1 - Notazione scientifica 2 - Notazione ingegneristica 3 - Notazione binaria 4 - Notazione ottale 5 - Notazione esadecimale 6 - Notazione tempo relativo Esempio di collegamentoImpostate il formato del controllo digitale sulla notazione scientifica e 4 cifre di precisione. LabVIEW Corso Base II 2-30 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Proprietà booleana: Strings [4] La proprietà Strings [4], mostrata a sinistra, imposta o legge le etichette su un controllo booleano. L’ingresso è una matrice di quattro stringhe che corrispondono agli stati False, True, True Tracking e False Tracking. True and False: gli stati On e Off dell’oggetto booleano. True e False Tracking: livelli di transizione temporanea tra stati booleani. True Tracking è lo stato di transizione quando l’oggetto booleano passa da True a False. Il tracking si applica solo ad oggetti booleani aventi le azioni meccaniche Switch When Released e Latch When Released. Queste azioni meccaniche sono in uno stato transizionale fino a quando rilasciate il mouse. Le stringhe di testo True Tracking e False Tracking vengono visualizzate durante la transizione. Esempio di collegamentoImpostate le stringhe del display per il controllo Switch sulle scelte Stop, Run, Stop? E Run?. Proprietà String: Display Style La proprietà Display Style, mostrata a sinistra, imposta o legge il display di un controllo o indicatore di stringa. Un intero di tipo long senza segno determina il modo del display. 0 - Normal Display 1 - ‘\’ Codes Display 2 - Password Display 3 - Hex Display National Instruments Corporation 2-31 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esempio di collegamentoMostrate il testo nel controllo di stringa negli altri modi. LabVIEW Corso Base II 2-32 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Esercitazione 2-5 VI Property Node Exercise Obiettivo: Realizzare un VI che utilizzi i Nodi Proprietà per modificare le caratteristiche comuni degli oggetti del pannello frontale. Realizzerete un VI che da programma modifica le proprietà position, disabled e color degli oggetti del pannello frontale. Pannello Frontale 1. Aprite un nuovo VI e realizzate il pannello frontale mostrato sopra. Schema a blocchi National Instruments Corporation 2-33 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 2. Aprite e realizzate lo schema a blocchi mostrato precedentemente utilizzando i componenti seguenti. a. Inserite il ciclo While che si trova nella palette Functions»Structures. Questo determina l’esecuzione del VI fino a quando l’utente preme il pulsante Stop. Cliccate con il tasto destro del mouse sul terminale condizionale e selezionate Stop If True. b. Inserite la funzione Wait Until Next ms Multiple che si trova nella palette Functions»Time & Dialog. Questa funzione determina l’esecuzione del ciclo While una volta al secondo. Create la costante cliccando con il tasto destro del mouse sul terminale d’ingresso e selezionando Create»Constant. c. Inserite la funzione Random Number (0-1) che si trova nella palette Functions»Numeric. Essa crea un numero casuale tra zero e uno. d. Inserite la funzione Multiply che si trova nella palette Functions»Numeric. Essa moltiplica due numeri e viene usata qui per riportare il numero casuale tra 0 e 10. e. Inserite la funzione Greater? che si trova nella palette Functions»Comparison. Essa confronta due valori, in questo caso il valore casuale e quello limite e fornisce True se il valore casuale è più grande di quello limite. Altrimenti fornisce False. f. Inserite la funzione Select che si trova nella palette Functions»Comparison. Utilizzerete due di queste funzioni. Questa funzione prende un ingresso booleano ed emette il valore superiore se il booleano è True e il valore inferiore se il booleano è False. g. Inserite la costante Color Box che si trova nella palette Functions»Numeric»Additional Numeric Constants. Questa costante viene utilizzata per colorare gli oggetti del pannello attraverso il Nodo Proprietà. Avete bisogno di due di queste costanti. Utilizzate lo strumento modifica per selezionare il colore e rendere una rossa e l’altra blu. h. Create il Nodo Proprietà per il Tank. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale Tank e dal menu rapido. selezionate Create»Property Node Ridimensionate questo nodo trascinando l’angolo con lo strumento Posiziona per mostrare tre terminali. Selezionate le proprietà indicate cliccando con il tasto destro del mouse su ogni terminale e selezionando la voce dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change All To Write dal menu. i. Inserite la funzione Bundle che si trova nella palette Functions»Cluster. Questa funzione unisce le posizioni left e top nella proprietà Position del serbatoio. LabVIEW Corso Base II 2-34 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali j. Create il Nodo Proprietà per il booleano. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale Boolean e selezionate Create»Property Node dal menu rapido. Selezionate la proprietà Disabled cliccando con il tasto destro del mouse sul terminale e selezionandola dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change To Write dal menu rapido. k. Create il Nodo Proprietà per la stringa. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale String e selezionate Create»Property Node dal menu rapido. Selezionate la proprietà Disabled cliccando con il tasto destro del mouse sul terminale e selezionandola dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change To Write dal menu rapido. l. Create il Nodo Proprietà per il limite. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale Limit e selezionate Create»Property Node dal menu rapido. Selezionate la proprietà Disabled cliccando con il tasto destro del mouse sul terminale e selezionandola dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change To Write dal menu rapido. m. Create il Nodo Proprietà per la posizione verticale del serbatoio. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale Tank Vertical Position e selezionate Create»Property Node dal menu rapido. Selezionate la proprietà Disabled cliccando con il tasto destro del mouse sul terminale e selezionandola dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change To Write dal menu rapido. n. Create il Nodo Proprietà per la posizione orizzontale del serbatoio. Per creare questo nodo, cliccate con il tasto destro del mouse sul terminale Tank Horizontal Position e selezionate Create»Property Node dal menu rapido. Selezionate la proprietà Disabled cliccando con il tasto destro del mouse sul terminale e selezionandola dal menu Properties. Cliccate con il tasto destro su quel nodo e selezionate Change To Write dal menu rapido 3. Salvate questo VI come Property Node Exercise.vi. 4. Tornate al pannello frontale ed avviate il VI. Dovrebbero succedere molte cose. 5. Innanzitutto quando nuovi numeri casuali vengono generati e scritti sul serbatoio, il colore di riempimento è rosso se il numero casuale è più grande del valore limite e diventa blu se è inferiore. 6. I due cursori cambiano la posizione del serbatoio sul pannello. Spostateli e vedete come si sposta il serbatoio. National Instruments Corporation 2-35 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 7. L’interruttore Disable controlla se potete modificare i valori. Portate l’interruttore Disable su True e tutti gli oggetti del pannello eccetto Disable e il pulsante Stop diventano grigi e non potete modificarne i valori. 8. Arrestate e chiudete il VI quando avete finito. Fine dell’esercitazione 2-5 LabVIEW Corso Base II 2-36 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali D. Proprietà dei grafici I Nodi Proprietà aumentano notevolmente la flessibilità da programma dei grafici. Potete controllare la maggior parte delle caratteristiche dei grafici con i Nodi Proprietà. Alcune di queste proprietà sono il colore della traccia, informazioni sulle scale X e Y, la visibilità delle legende e della palette, le dimensioni dell’area di rappresentazione e i cursori. Legenda della rappresentazione Palette del grafico Legenda delle scale Legende dei cursori Potete avere molte opzioni di scala per i grafici. Con i Nodi Proprietà, potete impostare o leggere le informazioni di scala per le X e le Y. Per ogni asse il VI può leggere o impostare i valori minimo, massimo e di incremento. Potete anche utilizzare i Nodi Proprietà per impostare o leggere da programma i colori della traccia e dello sfondo e i colori della griglia X e Y. Potete utilizzare questa possibilità per impostare i colori della traccia e dello sfondo in funzione delle condizioni del programma come ad esempio valori out of range o di errore. Per cambiare le dimensioni di un grafico, utilizzate la proprietà Plot Area»Size. Se volete che una traccia particolare appaia in una piccola finestra durante un’applicazione ma appaia più grande più avanti, potete utilizzare questa proprietà insieme con altre proprietà che modificano le dimensioni di un pannello di VI. Utilizzando i Nodi Proprietà, avete accesso alle informazioni che i cursori forniscono sui grafici. Utilizzate i cursori per spostare un selettore di grafico sulla traccia. Un cursore può essere bloccato sulla traccia o può muoversi sulla superficie di rappresentazione. I valori provenienti da ciascun cursore vengono forniti su un display opzionale del pannello frontale. National Instruments Corporation 2-37 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali I Nodi Proprietà offrono un modo per impostare o leggere da programma la posizione del cursore sul grafico, consentendo all’utente un accesso dai cursori del VI. Proprietà X (o Y) Range La proprietà X (o Y) Range, mostrata a sinistra, imposta o legge l’intervallo e l’incremento degli assi del grafico. La proprietà accetta un cluster di cinque valori numerici, in funzione del tipo di grafico: valore minimo dell’asse X, valore massimo dell’asse X, incrementi maggiori e minori tra i marcatori dell’asse X e il valore di inizio della scala. Per creare questa proprietà, selezionate X Scale»Range»All Elements dall’elenco delle proprietà. Se non c’è abbastanza spazio per visualizzare tutti i valori incrementali che avete specificato, LabVIEW selezionerà un valore incrementale alternativo. Esempio di collegamentoImpostate l’intervallo dell’asse X tra 0 e 50 con l’incremento maggiore dell’asse di 10, quello minimo di 1 e un valore iniziale di zero. Proprietà Active Plot e Plot Color Le proprietà mostrate a sinistra impostano o leggono la traccia attiva (la traccia per cui le proprietà relative vengono impostate o lette) e il colore della traccia attiva. Active Plot è un intero corrispondente alla traccia desiderata e Plot Color è un intero che rappresenta un colore. La proprietà Plot Color si trova in Plot»Plot Color dall’elenco delle proprietà. Esempio di collegamentoImpostate il colore della traccia attiva utilizzando una costante Color Box (impostata sul rosso in questo esempio). Quando selezionate la traccia attiva, il terminale Active Plot deve precedere (appare prima) il terminale Plot Color. LabVIEW Corso Base II 2-38 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Proprietà Active Cursor, Cursor Position e Cursor Index Le proprietà mostrate a sinistra impostano o leggono il cursore attivo, la sua posizione nel grafico e l’indice (posizione dell’asse X) nella traccia in cui risiede il cursore. La proprietà Active Cursor accetta un intero corrispondente al cursore desiderato quando c’è più di un cursore sul grafico. Cursor Position consiste in un cluster di due numeri a virgola mobile che rappresentano le posizioni X e Y sulla traccia. Per creare la proprietà Cursor Position, selezionate Cursor»Cursor Position»All Elements. Cursor Index accetta un intero corrispondente ad un elemento nella matrice (traccia). Per accedere alla proprietà Cursor Index, selezionate Cursor»Cursor Index. Esempio di collegamentoInserite un cursore nella posizione (55.5, 34.8). Quando selezionate il cursore, il terminale Active Cursor deve precedere il terminale Cursor Position. Siccome il nodo viene eseguito dall’alto verso il basso, potete impostare un’altra posizione di cursore aggiungendo un altro insieme di proprietà Active Cursor e Cursor Position a questo nodo. Plot Area»Size Property Per leggere o modificare le dimensioni di un grafico, inviate nuovi valori di Width e Height alla proprietà Plot Area Size. Width e Height sono espressi in pixel. Esempio di collegamentoRidimensionate un grafico per aumentare del 25% l’altezza e la larghezza. Dopo l’esecuzione Prima dell’esecuzione National Instruments Corporation 2-39 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-6 VI Temperature Limit Obiettivo: Creare un VI che utilizzi i Nodi Proprietà per cancellare un grafico e avvisare l’utente se i dati superano un limite. Completerete la realizzazione di un VI che utilizza i Nodi Proprietà per eseguire le azioni seguenti: y Impostare il valore delta X del grafico sulla frequenza di campionamento in secondi. y Cancellare il grafico affinché inizialmente non contenga dati. y Modificare il colore di una traccia se i dati superano un certo valore. y Far lampeggiare un indicatore di allarme se i dati superano un certo valore. Pannello frontale 1. Aprite il VI Temperature Limit che si trova nella directory c:\exercises\LV Basics 2. Il pannello frontale e parte dello schema a blocchi sono già stati realizzati. LabVIEW Corso Base II 2-40 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Schema a blocchi 2. Modificate il VI in maniera tale che imposti il valore delta X sulla frequenza di campionamento e cancelli il grafico della temperatura prima dell’avvio. Mentre il VI acquisisce i dati, la linea “High Limit” dovrebbe diventare rossa quando la temperatura supera il valore limite e il LED Out of Range dovrebbe lampeggiare. a. Nella struttura Sequence, create un Nodo Proprietà per il grafico Temperature che ha due terminali. Un terminale dovrebbe essere la proprietà multiplier, X Scale»Offset and Multiplier»Multiplier e l’altro terminale dovrebbe essere la proprietà History Data. Per cancellare un grafico dallo schema a blocchi, inviate una matrice di dati vuota alla proprietà History Data. Per fare questo, cliccate con il tasto destro del mouse sulla proprietà e selezionate Create»Constant. Assicuratevi che la costante della matrice sia vuota. b. Nella struttura Case all’interno del ciclo While, create un Nodo Proprietà per il grafico di temperatura che abbia due terminali. Il terminale superiore dovrebbe essere la proprietà Active Plot e quello inferiore la proprietà Plot Color, Plot»Plot Color. Avete bisogno di queste proprietà in entrambe le condizioni della struttura Case. La traccia High Limit è plot 1, quindi impostate la proprietà Active Plot su uno prima di impostare la proprietà Plot Color. Se i dati superano High Limit, impostate il colore su rosso. Altrimenti su giallo. Utilizzate una costante Color Box per inviare il valore del colore su questa proprietà. c. Cliccate con il tasto destro sull’indicatore Out of Range per creare un Nodo Proprietà Blink. L’indicatore dovrebbe lampeggiare quando la temperatura supera High Limit. National Instruments Corporation 2-41 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 3. Salvate il VI con lo stesso nome. 4. Avviate il VI per avere conferma che funziona correttamente. Fine dell’esercitazione 2-6 LabVIEW Corso Base II 2-42 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Esercitazione 2-7 VI Analyze & Present Data Obiettivo: Utilizzare i Nodi Proprietà con i cursori dei grafici. Creerete un VI che utilizza i cursori del grafico per selezionare un sottoinsieme di dati per l’analisi. In un esercizio successivo realizzerete un subVI che salva i risultati su disco. Utilizzerete anche la proprietà Value per inizializzare un indicatore. Nota Utilizzerete questo VI nel progetto della Lezione 5. Pannello frontale 1. Aprite il VI Analyze & Present Data che si trova nella directory c:\exercises\LV Basics 2. Il pannello frontale di questo VI è già realizzato. Voi completerete lo schema a blocchi. Utilizzerete i due cursori indicati per selezionare un sottoinsieme di dati da analizzare. Un cursore può muoversi liberamente o può essere bloccato sulla traccia. Potete controllare questa azione utilizzando il pulsante Lock Control che si trova sul lato destro del display del cursore. Movimento vincolato sui punti della traccia. Movimento libero nell’area di rappresentazione. In questa esercitazione, utilizzate i cursori vincolati sulla traccia. Utilizzate i Nodi Proprietà per impostare inizialmente gli indici del cursore all’inizio e alla fine della matrice di dati quando si avvia il VI. Quando un utente clicca sul pulsante Analyze Selected Subset, leggete la posizione di ogni cursore e utilizzate questa informazione per trovare i valori DC, RMS, di frequenza, di ampiezza e di fase del sottoinsieme di dati. National Instruments Corporation 2-43 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Schema a blocchi 2. Completate lo schema a blocchi precedente. Per creare i Nodi Proprietà, cliccate con il tasto destro del mouse sui terminali Data e Analysis Result e selezionate Create»Property Node dal menu rapido. Utilizzate lo strumento Posiziona per ridimensionare il Nodo Proprietà affinché abbia un numero sufficiente di terminali. Potete scegliere la proprietà cliccando con il tasto destro del mouse sul nodo creato per ultimo e selezionando la proprietà dal menu Proprietà. La proprietà Cursor Index si trova in Cursor»Cursor Index. Inserite la funzione Array Subset che si trova nella palette Functions»Array. In questa esercitazione, questa funzione estrae l’insieme di dati da analizzare. Inserite la funzione Max & Min che si trova nella palette Functions»Comparison. In questa esercitazione, questa funzione determina il primo e l’ultimo indice per trovare il sottoinsieme di dati da analizzare. LabVIEW Corso Base II 2-44 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Inserite il VI Basic Averaged DC-RMS che si trova nella palette Functions»Analyze»Waveforms Measurements. Il VI prende la forma d’onda d’ingresso e calcola i valori DC e RMS. Inserite il VI Extract Single Tone Information che si trova nella palette Functions»Analyze»Waveforms Measurements. Il VI prende la forma d’onda d’ingresso, calcola la risposta in frequenza e fornisce un singolo tono relativo all’ampiezza superiore. LabVIEW fornisce l’ampiezza, la frequenza e i valori di fase di quel singolo tono. 3. Salvate il VI con lo stesso nome. 4. Avviate il VI. Spostate i cursori lungo il grafico per selezionare un sottoinsieme di dati da analizzare e quindi cliccate sul pulsante Analyze Selected Subset. Il risultato appare nel cluster Analysis Results. Quando avete finito, cliccate sul pulsante Return. 5. Chiudete il VI quando avete finito. Fine dell’esercitazione 2-7 National Instruments Corporation 2-45 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali E. Riferimenti al controllo Nelle due sezioni precedenti avete utilizzato i Nodi Proprietà per modificare da programma le caratteristiche degli oggetti del pannello frontale. Se state realizzando un grande VI che contiene molti Nodi Proprietà o state utilizzando la stessa proprietà per diversi controlli e indicatori, potreste anche pensare di inserire il Nodo Proprietà in un subVI ed utilizzare i riferimenti al controllo per accedere a quel nodo. Un Control Reference è un numero riferito ad un controllo specifico. Questa sezione mostra solo un modo di utilizzo di questi oggetti versatili. Fate riferimento ai manuali in LabVIEW per ulteriori informazioni sui riferimenti al controllo. Creazione di riferimenti al controllo Create un riferimento al controllo per un oggetto del pannello frontale sia cliccando con il tasto destro del mouse sull’oggetto sia sul terminale di quell’oggetto e selezionando Create»Reference dal menu rapido. Quindi collegate questo Control Reference ad un subVI che contiene i Nodi Proprietà. Comunque, il subVI deve contenere un terminale che sia Control Refnum. Create il Control Refnum selezionando Controls»Refnum come segue. Utilizzo dei riferimenti al controllo Lo schema a blocchi seguente del subVI mostra come potete utilizzare un riferimento al controllo per impostare molte delle proprietà di un oggetto del pannello frontale. I Nodi Proprietà utilizzano cluster di errore come molte delle funzioni di I/O in LabVIEW e quindi potete utilizzare i sistemi di gestione dell’errore per tenere traccia delle condizioni di errore. Il VI che chiama questo subVI può utilizzarlo per modificare le proprietà di ogni tipo di controllo. L’esempio seguente mostra il subVI che disabilita un numerico e imposta un oggetto booleano come key focus. LabVIEW Corso Base II 2-46 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Più avanti realizzerete un subVI che modifica la proprietà disabled per una matrice di controlli utilizzando i riferimenti al controllo. National Instruments Corporation 2-47 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-8 VI Disable Controls e Control Refs Example Obiettivo: Realizzare un VI che utilizzi i riferimenti al controllo per accedere ai Nodi Proprietà da un sub VI. Inizierete con il VI Property Node Exercise che avete realizzato nell’esercitazione 2-5. Costruirete un subVI che accede ad una matrice di riferimenti di controllo ed assegna la proprietà Disabled. Quindi modificherete il VI Property Node Exercise per utilizzare il subVI piuttosto che i Nodi Proprietà originali. Nota Utilizzerete questo VI nel progetto della Lezione 5. Pannello frontale 1. Aprite un nuovo VI e realizzate il pannello frontale precedente. Schema a blocchi 2. Aprite e costruite lo schema a blocchi precedente utilizzando i componenti seguenti: a. Inserite un ciclo For che si trova nella palette Functions»Structures. Il ciclo For viene utilizzato per l’autoindicizzazione attraverso la matrice di refnum di controllo in maniera tale che ogni refnum e proprietà sia gestito separatamente. b. Inserite un Nodo Proprietà che si trova nella palette Functions»Application Control. Utilizzerete questo Nodo Proprietà come controllo generico. Quando collegate il Refnum Array al terminale di ingresso di refnum, la funzione cambia leggermente come si vede dall’esempio seguente: LabVIEW Corso Base II 2-48 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali c. Cliccate con il tasto destro del mouse sul terminale Property e selezionate Properties»Disabled. Cliccate nuovamente con il tasto destro sul terminale e selezionate Change To Write. d. Inserite la funzione Select che si trova nella palette Functions»Comparison. Questa funzione accetta un ingresso booleano ed emette un valore superiore di 0 (enabled) se il booleano è True e un valore inferiore di 2 (disabled) se il booleano è False. e. Inserite una costante numerica che si trova nella palette Functions»Numeric. Avete bisogno di due di queste costanti una con il valore di 0 e l’altra di 2 per la funzione Select. 3. Salvate il VI come Disabled Controls.vi. 4. Tornate al pannello frontale. Ora realizzerete per il VI un’icona e il riquadro connettori come mostrato di seguito. 5. Salvate e chiudete questo VI. Ora realizzerete un VI chiamante per questo subVI. 6. Aprite il VI Property Node Exercise che avete realizzato nell’esercitazione 2-5. Non modificate il pannello frontale. 7. Selezionate File»Save As e rinominate questo VI Control Refs Exercise.vi. National Instruments Corporation 2-49 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali 8. Aprite lo schema a blocchi e modificatelo come indicato. a. Create i riferimenti di controllo per i sei controlli cliccando con il tasto destro del mouse sui loro terminali e selezionando Create»Reference dal menu rapido. b. Utilizzate la funzione Build Array che si trova nella palette Functions»Array per combinare tutti i riferimenti di controllo in una matrice per passarla al subVI Disable Controls che si trova nella palette Functions»Select A VI. c. Avete bisogno anche della funzione Not che si trova nella palette Functions»Boolean per invertire il valore all’ingresso del subVI. 9. Salvate il VI. 10. Tornate al pannello frontale ed avviate il VI. Notate che quando impostate il selettore su True, tutti i controlli diventano grigi come prima. 11. Chiudete il VI quando avete finito. Fine dell’esercitazione 2-8 LabVIEW Corso Base II 2-50 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali F. Menu run-time di LabVIEW (opzionale) Potete personalizzare la barra dei menu per ogni VI che realizzate in modo tale da avere un menu a tendina personalizzato mentre un VI è in esecuzione. Ci sono due parti che consentono la personalizzazione di menula creazione di menu e la gestione di menu. Potete realizzare menu personalizzati in due modistaticamente durante la fase di creazione o dinamicamente durante l’esecuzione. Potete memorizzare staticamente un modello di menu in un file chiamato runtime menu (RTM). Potete associare un file RTM ad un VI durante la fase di creazione. Quando un VI è in esecuzione, esso carica il menu dal file RTM associato. Potete anche inserire, cancellare e modificare da programma le voci di menu in fase di esecuzione dallo schema a blocchi utilizzando diverse funzioni di LabVIEW. Inoltre potete determinare da programma se un’opzione della barra dei menu è selezionata e da programma gestire la selezione. Con queste caratteristiche, potete personalizzare un menu a tendina per la vostra applicazione. Menu statici I menu statici sono memorizzati in file RTM. Potete abilitare, creare o modificare un file RTM per un VI selezionando Edit»Run-Time Menu. Compare la finestra di dialogo Menu Editor. Sul lato sinistro di questa finestra di dialogo compare l’organizzazione generale delle voci di menu. Le voci di menu sono classificate in tre tipi: User Item, Application Item o Separator. Un User Item può essere gestito da programma nello schema a blocchi. Essa possiede un name, che è la stringa che compare nel menu attuale, e un tag, che è un identificatore di stringa (non tiene conto di maiuscole o minuscole). Un tag identifica uno User Item nello schema a blocchi. National Instruments Corporation 2-51 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Per semplicità, in fase di creazione, quando inserite il nome, viene copiato nel tag. Comunque, potete sempre modificare il tag per renderlo differente dal nome. Perché una voce di menu sia valida, il suo tag non dovrebbe essere vuoto. Le voci di menu non valide appaiono come ???. Un Application Item viene fornito da LabVIEW. Queste voci fanno parte del menu di default di LabVIEW. Per selezionare una voce particolare di LabVIEW, cliccate sul pulsante a freccia vicino a Item Name. Potete aggiungere voci singole o interi sottomenu utilizzando questo processo. Gli Application Items vengono gestiti in modo implicito da LabVIEW. Questi tag di voci non compaiono nello schema a blocchi. Non potete alterare il nome, il tag o altre proprietà di un Application Item. LabVIEW riserva dei tag che iniziano con APP_ per gli Application Item. Un Separator inserisce una linea di separazione nel menu. Non potete impostare tutte le proprietà per una voce Separator. Il Menu Editor garantisce che un tag sia unico per una data gerarchia di menu aggiungendo dei numeri, se necessario. Uno User Item può essere abilitato/disabilitato o verificato/non verificato impostando le proprietà relative. Potete impostare una combinazione rapida di tasti (acceleratore) per uno User Item, selezionando un’opportuna combinazione di tasti. Il Menu Editor vi consente di inserire, cancellare o riordinare delle voci di menu nella gerarchia dei menu. Cliccando sul pulsante + si aggiunge una nuova voce di menu. Potete anche modificare il tipo di voce di menu selezionandola da Item Type. Inoltre potete riordinare le voci di menu e creare sottomenu utilizzando i pulsanti a freccia. Infine, cliccando sul pulsante Delete Item si cancellano le voci di menu selezionate. La parte di anteprima del Menu Editor fornisce una vista aggiornata del menu run-time. Sul menu a tendina Menu Editor, i pulsanti Open, New, Save e Save As vi consentono di caricare e salvare file RTM. Una volta che avete chiuso il Menu Editor, avete la possibilità di aggiornare i menu run-time dei VI con il menu che avete creato. Menu dinamici Mentre un VI è in esecuzione, potete modificare le voci della barra dei menu del VI utilizzando le funzioni di gestione dei menu descritte nella sezione seguente. Tutte queste funzioni si trovano in Functions»Application Control»Menu. Queste funzioni operano su un refnum del menu ricavato utilizzando la funzione Current VI’s Menu. LabVIEW Corso Base II 2-52 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Insert Menu Items Inserisce una voce di menu (o una matrice di voci di menu) individuata da item names o item tags in un menu (barra dei menu o sottomenu). La posizione della voce viene specificata sia attraverso il parametro after item che attraverso una combinazione della coppia menu tag e after item. Delete Menu Items Cancella una voce di menu (o una matrice di voci di menu) individuata da items in un menu individuato da menu tag (dalla barra dei menu, se non viene specificato menu tag). Items può essere un tag, una matrice di tag, un numero di posizione o una matrice di numeri di posizione. Get Menu Item Info Fornisce le proprietà della voce di menu definita attraverso item tag (o menubar se item tag non è specificato). Le proprietà comprendono item name, enabled, checked e shortcut. Se la voce ha un sottomenu collegato, i suoi tag vengono forniti in submenu tags. National Instruments Corporation 2-53 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Set Menu Item Info Imposta le proprietà della voce di menu individuata da item tag. Le proprietà della voce comprendono item name, enabled, checked e shortcut. Le proprietà non collegate rimangono invariate. Get Menu Shortcut Info Fornisce la voce di menu che è accessibile tramite una certa combinazione rapida. Gestione di Menu Selection Le funzioni Menu Selection gestiscono le vostre selezioni di menu. I menu potrebbero essere stati costruiti staticamente in VI Properties o dinamicamente durante l’esecuzione. Per impostare lo schema a blocchi affinché gestisca le selezioni di menu, prendete il controllo sul processo di selezione dei menu con la funzione Get Menu Selection. Mentre il VI controlla la selezione dei menu, aspetta una voce di menu selezionata utilizzando la stessa funzione, Get Menu Selection. Tutte le voci di menu in LabVIEW sono gestite in maniera implicita da LabVIEWsolo le selezioni del menu utente vengono ottenute attraverso Get Menu Selection. Una volta che avete selezionato una voce, non potete selezionarne un’altra finché la funzione Get Menu Selection non ha letto la prima voce. In tali condizioni, Get Menu Selection viene chiamata in modalità blocco menu, in cui il tracciamento del menu viene bloccato dopo che è stata letta una selezione. Il menu viene abilitato dopo che avete processato la selezione utilizzando la funzione Enable Menu Tracking. Current VI’s Menubar Fornisce il refnum menubar del VI corrente. Questa funzione dev’essere eseguita prima che siano richiamate altre funzioni di gestione dei menu. LabVIEW Corso Base II 2-54 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Get Menu Selection Fornisce item tag dell’ultima voce di menu selezionata, opzionalmente aspettando un periodo di tempo specificato da timeout. Item path è una stringa che descrive la posizione della voce nella gerarchia dei menu. La selezione dei menu viene bloccata dopo che una voce è stata letta se block menu viene impostato su TRUE. Enable Menu Tracking Questa funzione abilita o disabilita il tracciamento dei menu. Una volta che un menu è stato bloccato utilizzando la funzione Get Menu Selection, dev’essere eseguito Enable Menu Tracking per riabilitare il menu a tendina. National Instruments Corporation 2-55 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-9 VI Pull-down Menu (Opzionale) Obiettivo: Realizzare un VI utilizzando un menu run-time personalizzato. Questo VI illustra come modificare e controllare da programma un menu personalizzato in un’applicazione in LabVIEW. 1. Aprite il VI Pull-down Menu che si trova in c:\exercises\LV Basics 2. Il pannello frontale e lo schema a blocchi sono parzialmente completi. Realizzerete un menu run-time personalizzato per questo VI utilizzando il Menu Editor e completerete lo schema a blocchi in maniera tale da poter accedere a questo menu. 2. Selezionate Edit»Run-Time Menu per visualizzare la finestra di dialogo Menu Editor. Il menu run-time corrente per l’applicazione è il menu di default di LabVIEW. Nei prossimi passi sostituirete questo menu con un elenco personalizzato di selezioni. 3. Modificate il controllo superiore di tipo ring in Menu Editor da Default a Custom. Il menu elencato nella parte sinistra della finestra di dialogo dovrebbe essere sostituito da ??? che rappresenta una singola voce senza nome. 4. Nel controllo di tipo ring Item Type, selezionate Application Item»Operate»Entire Menu. Il menu di LabVIEW Operate dovrebbe essere aggiunto al menu personalizzato. Le opzioni di default in LabVIEW, così come le selezioni che avete creato, possono essere aggiunte ad un menu personalizzato. Provate un momento a navigare nel menu Operate dell’editor. Notate che potete scegliere varie voci e aprire sottomenu utilizzando le icone a triangolo. Quando selezionate singole voci del menu, il loro Item Name e Item Tag appaiono nella finestra Item Properties dell’editor. Quando avete finito, chiudete il menu Operate cliccando sul triangolo accanto all’opzione Operate. LabVIEW Corso Base II 2-56 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Ora dovreste vedere solo la voce Operate nell’elenco dei menu. 5. Cliccate sul pulsante + nella barra degli strumenti di Menu Editor. Nell’elenco compare una nuova voce senza nome, ???. Quando questa voce è evidenziata, inserite Test nella proprietà Item Name. Questa voce di menu ora ha un nome e un tag Test. 6. Cliccate nuovamente sul pulsante + per aggiungere un’altra voce sotto quella di Test. Cliccate sul pulsante con la freccia a destra e questa opzione senza nome diventa una sotto-voce del menu Test. Digitate Test 1 per questa nuova voce. 7. Aggiungete due nuove sotto-voci a Test chiamandole Test 2 e Test 3. La finestra di dialogo Menu Editor dovrebbe avere ora l’aspetto seguente: Nell’area Preview del Menu Editor, potete vedere come sarà il menu personalizzato durante l’esecuzione. 8. Selezionate File»Save dalla finestra di dialogo Menu Editor. Salvate il menu run-time come Menu Exercise.rtm nella directory c:\exercises\LV Basics 2. Chiudete la finestra di dialogo Menu Editor. Quando LabVIEW vi chiede se volete adottare come menu run-time Menu Exercise.rtm selezionate Yes. Avete così configurato un menu a tendina personalizzato che sarà richiamato mentre il VI è in esecuzione. National Instruments Corporation 2-57 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Schema a blocchi 9. Modificate lo schema a blocchi del VI e completatelo come mostrato precedentemente. a. Inserite la funzione Current VI’s Menubar che si trova nella palette Functions»Application Control»Menu. Questa funzione fornisce un refnum per il menu a tendina del VI selezionato, affinché possa essere utilizzato. b. Inserite la funzione Get Menu Selection che si trova nella palette Functions»Application Control»Menu. Ogni volta che viene eseguito il ciclo While, la funzione Get Menu Selection fornisce un Item Tag per ogni voce selezionata dall’utente nel menu runtime. Se nessuna voce è stata selezionata, Item Tag fornisce una stringa vuota. Questa funzione è configurata in maniera tale che ogni volta che legge la barra dei menu, impedisce all’utente di effettuare un’altra scelta nel menu finché non viene eseguita Enable Menu Tracking. c. Inserite la funzione Enable Menu Tracking che si trova nella palette Functions»Application Control»Menu. Questa funzione abilita il menu a tendina, dopo che è stato disabilitato dalla funzione Get Menu Selection. 10. Salvate il VI ed avviatelo. Quando il VI è in esecuzione, compare sul pannello frontale il menu run-time personalizzato. Se selezionate una delle voci presenti nel menu a tendina Test, il nome relativo compare nell’indicatore Item Tag e compare una finestra di dialogo con il nome del test all’interno. A questo punto, se provate a selezionare un’altra voce dal menu a tendina, noterete che il menu è disabilitato (ciò è causato dal parametro di blocco menu della funzione Get Menu Selection). Se cliccate su OK nella finestra di dialogo, l’indicatore Item Tag viene cancellato e il menu abilitato nuovamente dalla funzione Enable Menu Tracking. LabVIEW Corso Base II 2-58 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Inoltre, notate che le voci del menu a tendina Operate non vengono mostrate nella stringa Item Tagsolo le voci dell’utente vengono fornite dall’opzione Get Menu Selection. Per osservare il flusso del VI, potreste utilizzare l’esecuzione evidenziata e passo-passo ed esaminare lo schema a blocchi. Cliccate su Stop del pannello frontale del VI per arrestare l’esecuzione del programma. 11. Utilizzando il Menu Editor, potete assegnare combinazioni rapide di tasti alle voci che avete creato. Assegnate combinazioni rapide di tasti alle opzioni di test secondo la tabella seguente: Voce del Menu Combinazione di tasti per Windows Combinazione di tasti per Macintosh Test 1 <Ctrl-1> <option-1> Test 2 <Ctrl-2> <option-2> Test 3 <Ctrl-3> <option-3> Oltre alle impostazioni precedenti, su piattaforme Windows potete assegnare alle voci di menu delle combinazioni con ALT. Ciò si realizza facendo precedere da un underscore la lettera del nome di menu scelta per la combinazione. Per esempio, per assegnare ALT-X ad una voce di menu chiamata Execute, date all’opzione Execute un Item Name di E_xecute. In questa esercitazione, assegnate ALT-T all’opzione Test del menu. 12. Salvate il menu con le assegnazioni rapide di tasti ed avviate il VI. Ora dovreste essere in grado di utilizzare tali combinazioni di tasti al posto del cursore, per selezionare le diverse opzioni di test. 13. Chiudete il VI. Fine dell’esercitazione 2-9 National Instruments Corporation 2-59 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali G. Diagrammi d’intensità I diagrammi d’intensità sono estremamente utili per la visualizzazione di dati campionati. Per esempio, i diagrammi funzionano meglio per la visualizzazione del terreno, in cui l’ampiezza rappresenta l’altitudine. Inoltre, potete rappresentare dati di temperatura con i diagrammi d’intensità. Come per i grafici tipo chart e tipo graph, il diagramma d’intensità tipo chart rappresenta un display con scorrimento, mentre quello tipo graph mostra un display fisso. Questi display accettano un blocco dati e mappano ogni valore con un colore associato, con un massimo di 256 colori disponibili. Opzioni dei diagrammi d’intensità I display dei diagrammi d’intensità tipo chart e tipo graph utilizzano molte delle stesse opzioni delle loro controparti (grafici). Il pannello frontale seguente mostra molte delle opzioni disponibili. I diagrammi d’intensità forniscono anche delle opzioni non disponibili negli altri tipi di grafici. Siccome visualizzano un terzo valore (colore), è disponibile una scala dei colori. Potete utilizzare queste opzioni per impostare e visualizzare lo schema di mappatura dei colori. Il grafico d’intensità aggiunge anche un terzo valore, il valore z, al display del cursore. Scala dei colori Asse Z Asse Y Palette del grafico Asse X Legenda della scala Legenda del cursore Per modificare il colore associato ad uno specifico valore d’intensità, cliccate con il tasto destro del mouse sul marcatore che compare accanto alla scala dei colori e selezionate Marker Color dal menu. Compare la palette dei colori, da cui potete selezionare un colore per associarlo con un particolare valore numerico. Per aggiungere più valori alla scala dei colori, cliccate con il tasto destro del mouse su di essa e selezionate Add Marker. Potete trascinare nell’opportuna posizione della scala dei colori il marcatore a bordo spesso che appare, o selezionare il marcatore con lo strumento Testo e digitare la posizione del marcatore. Dopo che avete inserito il marcatore in un’opportuna posizione nella scala, cliccate con il tasto destro del mouse su di esso e selezionate Marker Color. LabVIEW Corso Base II 2-60 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Tipi di dati per i diagrammi di intensità I diagrammi di intensità di tipo chart e di tipo graph accettano una matrice bidimensionale di numeri. La posizione di ogni elemento nella matrice (i suoi indici di riga e di colonna) corrisponde ai valori di X e di Y. L’ampiezza di ogni elemento della matrice corrisponde ad un colore. L’esempio seguente mostra una matrice 4 x 3 rappresentata su un diagramma di intensità. Notate come Intensity Graph trasponga gli elementi della matrice. National Instruments Corporation 2-61 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercitazione 2-10 VI Intensity Graph Example Obiettivo: Utilizzare un diagramma di intensità. Utilizzerete un VI che visualizza dei dati di un’onda d’interferenza su un diagramma di intensità. Utilizzerete il VI anche per rappresentare una matrice bidimensionale di dati sul grafico. 1. Aprite ed avviate il VI Intensity Graph Example che si trova nella directory c:\exercises\LV Basics 2. Di default il VI rappresenta una forma d’onda d’interferenza. Un Nodo Proprietà sullo schema a blocchi definisce l’intervallo dei colori utilizzati nel diagramma d’intensità. Potete modificare l’intervallo dei colori aprendo lo schema a blocchi e modificando la costante Color Array. 2. Cambiate la posizione del selettore Plot sul pannello frontale, portandola su User Data ed inserite i valori tra 0.0 e 10.0 nei controlli della matrice User Data. Avviate il VI. Notate come l’ampiezza di ogni elemento sia riportata sul grafico d’intensità. LabVIEW Corso Base II 2-62 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali 3. Chiudete il VI. Non salvate i cambiamenti. Fine dell’esercitazione 2-10 National Instruments Corporation 2-63 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Sommario, trucchi e consigli LabVIEW Corso Base II y Quando progettate interfacce utente, tenete presente: il numero di oggetti nel pannello frontale, il colore, la spaziatura e l’allineamento degli oggetti, il testo e i font utilizzati. y LabVIEW possiede gli strumenti seguenti per aiutarvi a creare interfacce utente: finestre di controllo, controlli tab, decorazioni, menu e ridimensionamento automatico degli oggetti del pannello frontale. y I pulsanti Latched Boolean in un cluster possono essere utilizzati per realizzare menu per le applicazioni. y Potete convertire un cluster che contiene componenti con lo stesso tipo di dato in una matrice e quindi utilizzare le funzioni delle matrici per processare i componenti del cluster. La funzione Cluster To Array (palette Functions»Cluster o Functions»Array) converte un cluster in una matrice monodimensionale. y I Nodi Proprietà sono strumenti potenti per l’ampliamento delle potenzialità dell’interfaccia utente. Utilizzate i Nodi Proprietà per modificare da programma l’aspetto e le caratteristiche funzionali dei controlli e degli indicatori del pannello frontale. y Create Nodi Proprietà dal menu rapido Create di un controllo o di un indicatore (o di un terminale di un controllo o di un indicatore sullo schema a blocchi). y Potete creare diversi terminali Nodi Proprietà per un singolo oggetto del pannello frontale, e così potete configurare le proprietà da diverse posizioni nello schema a blocchi. y Potete impostare o leggere le proprietà come l’accesso dell’utente (enable, disable, gray out), i colori, la visibilità, la posizione e il lampeggiamento. y I Nodi Proprietà aumentano notevolmente la funzionalità dei grafici cambiando le dimensioni delle rappresentazioni, regolando i valori delle scale e azionando i cursori o leggendo da essi. y Utilizzate la finestra Context Help per saperne di più sulle singole proprietà. y Potete utilizzare i riferimenti al controllo e i refnum per accedere ai Nodi Proprietà all’interno dei subVI. y Per creare i vostri menu run-time, selezionate Edit»Run-Time Menu per visualizzare la finestra di dialogo Menu Editor. y Potete creare e leggere da programma menu run-time con le funzioni presenti nella palette Functions»Application Control»Menu. y Potete utilizzare diagrammi di intensità per rappresentare dati tridimensionali. La terza dimensione è rappresentata da colori differenti corrispondenti alla mappatura dei colori da voi definita. 2-64 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali I diagrammi di intensità sono usati comunemente con l’analisi spettrale, la visualizzazione di temperatura e l’elaborazione delle immagini. National Instruments Corporation 2-65 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Esercizi aggiuntivi LabVIEW Corso Base II 2-11 Modificate l’esercitazione 2-4 aggiungendo un cluster con quattro pulsanti etichettati. Ogni volta che cliccate su un pulsante nel nuovo cluster, decrementate il display di uno. Utilizzate il pannello frontale come segue per iniziare. Salvate il VI come Cluster Example 2.vi. 2-12 Realizzate un VI che modifichi un controllo di un pulsante sul pannello frontale. Il pulsante dovrebbe controllare l’esecuzione del VI (cioè terminare il ciclo While). Utilizzate un Dialog Ring per selezionare le opzioni seguenti: pulsanti Enable e Show, pulsante Disable, pulsante Grey out e pulsante Hide. Utilizzate i Nodi Proprietà per implementare le azioni che il Dialog Ring definisce. Provate i diversi modi di funzionamento del pulsante mentre provate ad arrestare il VI. Salvate il VI come Button Input.vi quando avete finito. 2-13 Aprite il VI Analyze & Present Data che avete sviluppato nell’esercitazione 2-7 e modificate il VI in maniera tale che se il numero di punti nel sottoinsieme sia un punto o meno, il pulsante Log Results to File viene reso opaco. 2-66 National Instruments Corporation Lezione 2 Progettazione di pannelli frontali Note National Instruments Corporation 2-67 LabVIEW Corso Base II Lezione 2 Progettazione di pannelli frontali Note LabVIEW Corso Base II 2-68 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Questa lezione descrive come potete organizzare gli schemi a blocchi dei vostri VI basandosi sul modo di trasferite i dati da un posto all’altro. Innanzitutto vi verrà ricordato come LabVIEW avvia un VI. Quindi imparerete ad utilizzare i dati locali e globali per passare i dati fra i VI e al loro interno e vi saranno forniti consigli per utilizzare questi dati in maniera efficiente. Da ultimo imparerete ad utilizzare DataSocket per passare i dati tra VI e computer. Imparerete: A. A conoscere le tecniche di gestione dei dati in LabVIEW B. Ad utilizzare le variabili locali C. Ad utilizzare le variabili globali D. A conoscere qualche sistema di utilizzazione di variabili locali e globali E. Ad utilizzare DataSocket. National Instruments Corporation 3-1 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati A. Tecniche di gestione dei dati in LabVIEW La lezione precedente descriveva come realizzare l’interfaccia utente o pannello frontale di un VI. Questa lezione si concentra su alcune funzioni dello schema a blocchi, come passare i dati tra i nodi e controllare l’ordine di esecuzione. Come già sapete, il principio che governa l’esecuzione di un programma in LabVIEW viene chiamato a flusso di dati. Le regole del flusso di dati sono: y Un nodo viene eseguito solo quando i dati sono disponibili a tutti i suoi terminali d’ingresso. y Un nodo fornisce i dati a tutti i suoi terminali di uscita quando ha completato l’esecuzione. y I dati fluiscono attraverso i collegamenti istantaneamente. Quindi uno schema a blocchi non viene eseguito dall’alto verso il basso o da sinistra a destra, ma secondo le regole del flusso di dati. Ciò contrasta con il metodo del controllo del flusso di esecuzione di un programma convenzionale in cui le istruzioni vengono eseguite nella sequenza in cui sono scritte. I collegamenti sono la chiave per comprendere come il flusso di dati opera in LabVIEW. Quando i fili sono direttamente collegati da un nodo al successivo, l’ordine di esecuzione è definito. Se non ci sono collegamenti tra due nodi, allora quei nodi possono essere eseguiti contemporaneamente. Se dovete eseguire quei due nodi in ordine, dovete utilizzare una struttura Sequence o, se i nodi sono subVI, creare delle dipendenze dei dati da programma come i cluster di errore per controllare l’esecuzione del programma. Quando non potete usare collegamenti I fili sono il metodo più efficace per passare i dati da un nodo al successivo quando utilizzate la programmazione a flusso di dati. Sullo schema a blocchi i dati vengono trasferiti da una funzione o da un VI ad un altro collegandoli con un filo. I dati allora fluiscono dal produttore al consumatore. Nodo 1 LabVIEW Corso Base II 3-2 Nodo 2 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Questo approccio non funziona se avete bisogno di scambiare dati tra schemi a blocchi che operano in parallelo. Schemi a blocchi in parallelo possono trovarsi in due cicli paralleli dello stesso schema a blocchi o in due VI che sono richiamati senza che ci sia dipendenza nel flusso dei dati. Considerate lo schema a blocchi seguente. Nodo 1 Nodo 2 Questo schema a blocchi non esegue i due cicli in parallelo perché c’è un collegamento tra i due subVI. Il collegamento crea una dipendenza dei dati in cui il secondo ciclo non si avvia finché il primo non ha finito e passa i dati attraverso il suo tunnel. Il solo modo di eseguire i due cicli contemporaneamente è di rimuovere il collegamento. Tuttavia i subVI non possono scambiarsi dati a meno che non utilizziate un’altra tecnica di gestione dei dati. Questa lezione descrive le variabili locali, le variabili globali e DataSocket come metodi per passare i dati attraverso parti dello stesso schema a blocchi e tra schemi a blocchi differenti. National Instruments Corporation 3-3 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati B. Variabili locali Fino ad ora, avete letto o aggiornato i dati da un oggetto del pannello frontale utilizzando il suo terminale sullo schema a blocchi. Tuttavia un oggetto del pannello frontale ha solo un terminale sullo schema a blocchi e potreste aver bisogno di aggiornare o leggere un oggetto del pannello frontale da diversi posti dello schema a blocchi. Utilizzando le variabili locali, potete accedere ad oggetti del pannello frontale in diversi posti e passare i dati attraverso strutture che non possono essere collegate da un filo. Creazione di variabili locali Ci sono due modi per creare variabili locali sullo schema a blocchi. Se avete già creato un oggetto del pannello frontale, potete creare una variabile locale cliccando con il tasto destro del mouse sull’oggetto e selezionando Create»Local Variable dal menu rapido. Potete utilizzare questo metodo sul pannello frontale o sullo schema a blocchi. Appare un’icona della variabile locale per l’oggetto del pannello frontale accanto al terminale dello schema a blocchi. Quando cliccate con il tasto destro del mouse sul terminale per creare una variabile locale, la variabile locale si riferisce all’oggetto su cui avete cliccato per creare l’icona. Potete anche selezionare Local Variable dalla palette Structures. Sullo schema a blocchi appare un nodo di variabile locale, mostrato a sinistra. Potete selezionare l’oggetto del pannello frontale al quale volete accedere cliccando con il tasto destro del mouse sul nodo della variabile e selezionando un oggetto dal menu Select Item. Questo menu elenca le etichette dei controlli e degli indicatori del pannello frontale. Per questo motivo etichettate sempre i vostri controlli e indicatori del pannello frontale con nomi descrittivi utilizzando le etichette. Per esempio, se il primo oggetto che avete creato sul pannello frontale è etichettato come number in, appare l’icona di variabile locale mostrata a sinistra. Dopo che avete inserito la variabile locale nello schema a blocchi, potete selezionare l’oggetto del pannello frontale opportuno cliccando sulla variabile con lo strumento Modifica o cliccando con il tasto destro del mouse su di esso e selezionando l’oggetto del pannello frontale dal menu Select Item. LabVIEW Corso Base II 3-4 National Instruments Corporation Lezione 3 Pannello frontale Tecniche di gestione dei dati Schema a blocchi Read Local e Write Local Potete leggere dati da una variabile locale oppure scriverci sopra. Dopo che avete inserito la variabile locale nello schema a blocchi, dovete decidere come utilizzarla. Di default, una variabile locale assume di ricevere dati. Quindi, questo tipo di variabile locale agisce come un indicatore ed è una write local. Quando scrivete nuovi dati nella variabile locale, il controllo o l’indicatore relativo del pannello frontale si aggiornano per prendere il nuovo dato. Potete modificare la configurazione di una variabile locale affinché agisca come sorgente di dati o read local. Per fare questo, cliccate con il tasto destro del mouse sulla variabile e selezionate Change To Read. Sullo schema a blocchi, un’icona read local si comporta proprio come un controllo. Quando questo nodo viene eseguito sullo schema a blocchi, il vostro programma legge i dati nel relativo controllo o indicatore del pannello frontale. Per trasformare una read local in write local, cliccate con il tasto destro del mouse sulla variabile e selezionate Change To Write. La variabile locale modificherà la direzione dei dati per riceverli invece di fornirli. Sullo schema a blocchi, potete distinguere visivamente i due tipi di variabili locali proprio come distinguete i controlli dagli indicatori. Una read local ha un bordo spesso, mettendo in evidenza che è una sorgente di dati, analogamente ad un controllo. Una write local ha un bordo sottile, perché agisce come un ricevitore di dati, analogamente ad un indicatore. Nella figura seguente, entrambe le variabili locali si riferiscono allo stesso oggetto del pannello frontale. Read Local National Instruments Corporation 3-5 Write Local LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Esempio di variabile locale Come esempio che mostri quando potete aver bisogno di una variabile locale, considerate come dovreste usare un singolo interruttore sul pannello frontale per controllare due cicli While in parallelo. I due cicli non sono collegati e vengono eseguiti contemporaneamente. Dapprima studieremo due metodi errati che utilizzano un terminale per l’interruttore sullo schema a blocchi (Metodo 1 e Metodo 2). Quindi mostreremo come una variabile locale risolva il problema (Metodo 3). Il pannello frontale di questo VI di esempio appare di seguito. Metodo 1 (errato) Come primo tentativo, inseriamo il terminale di controllo dei cicli all’esterno di entrambi e colleghiamolo ad ogni terminale condizionale. In questo caso, il terminale di controllo dei cicli viene letto una volta, prima che ogni ciclo While inizi l’esecuzione. Ricordiamo che questo accade perché LabVIEW è un linguaggio di programmazione a flusso di dati e lo stato del controllo booleano costituisce un ingresso per entrambi i cicli. Se viene passato un TRUE all’interno dei cicli, i cicli saranno permanentemente in esecuzione. Spegnere l’interruttore non arresta il VI perché l’interruttore non viene letto durante le iterazioni dei due cicli. Questa soluzione non funziona. Metodo 2 (errato) Ora spostate il terminale di controllo dei cicli all’interno del ciclo 1 affinché venga letto ad ogni iterazione del ciclo 1. Sebbene il ciclo 1 si arresti correttamente, c’è un problema in questo approccio. Il ciclo 2 non va in esecuzione se non riceve i suoi dati d’ingresso. LabVIEW Corso Base II 3-6 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Ricordate che il ciclo 1 non passa i dati all’esterno se non viene arrestata l’esecuzione del ciclo. Quindi il ciclo 2 deve aspettare il valore finale del controllo del ciclo, disponibile solo dopo che il ciclo 1 ha terminato. Quindi i cicli non vengono eseguiti in parallelo. Inoltre il ciclo 2 viene eseguito per una sola iterazione perché il suo terminale condizionale riceve un valore di FALSE dall’interruttore di controllo nel ciclo 1. Metodo 3 (corretto) In questo esempio, il ciclo 1 è nuovamente controllato dall’interruttore, ma questa volta, il ciclo 2 legge una variabile locale associata all’interruttore. Quando impostate l’interruttore su FALSE sul pannello frontale, il terminale dell’interruttore nel ciclo 1 scrive FALSE sul terminale condizionale del ciclo 1. Il ciclo 2 legge la variabile locale dell’interruttore e scrive FALSE sul terminale condizionale del ciclo 2. Quindi i cicli While operano in parallelo e terminano contemporaneamente quando l’unico interruttore sul pannello frontale viene spento. Questo semplice esempio dimostra l’utilità delle variabili locali. Come mostrato precedentemente, l’utilizzo di variabili locali fornisce l’accesso ad un unico oggetto del pannello frontale da posti diversi dello schema a blocchi. Le variabili locali sono anche necessarie quando non potete raggiungere i vostri obbiettivi utilizzando dei fili per trasportare i dati. Fin qui avete imparato che potete leggere dati di ingresso da controlli e inviare i risultati su un indicatore. Ma, per esempio, cosa fate se volete determinare quali parametri erano stati usati per avviare un VI precedentemente e volete inserire quei valori nei controlli per consentirne la modifica all’utente? Come potete scrivere quei valori in un controllo? National Instruments Corporation 3-7 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Non potete farlo con controlli e indicatori standard. Utilizzando le variabili locali potete superare questa limitazione. Potete aggiornare un controllo dallo schema a blocchi. Inoltre, potete avere un qualsiasi numero di riferimenti di variabili locali per un dato controllo del pannello frontale, alcuni in modalità di scrittura e altri in modalità di lettura. Con un riferimento di variabile locale, potete accedere ad un oggetto del pannello frontale come ingresso e come uscita. Per comprendere questo concetto, esamineremo un esempio che mostra un altro uso delle variabili locali. Qui sotto c’è un unico indicatore di stringa. Supponete di volerlo aggiornare per visualizzare il ciclo in esecuzione. Senza una variabile locale, non c’è modo di risolvere il problema. Potete inserire il terminale indicatore in un solo ciclo. Tuttavia, utilizzando una variabile locale, potete accedere allo stesso indicatore del pannello frontale da più di un posto dello schema a blocchi, consentendo ad un unico indicatore di visualizzare il ciclo che è in esecuzione. L’indicatore Quale ciclo? viene inserito nel ciclo 1 e una variabile locale di quell’indicatore viene inserita nel ciclo 2. Sebbene questo esempio sia semplice, esso mostra come un indicatore possa essere aggiornato da due posti separati dello schema a blocchi. LabVIEW Corso Base II 3-8 National Instruments Corporation Lezione 3 Esercitazione 3-1 Tecniche di gestione dei dati VI Login Obiettivo: Utilizzare variabili locali per inizializzare controlli del pannello frontale Nota Utilizzate questo VI nel progetto della Lezione 5. Pannello frontale 1. Aprite il VI Login che si trova nella directory c:\exercises\LV Basics 2. Il pannello frontale è già stato creato. Completate lo schema a blocchi. Schema a blocchi 2. Notate che le variabili locali sono incluse in una struttura Sequence a singolo frame e che la costante stringa vuota è collegata alla cornice del ciclo While. Questa impostazione assicura che entrambe le variabili locali siano aggiornate prima che parta il ciclo While. a. La variabile locale Login Name è impostata su write localRipristina il login del nome su una stringa vuota. Per creare questa variabile locale, cliccate con il tasto destro del mouse sul terminale Login Name e selezionate Create»Local Variable dal menu rapido. b. La variabile locale Password è impostata su write localRipristina la stringa della password su una stringa vuota. Per creare questa variabile locale, cliccate con il tasto destro del mouse sul terminale Password e selezionate Create»Local Variable dal menu rapido. National Instruments Corporation 3-9 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati c. Costante Empty String, disponibile nella palette Functions»StringPassa i valori della stringa alle variabili locali Login Name e Password. d. Nodo Proprietà Login NamePer creare questo nodo, cliccate con il tasto destro del mouse sul terminale Login Name e selezionate Create»Property Node. Scegliete la proprietà key focus e collegate una costante booleana TRUE ad esso. e. Inserite il VI Verify Information. Per selezionare questo VI, selezionate Functions»Select a VI, andate su c:\exercises\LV Basics 2, cliccate due volte sul VI Verify Information che avete realizzato nell’esercitazione 1-2 e inseritelo nello schema a blocchi. Questo VI utilizza il nome e la password e verifica se c’è corrispondenza in una tabella con le informazioni sugli impiegati. Se avete problemi nel collegare la costante di stringa ad una variabile locale, cliccate con il tasto destro sulla variabile locale e selezionate Change to Write Local. Nota 3. Salvate il VI con lo stesso nome. 4. Ritornate al pannello frontale ed avviate il VI. Notate che i controlli Login Name e Password si reimpostano su stringhe vuote quando avviate il VI. 5. Ora ridimensionate il pannello frontale per mostrare solo gli oggetti necessari nel modo seguente: 6. Salvate e chiudete il VI. Fine dell’esercitazione 3-1 LabVIEW Corso Base II 3-10 National Instruments Corporation Lezione 3 Esercitazione 3-2 Obiettivo: Tecniche di gestione dei dati VI Select and Plot Waveform (Opzionale) Utilizzare le variabili locali per modificare sia gli indicatori che i controlli del pannello frontale Pannello frontale 1. Aprite il VI Select and Plot Waveform che si trova nella directory c:\exercises\LV Basics 2. Il pannello frontale è già stato creato. Completate lo schema a blocchi. 2. Aprite ed esaminate lo schema a blocchi. National Instruments Corporation 3-11 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Schema a blocchi 3. Completate lo schema a blocchi con le seguenti: a. String Constant, che si trova nella palette Functions»StringInvia i valori di testo all’indicatore del pannello frontale Current Activity. b. Numeric Constant, che si trova nella palette Functions»NumericReimposta la finestra di dialogo di tipo ring Select Waveform su zero (Stand By) dopo che la forma d’onda è stata acquisita. c. Variabile locale New Waveform impostata su read localLegge i dati nel grafico New Waveform e li passa al grafico Previous Waveform. Per creare questa variabile locale, cliccate con il tasto destro del mouse sul terminale New Waveform e selezionate Create»Local Variable dal menu rapido. Quindi cliccate con il tasto destro del mouse sulla variabile locale e selezionate Change To Read. d. Variabile locale Current Activity impostata su write localInserisce nuovo testo nell’indicatore Current Activity. Ci sono diverse copie di questa variabile locale nello schema a blocchi, mostrandovi come potete accedere ad un oggetto del pannello frontale da diversi posti dello schema a blocchi. Per creare una variabile locale, cliccate con il tasto destro del mouse sul terminale Current Activity e selezionate Create»Local Variable dal menu rapido. Quindi fate due copie in più di questa variabile locale. LabVIEW Corso Base II 3-12 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati e. Variabile locale Select Waveform impostata su write localReimposta il controllo Select Waveform sulla modalità Stand By. Per creare questa variabile locale, cliccate con il tasto destro del mouse sul terminale Select Waveform e selezionate Create»Local Variable dal menu rapido. Assicuratevi di aver impostato correttamente ciascuna variabile locale come read local o write local. Per passare da write local a read local, cliccate con il tasto destro del mouse sull’icona e selezionate Change to read Local dal menu rapido. Per passare da read local a write local, cliccate con il tasto destro del mouse sull’icona e selezionate Change to Write. Nota f. Funzione Wait (ms), che si trova nella palette Functions»Time & DialogGenera un ritardo che vi consente di osservare le attività del pannello frontale. g. VI Acquire Signal, che si trova nella palette User Libraries»Basics 2 CourseGenera i dati per la forma d’onda specificata dal controllo Select Waveform. 4. Salvate il VI con lo stesso nome. 5. Tornate al pannello frontale ed avviate il VI. Notate che il VI aggiorna l’indicatore di stringa e immagazzina la vecchia forma d’onda nel grafico Previous Waveform. Inoltre osservate che dopo che la nuova forma d’onda è stata acquisita e inviata sullo schermo, il controllo Select Waveform viene reimpostato su Stand By (zero). 6. Chiudete il VI quando avete finito. Fine dell’esercitazione 3-2 National Instruments Corporation 3-13 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati C. Variabili globali Ricordate che potete utilizzare le variabili locali per accedere ad oggetti del pannello frontale da varie posizioni dello schema a blocchi. Queste variabili locali sono accessibili solo in quel singolo VI. Supponete di aver bisogno di passare i dati tra diversi VI che operano contemporaneamente, o i cui subVI hanno delle icone che non possono essere collegate tramite fili nello schema a blocchi. Potete utilizzare una variabile globale per ottenere questo. Le variabili globali sono simili a quelle locali, ma invece di essere limitate all’uso in un singolo VI, le variabili globali possono passare valori tra diversi VI. Considerate l’esempio seguente. Supponete di avere due VI che funzionano contemporaneamente. Ogni VI scrive un dato su un grafico tipo chart. Il primo VI contiene anche un booleano per arrestare entrambi i VI. Ricordate che qualora entrambi i cicli fossero sullo stesso schema a blocchi, avreste bisogno di utilizzare una variabile locale per arrestare i cicli. Adesso che ogni ciclo si trova in un VI distinto, dovete utilizzare una variabile globale per arrestare i cicli. Creazione di variabili globali Le variabili globali sono oggetti interni di LabVIEW. Essi appaiono come VI speciali nella memoria del computer. Una variabile globale ha un pannello frontale in cui potete inserire controlli e indicatori di ogni tipo. Tuttavia, una variabile globale non ha schema a blocchi. Il pannello frontale è semplicemente un contenitore da cui potete prelevare dati da altri VI. LabVIEW Corso Base II 3-14 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Per creare una variabile globale, selezionate Global Variable dalla palette Structures. Un nodo di variabile globale appare sullo schema a blocchi. L’icona di una variabile globale sullo schema a blocchi è simile a quella di una variabile locale, a parte una piccola figura di un mondo che appare sulla sinistra del nome della variabile globale. Aprite il pannello di una variabile globale cliccando due volte sul nodo relativo. Inserite controlli e indicatori sul pannello frontale allo stesso modo con cui lo fate in un pannello frontale di un VI standard. Dovete etichettare ogni controllo o indicatore (con un’etichetta propria) perché una variabile globale si riferisce ad un oggetto tramite il suo nome. Nota L’esempio seguente mostra il pannello frontale di una variabile globale con tre oggettiun numero, una stringa e un cluster contenente un controllo digitale e uno booleano. Notate che la barra degli strumenti della finestra non mostra le stesse voci di un normale pannello frontale. Dopo che avete finito di inserire gli oggetti sul pannello frontale della variabile globale, salvate la variabile globale e tornate allo schema a blocchi del VI originario. Selezionate l’oggetto specifico nel VI della variabile globale al quale volete accedere. Per selezionare un dato oggetto, cliccate con il tasto destro del mouse sul nodo della variabile globale e selezionate l’oggetto dal menu Select Item. Questo menu elenca le etichette proprie di tutti gli oggetti del pannello frontale. Notate che potete anche aprire il pannello frontale contenente gli oggetti nella variabile globale da questo menu rapido. National Instruments Corporation 3-15 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Potete anche cliccare sul nodo con lo strumento Modifica e selezionare la variabile globale cui volete accedere. Dopo aver selezionato l’oggetto specifico della variabile globale al quale volete accedere, il nodo cambia aspetto, dalla figura mostrata a sinistra passa a visualizzare l’oggetto che avete scelto, ad esempio un numero. Potete utilizzare questa variabile globale in altri VI. Siccome una variabile globale è un tipo speciale di VI, potete inserirla in altri VI utilizzando l’opzione Select a VI nella palette Function. Quindi cliccate con il tasto destro del mouse sul nodo per selezionare un oggetto specifico della variabile globale al quale volete accedere, come descritto sopra. Un pannello frontale di variabile globale può contenere riferimenti a molti oggetti singoli che sono accessibili globalmente. Non avete bisogno di creare un VI di variabile globale separato per ogni oggetto su cui avete bisogno di accedere in modo globale. Nota Lettura e scrittura delle variabili globali Come per le variabili locali, potete sia leggere che scrivere dati su una variabile globale. Di default una variabile globale è write global quando la create. Potete scrivere un nuovo valore in una variabile globale e allora la variabile globale si comporta da indicatore. Potete modificare la configurazione di una variabile globale affinché agisca come sorgente di dati, o read global. Per far questo, cliccate con il tasto destro del mouse sulla variabile e selezionate Change To Read. Sullo schema a blocchi, un’icona read global si comporta come un controllo. Quando questo nodo è in esecuzione sullo schema a blocchi, il programma legge dati nell’oggetto associato del pannello frontale. Per modificare una read global in una write global, cliccate con il tasto destro del mouse sulla variabile e selezionate Change To Write. La variabile globale modificherà la direzione dei dati per ricevere dati invece di fornirli. Quando questo nodo è in esecuzione sullo schema a blocchi, il programma invia un nuovo dato nella variabile globale. Nello schema a blocchi potete distinguere visivamente le variabili globali in lettura rispetto a quelle in scrittura proprio come fate con i controlli e gli indicatori. Una variabile globale in lettura ha un bordo spesso, mettendo in evidenza che è una sorgente di dati. Una variabile globale in scrittura ha un bordo sottile, perché agisce come serbatoio di dati. Nella figura sotto, entrambe le variabili locali si riferiscono allo stesso oggetto del pannello frontale della variabile globale. Write Global Read Global LabVIEW Corso Base II 3-16 National Instruments Corporation Lezione 3 Esercitazione 3-3 Tecniche di gestione dei dati VI Data to Global Obiettivo: Realizzare un VI che scriva dati in una variabile globale Create una variabile globale e utilizzatela per inviare dati al VI dell’esercizio successivo. 1. Aprite un nuovo VI e realizzate il pannello frontale precedente. Schema a blocchi 2. Realizzate lo schema a blocchi precedente. a. Struttura Sequence, che si trova nella palette Functions»StructuresInizializza una variabile globale utilizzando una dipendenza dei dati artificiale con la costante booleana, che si trova nella palette Functions»Boolean, e il ciclo While. b. Ciclo While, che si trova nella palette Functions»StructuresDetermina l’esecuzione continua del VI finché una variabile globale booleana invia un valore TRUE. Cliccate con il tasto destro del mouse sul terminale Conditional e selezionate Stop If True. c. Funzione Wait Until Next ms Multiple, che si trova nella palette Functions»Time & DialogGarantisce che i dati siano scritti sulla variabile globale ogni 50 ms. Create la costante cliccando con il tasto destro del mouse sul terminale input e selezionando Create»Constant. d. Funzione Divide, che si trova nella palette Functions»NumericDivide il contatore di iterazione del ciclo While per 20. Create la costante cliccando con il tasto destro del mouse sul terminale inferiore input e selezionando Create»Constant. National Instruments Corporation 3-17 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati e. Funzione Sine, che si trova nella palette Functions»Numeric»TrigonometricAccetta un valore d’ingresso in radianti e produce in uscita il seno di quel valore. 3. VI My Globals per le variabili globali—Passa i valori tra due VI che operano contemporaneamente. Completate i passi seguenti per creare e configurare le variabili globali. a. Nello schema a blocchi selezionate Global Variable dalla palette Structures. b. Cliccate due volte sul nodo per attivare il pannello frontale della variabile globale. Create il pannello frontale della variabile globale come indicato nella figura seguente. Etichettate i controlli con etichette proprie. Notate che non c’è schema a blocchi associato al pannello frontale della variabile globale. Pannello della variabile globale c. Salvate e chiudete la variabile globale. Globals.vi. Chiamatela My d. Ritornate allo schema a blocchi di Data to Global. e. Cliccate con il tasto destro del mouse sul nodo della variabile globale e selezionate Visible Items»Label. f. Usando lo strumento Modifica, cliccate sul nodo della variabile globale e selezionate Stop. Potete modificare la variabile per renderla di lettura o di scrittura, cliccandoci sopra con il tasto destro del mouse. g. Fate un numero sufficiente di copie della variabile My Global.vi. Utilizzate lo strumento Modifica per selezionare la voce corretta di cui avete bisogno dalla variabile globale. Inizializzate la variabile globale Stop all’interno della struttura Sequence scrivendoci un FALSE. La costante è collegata al bordo del ciclo per forzare la variabile globale all’inizializzazione prima che il ciclo inizi l’esecuzione. Questo evita la lettura del ciclo While da parte di una variabile non inizializzata o da una che ha un valore sconosciuto. 4. Salvate il VI come Data to Global.vi. Tenetelo aperto perché dovete eseguirlo nell’esercizio successivo. Fine dell’esercitazione 3-3 LabVIEW Corso Base II 3-18 National Instruments Corporation Lezione 3 Esercitazione 3-4 Tecniche di gestione dei dati VI Display Global Data Obiettivo: Realizzare un VI che legga dati da una variabile globale Realizzate un VI che legga i dati da una variabile globale che avete creato nell’esercizio precedente e visualizzi i dati su un grafico tipo chart. Pannello frontale 1. Aprite un nuovo VI e realizzate il pannello frontale precedente. Schema a blocchi 2. Realizzate lo schema a blocchi come indicato precedentemente. a. Ciclo While, che si trova nella palette Functions»StructuresDetermina l’esecuzione continua del VI finché non viene premuto il pulsante di Stop. Cliccate con il tasto destro del mouse sul terminale Conditional e selezionate Stop If True. b. Funzione Wait Until Next ms Multiple, che si trova nella palette Functions»Time & DialogImposta la frequenza di esecuzione del ciclo. Assicuratevi che di default sia di 20 iterazioni al secondo o 50 ms. National Instruments Corporation 3-19 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati 3. VI My Globals per le variabili globali—Passa i valori tra due VI che operano contemporaneamente. Queste variabili globali non sono state create da un nodo di variabile globale su questo schema a blocchi, per cui i passi per creare e configurare le variabili globali sono i seguenti. a. Selezionate Functions»Select a VI e selezionate My Globals.vi dalla directory c:\exercises\Basics 2, in cui avete salvato la variabile globale che avete creato nell’esercitazione 3-3. L’oggetto della variabile globale visualizzato nel nodo è Stop o Data Value, a seconda dell’ordine in cui sono stati disposti sul pannello frontale della variabile globale. b. Copiate la variabile globale in maniera tale da averne due, una di Stop e l’altra Data Value. Per accedere ad un oggetto differente della variabile globale, cliccate sul nodo con lo strumento Modifica e selezionate l’oggetto desiderato. c. Rendete la variabile Data Value di tipo read cliccando con il tasto destro del mouse sul modo e selezionando Change To Read dal menu rapido. Il VI legge un valore da Data Value e lo passa al grafico. Esso scrive anche il valore corrente del pulsante di Stop sulla relativa variabile globale ad ogni ciclo. Utilizzando una variabile globale, il valore booleano viene letto nel VI Data to Global per controllarne il ciclo While. 4. Salvate il VI come Display Global Data.vi. 5. Passate al pannello frontale del VI Data to Global e posizionate i due pannelli frontali affinché siano visibili entrambi. 6. Avviate Data to Global. Tornate al VI Display Global Data ed avviatelo. Il grafico sul pannello frontale del VI Display Global Data visualizza i dati. Data to Global scrive continuamente il valore che calcola sull’oggetto della variabile globale Data Value. L’esempio seguente mostra Display Global Data che legge l’oggetto della variabile globale e aggiorna il grafico. LabVIEW Corso Base II 3-20 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Il controllo Time Delay stabilisce ogni quanto tempo viene letta la variabile globale. Notate come Time Delay influenza i valori rappresentati sul grafico. Se impostate Time Delay su 0, lo stesso valore Data Value viene letto dalla variabile globale diverse volte, facendo apparire una diminuzione della frequenza della sinusoide generata in Data to Global. Se impostate Time Delay ad un valore più grande di 50 ms, può darsi che Display Global Data non riesca a leggere alcuni valori generati in Data to Global e la frequenza della sinusoide sembra diminuire. Se impostate Time Delay su 50 ms, cioè sulla stessa frequenza utilizzata nel ciclo While di Data to Global, Display Global Data legge e visualizza ogni punto della variabile globale Data Value una sola volta. Quando utilizzate le variabili globali, se non fate attenzione, potete leggere dei valori più di una volta, o potete non leggerli tutti. Se dovete processare ogni singolo aggiornamento, fate particolare attenzione ad assicurare che un nuovo valore non sia scritto nella variabile globale fino a quando il precedente non è stato letto, e che dopo che una variabile globale è stata letta, non venga letta di nuovo finché un altro valore non è stato scritto sulla variabile globale. Nota 7. Premete il pulsante STOP sul pannello frontale di Display Global Data per arrestare il VI. Notate che sia Display Global Data che Data to Global si arrestano. Il VI scrive continuamente il valore del pulsante STOP sull’oggetto Stop della variabile globale. Quel valore National Instruments Corporation 3-21 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati viene quindi letto in Data to Global e passato al terminale condizionale per controllarne il ciclo. Quando premete il pulsante STOP, un valore TRUE passa attraverso la variabile globale a Data to Global, in cui viene letto per arrestare anche quel VI. 8. Chiudete entrambi i VI. Fine dell’esercitazione 3-4 LabVIEW Corso Base II 3-22 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati D. Avvertenze importanti su variabili locali e globali Inizializzazione di variabili locali e globali Verificate che le vostre variabili locali e globali contengano dei valori noti prima che il programma inizi. Altrimenti, le variabili potrebbero contenere dati in grado di causare dei malfunzionamenti del programma. Se non inizializzate una variabile locale prima di leggere i dati da essa, essa conterrà il valore corrente del controllo. La prima volta che il vostro programma legge una variabile globale, essa contiene il valore di default dell’oggetto che legge, a meno che non abbiate inizializzato precedentemente la variabile globale. Condizioni di conflitto Le variabili locali e globali di LabVIEW non si comportano come le variabili locali e globali nei linguaggi di programmazione testuali. Ricordate che LabVIEW è un linguaggio a flusso di dati, non un linguaggio di programmazione sequenziale. L’abuso di variabili locali e globali può portare a comportamenti inattesi del vostro programma, perché le funzioni potrebbero non essere eseguite nell’ordine corretto. Considerate il semplice esempio di variabile locale qui sotto. Il codice in LabVIEW appare accanto al codice equivalente di un linguaggio di programmazione sequenziale. Codice in LabVIEW Codice sequenziale x=x+5 x=x+2 o x=x+2 x=x+5 Quando eseguite il codice sequenziale, la soluzione per un dato valore di x è chiaro perché le istruzioni vengono eseguite dall’alto verso il basso. Tuttavia, il codice in LabVIEW non segue tale convenzione perché è un linguaggio a flusso di dati. Ogni nodo viene eseguito quando tutti i suoi dati sono disponibili. Non ci sono dipendenze di dati per garantire l’ordine desiderato di esecuzione nello schema a blocchi sopra. Infatti, ci sono diverse soluzioni possibili, in funzione di come il VI viene compilato. Non potete assumere che il codice che si trova nello schema a blocchi in basso sia eseguito dopo il codice al di sopra di esso. L’esempio mostrato sopra illustra quello che è noto come condizione di conflitto. Il risultato del vostro programma dipende dall’ordine in cui vengono eseguite le istruzioni e il codice potrebbe non seguire l’ordine che presupponete. Se utilizzate variabili locali e globali, potreste avere National Instruments Corporation 3-23 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati condizioni di conflitto se notate che il vostro codice viene eseguito correttamente solo alcune volte, o che viene eseguito correttamente durante l’esecuzione evidenziata ma non durante la normale esecuzione. Per evitare situazioni di conflitto, scrivete su una variabile locale o globale in una locazione separata rispetto a quella da cui l’avete letta—in posizioni diverse dello schema a blocchi o della struttura, o in diverse strutture o VI. Quando si utilizzano variabili globali in VI che vengono eseguiti in parallelo, potreste aver bisogno di utilizzare una variabile globale booleana aggiuntiva che indica quando un dato di variabile globale è stato modificato. Altri VI possono monitorare questo booleano per vedere se il dato è stato modificato e leggere il nuovo valore. Utilizzare variabili locali e globali solo quando necessario Le variabili locali e globali sono uno strumento potente che potete utilizzare per raggiungere determinati obiettivi. Per esempio, potete creare su un singolo schema a blocchi cicli paralleli che vengono controllati con un oggetto da pannello frontale, oppure potete scambiare dati tra VI in esecuzione separata. Comunque, le variabili locali e globali non fanno parte intrinsecamente del concetto di programmazione a flusso di dati di LabVIEW. Gli schemi a blocchi possono diventare più difficili da leggere quando si utilizzano variabili locali o globali. Le condizioni di conflitto possono causare comportamenti inattesi. L’accesso ai dati immagazzinati ad una variabile locale o globale è più lento rispetto al flusso di dati e meno efficiente dal punto di vista di utilizzo della memoria. Quindi, utilizzate con parsimonia le variabili locali e globali e solo quando necessario. Per esempio, non utilizzate variabili locali e globali per evitare lunghi collegamenti nello schema a blocchi o per accedere in ogni frame di una struttura Sequence. LabVIEW Corso Base II 3-24 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Considerate lo schema a blocchi precedente. La struttura Sequence a tre frame esegue i soliti compiti di tutti i VI. Il Frame 0 legge i controlli sul pannello per la configurazione del sistema di test, il Frame 1 utilizza le variabili locali per i controlli per acquisire i dati e il Frame 2 utilizza le variabili locali per scrivere dati su file. Sebbene non ci sia fondamentalmente nulla di sbagliato nell’utilizzo della struttura sequence e delle variabili locali in questo modo, esso non costituisce il metodo più efficiente di utilizzo della programmazione a flusso di dati. Quando osservate uno dei frame, non è semplice capire da dove provengono i valori delle variabili locali e dove sono stati aggiornati l’ultima volta. Lo schema a blocchi mostrato sopra elimina l’uso delle variabili locali disponendo i terminali di controllo originali al di fuori della struttura sequence cosicché ogni frame della sequenza ora ha accesso ai valori. I dati vengono passati tra i frame della sequenza attraverso una variabile locale della sequenza. Lo schema a blocchi mostrato sopra rimuove la struttura sequence ed utilizza il flusso dei dati per definire le modalità operative del programma. I cluster di errore definiscono l’ordine di esecuzione dei subVI e mantengono anche le condizioni di errore che vengono verificate alla fine con il VI di gestione degli errori. Questo è un modo più efficiente di realizzare un programma e di gestire i dati in LabVIEW. Non solo lo schema a blocchi è più piccolo e più facile da leggere, ma trasferire i dati attraverso i fili di collegamento è il metodo di gestione migliore della memoria. National Instruments Corporation 3-25 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati E. DataSocket Finora in questa lezione avete imparato tre cose principali: y Il modo più efficiente per gestire i dati nello schema a blocchi è tramite un collegamento diretto. y Le variabili locali possono essere usate per accedere ad oggetti del pannello frontale da posti diversi dello schema a blocchi. y Le variabili globali possono essere usate per passare i dati tra VI distinti senza utilizzare un collegamento. Ci sono molti altri modi di gestire dati in LabVIEW. Questa lezione copre un altro metodo, DataSocket. DataSocket è una tecnologia di programmazione di Internet basata su protocollo TCP/IP che semplifica lo scambio di dati tra computer ed applicazioni. Con DataSocket potete trasferire dati su Internet in modo efficiente e rispondere a più utenti senza la complessità della programmazione TCP a basso livello. Quindi potete usare DataSocket per passare dati non solo tra VI in esecuzione sulla stessa macchina ma anche tra computer distinti che sono collegati tramite la rete. Potete anche utilizzare DataSocket per comunicare tra LabVIEW ed un qualsiasi altro linguaggio di programmazione che supporta il protocollo TCP/IP, come Excel, Visual Basic, C e così via. Come opera DataSocket? DataSocket consiste in due componenti, DataSocket API e DataSocket Server. DataSocket API presenta una singola interfaccia utente per la comunicazione con diversi tipi di dati provenienti da altri linguaggi di programmazione. DataSocket Server semplifica la comunicazione in Internet tramite la gestione della programmazione del protocollo TCP/IP. DataSocket API DataSocket è un singolo API, unificato per l’utente finale, basato su URL per il collegamento a misure e a dati di automazione che si possono trovare dovunque, su un computer locale o su Internet. E’ un API indipendente dal protocollo, dal linguaggio e dal sistema operativo, progettato per semplificare la gestione di dati binari. Il DataSocket API viene implementato affinché possiate utilizzarlo in ogni ambiente di programmazione e con un qualsiasi sistema operativo. Il DataSocket API converte automaticamente le vostre misure in una sequenza di byte che viene inviata in rete. L’applicazione DataSocket converte la sequenza di byte nella sua forma originaria. Questa conversione automatica elimina la complessità della rete, che comporta la scrittura di una gran quantità di codice quando utilizzate librerie TCP/IP. LabVIEW Corso Base II 3-26 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati DataSocket Server Il DataSocket Server è un componente leggero, stand-alone con cui i programmi utilizzanti DataSocket API possono trasmettere misure in corso a velocità elevate, usando Internet, a diversi client remoti contemporaneamente. Il DataSocket Server semplifica la programmazione TCP gestendo in maniera automatica connessioni su client. Potete accedere a DataSocket Server selezionando Start»Programs»National Instruments» DataSocket»DataSocket Server. Quando selezionate il DataSocket Server, si apre la finestra seguente e il server va in esecuzione. Come mostrato sopra, il DataSocket Server tiene traccia del numero di client connessi e del numero di pacchetti di dati che sono stati scambiati. Potete scegliere di avere DataSocket Server operante in maniera non visibile selezionando Hide DataSocket Server dal menu Server. La trasmissione dati con DataSocket Server richiede tre attori—chi pubblica, il DataSocket Server e chi sottoscrive. Un’applicazione di pubblicazione utilizza DataSocket API per scrivere dati sul server. Un’applicazione di sottoscrizione utilizza DataSocket API per leggere dati dal server. Entrambe le applicazioni sono client nei confronti di DataSocket Server. I tre attori possono risiedere sulla stessa macchina ma è più frequente il caso che si trovino su macchine diverse. La possibilità di eseguire il DataSocket Server su un’altra macchina aumenta le prestazioni e fornisce la sicurezza isolando collegamenti di rete dalla vostra applicazione di misura. Il DataSocket Server limita l’accesso ai dati amministrando la sicurezza e i permessi. Con DataSocket potete condividere misure riservate su Internet impedendo l’accesso a persone non autorizzate. Una URL per ogni sorgente di dati Prima che possiate iniziare ad utilizzare le funzioni DataSocket in LabVIEW, dovete capire come DataSocket si collega a differenti tecnologie di I/O e come nominare il dispositivo o la risorsa con la quale state scambiando dati. Per esempio nell’I/O di file il nome della risorsa è un percorso ad un file. Per il TCP/IP ci sono due parti del nome, un nome di macchina e un numero di porta. Con DataSocket, il nome della risorsa è sotto forma di URL, o uniform resource locator, simile all’indirizzo web utilizzato da un browser. Considerate come potrebbe interpretare un National Instruments Corporation 3-27 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati browser la URL ni.com/datasocket. Essa dice al browser di usare un protocollo basato TCP/IP chiamato HTTP, o hyper text transfer protocol, per collegarsi alla macchina denominata ni.com e prendere la pagina web chiamata datasocket. La URL è differente dai nomi utilizzati dalla maggior parte delle tecnologie di I/O perché non solo definisce a che cosa siete interessati ma indica anche come prenderlo. Il come, codificato nella prima parte della URL, viene chiamato metodo di accesso del protocollo. I web browser utilizzano tipicamente molti metodi di accesso, come HTTP, HTTPS (encrypted HTTP), FTP (file transfer protocol) e FILE (per leggere file sulla vostra macchina locale). DataSocket presenta lo stesso approccio per le misure. Per esempio, DataSocket può utilizzare la URL seguente per collegarsi ad un insieme di dati: dstp://mytestmachine/wave1. Il dstp all’inizio dice a DataSocket di aprire un collegamento con il protocollo di trasferimento data socket e di prendere un segnale denominato wave1. Se la URL fosse iniziata con file, i dati sarebbero stati presi da un file invece che dal DataSocket server. Le funzioni DataSocket DataSocket API in LabVIEW è un insieme di funzioni e di VI che si trova nella palette Functions»Communication»DataSocket. La comunicazione in DataSocket è semplice. Potete eseguire tutte le operazioni di base con le funzioni e i VI seguenti. La funzione DataSocket Write scrive l’ingresso dei dati sulla URL specificata. I dati possono essere in un qualsiasi formato del tipo dato di LabVIEW. I cluster error in e error out mantengono le condizioni di errore. La funzione DataSocket Read legge i dati di tipo specificato dalla URL specificata. Il valore ms timeout di default è di 10 s e potete specificare un diverso valore di timeout. Il booleano timed out indica TRUE se questa funzione è scaduta. I cluster error in e error out mantengono le condizioni di errore. LabVIEW Corso Base II 3-28 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Il VI DataSocket Select URL viene usato solo quando non sapete la URL di un oggetto e volete cercare una sorgente di dati o una destinazione da finestra di dialogo. Collegamento DataSocket diretto ad un qualsiasi oggetto del pannello Non avete bisogno di utilizzare le funzioni DataSocket Write e DataSocket Read per pubblicare e sottoscrivere dati utilizzando DataSocket Server. Potete stabilire un collegamento DataSocket diretto da un oggetto del pannello frontale. Cliccate con il tasto destro del mouse su un oggetto del pannello frontale e selezionate Data Operations»DataSocket Connection per Visualizzare la finestra di dialogo DataSocket Connection. Nel campo Connect To, inserite una URL e scegliete se volete pubblicare, sottoscrivere o entrambe le cose. Quindi contrassegnate il riquadro Enabled. Quando cliccate sul pulsante Attach, l’oggetto del pannello frontale diventa disponibile alla URL specificata nel DataSocket Server. Compare un piccolo rettangolo nella parte superiore destra del controllo o dell’indicatore, ad indicare lo stato del collegamento DataSocket. Se il rettangolo è verde, il collegamento è buono. Se il rettangolo è grigio, non c’è collegamento al server. Se il rettangolo è rosso, c’è un errore nel collegamento. Ora realizzate due VI che trasferiscono dati utilizzando DataSocket. National Instruments Corporation 3-29 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Esercitazione 3-5 VI DS Generate Data e VI DS Read Data Obiettivo: Realizzare due VI che utilizzino DataSocket per trasferire i dati Realizzate un VI che generi un numero casuale e visualizzi questo valore su uno strumento misuratore e invii i dati ad una URL DataSocket. Quindi realizzate un secondo VI che legga la URL DataSocket e visualizzi il valore in un indicatore tipo slide. Infine, utilizzate le caratteristiche di pubblicazione e di sottoscrizione automatica per inviare dati su un collegamento DataSocket. Pannello frontale 1. Aprite un nuovo VI e realizzate il pannello frontale mostrato sopra. L’oggetto URL è un controllo di stringa. Schema a blocchi 2. Aprite e realizzate lo schema a blocchi mostrato sopra utilizzando i componenti seguenti. a. Ciclo While, che si trova nella palette Functions»StructuresDetermina l’esecuzione continua del VI finché non viene premuto il pulsante di Stop. Cliccate con il tasto destro del mouse sul terminale Conditional e selezionate Stop If True. b. Funzione Wait Until Next ms Multiple, che si trova nella palette Functions»Time & DialogDetermina l’esecuzione del ciclo While una volta al secondo. Create la costante cliccando con il tasto destro del mouse sul terminale input e selezionando Create»Constant. LabVIEW Corso Base II 3-30 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati c. Funzione Random Number (0-1), che si trova nella palette Functions»NumericCrea un numero casuale tra zero e uno. d. Funzione Multiply, che si trova nella palette Functions»NumericMoltiplica due numeri e viene usato qui per riportare il numero casuale nella scala tra 0 e 10. e. Funzione DataSocket Write, che si trova nella palette Functions»Communication»DataSocketScrive il numero casuale sulla URL specificata. f. VI Simple Error Handler, che si trova nella palette Functions»Time & DialogApre una finestra di dialogo in caso di errore e visualizza le informazioni di errore. 3. Salvate questo VI come DS Generate Data.vi. 4. Ora realizzate il secondo VI per leggere il valore casuale. Pannello frontale 1. Aprite un nuovo VI e realizzate il pannello frontale mostrato sopra. L’oggetto URL è un controllo di stringa. Per mostrare la scala sull’indicatore a scorrimento, cliccateci sopra con il tasto destro del mouse e selezionate Scale»Style. Schema a blocchi 2. Aprite e realizzate lo schema a blocchi mostrato sopra utilizzando i componenti seguenti: a. Ciclo While, che si trova nella palette Functions»StructuresDetermina l’esecuzione continua del VI finché non viene premuto il pulsante di Stop. Cliccate con il tasto destro del mouse sul terminale Conditional e selezionate Stop If True. National Instruments Corporation 3-31 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati b. Funzione Wait Until Next ms Multiple, che si trova nella palette Functions»Time & DialogImpone l’esecuzione del ciclo ogni secondo. Create la costante cliccando con il tasto destro del mouse sul terminale input e selezionando Create»Constant. c. Costante Numeric, che si trova nella palette Functions»NumericCrea il tipo di dato corretto per leggere il valore attraverso DataSocket. Assicuratevi che questa costante sia una DBL cliccandoci sopra con il tasto destro del mouse e selezionando Representation»Double Precision dal menu rapido. d. Funzione DataSocket Read, che si trova nella palette Functions»Communication»DataSocketLegge il numero casuale dalla URL specificata. e. VI Simple Error Handler, che si trova nella palette Functions»Time & DialogApre una finestra di dialogo in caso di errore e visualizza le informazioni di errore. 3. Salvate il VI come DS Read Data.vi. 4. Posizionate i pannelli frontali dei VI DS Generate Data e DS Read Data in maniera tale che li possiate vedere entrambi. 5. Avviate DataSocket Server dal menu Start e selezionate Start»Programs»National Instruments»DataSocket»DataSocket Server. Compare la finestra DataSocket Server, simile a quella mostrata sotto. 6. Tornate ai due pannelli frontali dei VI ed assicuratevi che siano state inserite le stesse URL in entrambi i VI. y dstp—Il protocollo di trasferimento DataSocket. y localhost—Il computer che state utilizzando. y data1—il nome dato al numero casuale che invierete. 7. Avviate i VI DS Generate Data e DS Read Data. La finestra DataSocket Server mostra un processo connesso e il valore Number of packets si incrementa ogni secondo quando il misuratore e il cursore mostrano gli stessi numeri casuali. 8. Arrestate entrambi i VI quando avete finito. Ora modificate i VI per utilizzare la pubblicazione e sottoscrizione automatiche degli oggetti del pannello frontale. LabVIEW Corso Base II 3-32 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Pannello frontale 9. Inserite un indicatore digitale sul pannello forntale del VI DS Read Data come mostrato sopra. 10. Cliccate con il tasto destro del mouse sul nuovo indicatore digitale e selezionate Data Operations»DataSocket Connection dal menu rapido. Inserite i valori seguenti. 11. Cliccate sul pulsante Attach e un piccolo rettangolo grigio appare in alto sul lato destro dell’indicatore digitale. Ciò indica che la connessione DataSocket non è attiva. 12. Avviate nuovamente i VI DS Generate Data e DS Read Data. Il rettangolo vicino all’indicatore Random Number diventa verde e il valore corrisponde ai valori mostrati nel misuratore e nell’indicatore a scorrimento. Nota Se il vostro computer è in rete con altri computer utilizzati in aula, potete digitare nelle URL gli indirizzi di altre macchine in rete e trasferire i valori tra computer della classe. Ricordate che potete utilizzare un qualsiasi linguaggio di programmazione o sistema operativo con le connessioni DataSocket. Andate alla pagina web su DataSocket della National Instruments all’indirizzo ni.com/datasocket, per ulteriori informazioni. 13. Arrestate e chiudete entrambi i VI e il DataSocket Server quando avete finito. Fine dell’esercitazione 3-5 National Instruments Corporation 3-33 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Sommario, trucchi e consigli LabVIEW Corso Base II y DataSocket è un metodo di trasferimento dati basato su Internet che è indipendente dalla piattaforma, dal linguaggio di programmazione e dal protocollo. DataSocket utilizza URL per definire una connessione dati specifica. y DataSocket consiste in due parti, DataSocket API e DataSocket Server. y DataSocket API di LabVIEW consiste nella palette Functions»Communication»DataSocket. Le due funzioni principali sono DataSocket Write e DataSocket Read. y Potete consentire ad ogni controllo o indicatore di pubblicare e/o sottoscrivere dati attraverso DataSocket Server cliccando sopra quell’oggetto del pannello frontale con il tasto destro del mouse e utilizzando la finestra Data Operations»DataSocket Connection. y Potete utilizzare variabili globali e locali per accedere ad un determinato insieme di valori nell’ambito della vostra applicazione in LabVIEW. Queste variabili scambiano informazioni tra diversi posti della vostra applicazione quando non potete utilizzare collegamenti diretti. y Le variabili locali accedono agli oggetti del pannello frontale del VI in cui avete inserito la variabile locale. y Quando scrivete su una variabile locale, aggiornate il corrispondente controllo o indicatore del pannello frontale. y Quando leggete da una variabile locale, leggete il valore corrente del corrispondente controllo o indicatore del pannello frontale. y Le variabili globali sono oggetti interni a LabVIEW che passano i dati tra VI. Essi possiedono dei pannelli frontali in cui immagazzinano i loro dati. y Scrivete sempre un valore sulla variabile globale prima di leggere da essa, per fare in modo che abbia un valore iniziale noto quando accedete ad essa. y Scrivete su variabili locali e globali da posizioni diverse rispetto a quelle da cui le leggete, per evitare situazioni di conflitto. y Utilizzate variabili locali e globali solo quando necessario. Un abuso può causare un’esecuzione più lenta ed un utilizzazione inefficiente della memoria nell’ambito della vostra applicazione. y Le variabili locali e globali non usano il flusso di dati, e quindi se le usate troppo di frequente, potete rendere i vostri schemi a blocchi di difficile comprensione per altre persone. Utilizzate variabili locali e globali in maniera sapiente. 3-34 National Instruments Corporation Lezione 3 Tecniche di gestione dei dati Esercizi aggiuntivi 3-6 Aprite il VI In Range. Esaminate lo schema a blocchi. Questo semplice VI genera cinque numeri casuali e accende un LED se l’ultimo numero generato si trova tra 0.1 e 0.9. Avviate il VI diverse volte fino a quando si accende il LED. Notate che se il LED si accende durante un’esecuzione del VI, rimane acceso durante la seconda esecuzione finché il ciclo For è terminato e l’ultimo numero viene passato alla funzione In Range?, che si trova nella palette Functions»Comparison. Modificate il VI utilizzando una variabile locale affinché il LED si spenga quando il VI viene avviato. Salvate il vostro VI dopo che avete finito. 3-7 Come già detto prima, il trasferimento dati tramite una variabile globale non è un processo sincronizzato. Se provate a leggere dati da una variabile globale troppo rapidamente o troppo lentamente, potreste leggere copie dello stesso valore o perdere completamente dei dati. Questo è stato visto nell’esercitazione 3-4, in cui potevate regolare il ritardo tra le letture della variabile globale Data Value per ottenere dati più velocemente o più lentamente. Modificate Data to Global e Display Global Data, nell’esercitazione 3-3 e 3-4, affinché utilizzino un protocollo di handshake per garantire che i dati non vengano saltati o letti più volte. Impostate un ulteriore booleano in My Global.vi denominato Handshake, che verrà usato per indicare quando i VI sono pronti per inviare o ricevere dati. Nel VI Data to Global, assicuratevi di impostare la variabile globale booleana Handshake su FALSE prima che passi un nuovo dato al numerico Data Value. In Display Global Data impostate il booleano Handshake su TRUE prima che tenti di leggere il dato numerico. In entrambi i VI, assicuratevi di impostare il booleano Handshake in modo tale che altri VI sappiano quando accedere alla variabile. Chiamate la nuova variabile globale booleana Handshake Global.vi e gli altri due VI Data to Handshake Global.vi e Display Handshake Global.vi. Sfida 3-8 Aprite il VI Select and Plot Waveform dall’esercitazione 3-2. Utilizzate le informazioni alla fine della Sezione D per riscrivere questo VI per non utilizzare più la struttura Sequence e le variabili locali. Suggerimento Utilizzate un’architettura con macchine a stati e trasferite i dati utilizzando i registri a scorrimento o collegamenti diretti. Salvate il VI come Select and Plot Waveform2.vi. National Instruments Corporation 3-35 LabVIEW Corso Base II Lezione 3 Tecniche di gestione dei dati Note LabVIEW Corso Base II 3-36 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Quando si implementano subVI per l’I/O su file, potreste aver bisogno di considerare diversi formati di file. Per esempio, se un’applicazione fatta da altre persone dovesse leggere dati acquisiti da LabVIEW, dovreste salvare i dati in formato testo perché molte applicazioni supportano i file di testo. D’altro canto, se solo LabVIEW dovrà accedere ai dati e le dimensioni dei file sono critiche, i file binari risultano essere una scelta migliore. Tecniche avanzate di I/O su file e le funzioni interne per l’I/O di file consentono questa flessibilità. Imparerete: A. A lavorare con file a flusso di byte B. A creare e a lavorare con file datalog C. A trasferire i dati su disco D. A conoscere vantaggi e svantaggi di file testo, binari e datalog. I subVI che realizzerete consentono di: A. Salvare dati su file B. Visualizzare file di analisi National Instruments Corporation 4-1 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file A. Lavorare con file a flusso di byte Le funzioni per l’I/O su file di LabVIEW rendono estremamente semplice lavorare con file a flusso di dati o con file di testo e binari. Utilizzate le stesse funzioni per manipolare questi file. Tuttavia, quando si lavora con file binari, i dati generalmente non sono in un formato leggibile. Inoltre, siccome non potete contare su caratteri speciali come i tasti <Tab> e <Return>, dovete conoscere la struttura dei dati immagazzinati nel file prima di leggerlo. Senza questa conoscenza, non potete interpretare con successo i dati memorizzati nel file binario. Funzioni per l’I/O di file più frequenti Prima di descrivere i file a flusso di dati in dettaglio, rivedremo rapidamente le funzioni per l’I/O su file di LabVIEW. Queste funzioni si trovano nelle palette Functions»File I/O e Functions»File I/O»Advanced File Functions. Fate riferimento a Help»Contents and Index per ulteriori informazioni su queste funzioni. Nota La funzione File Dialog nella palette File I/O»Advanced File Functions visualizza una finestra di dialogo per la selezione di file. Potete scegliere da questa finestra file nuovi o esistenti oppure directory. Descriveremo più avanti nella lezione l’uso dell’ingresso datalog type. La funzione Open File nella palette File I/O»Advanced File Functions apre un file esistente. Dovete collegare un percorso valido all’ingresso file path. Questa funzione non è in grado di creare o sostituire file. Essa apre solo file esistenti. L’ingresso datalog type viene usato solo quando si aprono file datalog di LabVIEW. La funzione New File nella palette File I/O»Advanced File Functions crea un nuovo un nuovo file per la lettura o la scrittura. Dovete collegare un percorso all’ingresso file path. Utilizzate l’ingresso datalog type solo quando si creano nuovi file datalog di LabVIEW. LabVIEW Corso Base II 4-2 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file La funzione Write File nella palette Functions»File I/O scrive dati su un file aperto. Il comportamento di questa funzione varia leggermente a seconda che stiate scrivendo dati su un file a flusso di dati o su un file datalog di LabVIEW. La funzione Read File nella palette Functions»File I/O legge dati da un file aperto. Quando si leggono file a flusso di dati, potete utilizzare l’ingresso byte stream type per indicare come LabVIEW dovrebbe interpretare i dati nel file. Descriveremo questo concetti più avanti in questa lezione. La funzione Close File nella palette Functions»File I/O chiude il file associato a refnum. File a flusso di dati Potete utilizzare la funzione Write File per creare entrambi i tipi di file a flusso di dati—testo e binario. La creazione di un file testo è semplice come mandare una stringa contenente caratteri alla funzione Write Function. Quando utilizzare file testo I file testo sono utili e diffusi per molte ragioni. Quasi ogni sistema operativo e la maggior parte delle applicazioni software possono leggere e scrivere file in formato testo. Storicamente la maggior parte delle applicazioni di controllo degli strumenti, come la GPIB e la seriale, utilizzano stringhe di testo per inviare istruzioni di controllo. National Instruments Corporation 4-3 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file A causa dell’universalità del formato testo, ci sono diverse situazioni in cui i file testo sono preferibili per la memorizzazione dei dati. Per esempio, i file testo sono preferibili quando progettate di leggere o manipolare dati con altre applicazioni software, come fogli elettronici o word processor. I file testo presentano anche degli svantaggi significativi. E’ difficile accedere in maniera casuale a dati numerici presenti in file testo. Sebbene ogni carattere in una stringa occupi esattamente un byte di spazio, lo spazio necessario per esprimere un numero come testo tipicamente non viene fissato. Per trovare il nono numero in un file testo, LabVIEW deve dapprima leggere e convertire i precedenti otto numeri. Potreste perdere in precisione memorizzando i dati numerici in file di testo. I computer memorizzano i dati in formato binario, e tipicamente scrivete dati numerici su un file testo con notazione decimale. Potrebbe esserci una perdita di precisione quando leggete dati da un file testo. La perdita di precisione non avviene con i file binari. Come mostrato nello schema a blocchi precedente, la funzione Write File scavalca ogni informazione di intestazione che LabVIEW utilizza per immagazzinare la stringa in memoria e scrive il contenuto del controllo dati della stringa su file. Infatti la funzione Write File non distingue una stringa di testo da una binaria quando si scrivono dati su file—essa scrive i dati su file. Il terminale dati della funzione Write File è polimorfico, il che significa che si adatta ad ogni genere di dato che collegate ad esso. Perciò potete creare un file binario collegando dati binari alla funzione Write File nell’esempio precedente. Tuttavia noterete che le informazioni di intestazione sono vitali per l’interpretazione del file binario. Per esempio, se collegate una matrice bidimensionale di numeri nel terminale data, la funzione Write File inserisce una copia byte per byte dei dati di ingresso nel file. Essa non converte il numero in testo né inserisce informazioni sul numero di righe o di colonne della matrice nel file. Anche se sapete che i dati erano originariamente numeri in virgola mobile e singola precisione, non potete ricostruire con successo la matrice bidimensionale. Se il file contiene 24 byte di dati e sapendo che i numeri in virgola mobile e singola precisione utilizzano quattro byte di memoria ciascuno, potete calcolare che la matrice conteneva sei valori (24/4 = 6). Tuttavia, i dati originari potrebbero essere stati memorizzati in una matrice monodimensionale di sei elementi, una matrice bidimensionale con una riga e sei colonne o una tabella con tre colonne e due righe. Quando utilizzare file binari Rispetto ai file di testo, quelli binari richiedono meno spazio sul disco per memorizzare la stessa mole di informazioni. I file binari vi consentono di accedere in maniera casuale ai dati memorizzati nel file. LabVIEW Corso Base II 4-4 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Tuttavia i file binari generalmente non sono trasportabili su altre applicazioni. Inoltre dovete documentare con cura i dettagli necessari ad estrarre l’informazione memorizzata in un file binario. Creazione di informazioni di intestazione per un file binario Quando create file binari, ideare un’opportuna intestazione del file è spesso l’unico compito importante. Potete creare informazioni di intestazione generando in modo esplicito un’intestazione o utilizzando l’ingresso header della funzione Write File. L’esempio seguente mostra come generare esplicitamente un’intestazione che contenga il numero di righe e colonne dei dati. Potete anche generare lo stesso file utilizzando l’ingresso header della funzione Write File. Se collegate un valore booleano TRUE all’ingresso header della funzione Write File, essa scrive gli stessi dati sul file come se aveste scritto manualmente un’intestazione. L’esempio seguente mostra come utilizzare la funzione Write File per creare un file binario con intestazione. Utilizzando l’esempio dello schema a blocchi precedente, se collegate nuovamente una matrice bidimensionale di numeri a singola precisione con tre righe e due colonne, il file dovrebbe contenere 24 byte di dati e due interi di tipo long aggiuntivi, di quattro byte ciascuno, come informazioni di intestazione. I primi quattro byte contengono il numero di righe della matrice; i secondi quattro byte contengono il numero di colonne. Come mostrato nell’esempio seguente, potete leggere il file binario dagli esempi precedenti utilizzando la funzione Read File. National Instruments Corporation 4-5 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Notate che l’ingresso byte stream type della funzione Read File possiede una matrice bidimensionale di numeri in singola precisione collegata ad essa. La funzione Read File utilizza solo il tipo di dato di questo ingresso per leggere i dati nel file, assumendo che abbia le informazioni di intestazione corrette per quel tipo di dato. Accesso casuale nei file a flusso di byte Se memorizzate matrici di dati numerici su un file, potreste avere la necessità di accedere ai dati in posizioni casuali del file. Non potete accedere in maniera casuale ai dati memorizzati in file di testo quando i dati hanno il segno negativo, hanno un numero variabile di cifre su singoli punti di dati e altri fattori. Per esempio, se avete una matrice di 100 numeri compresi tra 0 e 1000, non potete prevedere dove si trovi un dato elemento nella matrice all’interno del file di testo. Il problema è che nel testo, il numero 345 richiede tre byte per essere memorizzato mentre il numero 2 ne richiede solo uno. Quindi non potete prevedere la posizione di un elemento arbitrario nel file. Tali ostacoli non si presentano nei file binari. In un file binario, il formato compatto di un numero in LabVIEW è un’immagine binaria del numero stesso. Quindi ogni numero nella matrice utilizza un numero fissato di byte di memorizzazione su disco. Se sapete che un file memorizza numeri in singola precisione, che utilizzano quattro byte per numero, potete leggere un gruppo arbitrario di elementi dalla matrice, come mostrato nell’esempio seguente. Calcolate il numero di byte dall’inizio del file per iniziare a leggere i dati LabVIEW Corso Base II 4-6 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Nell’esempio dello schema a blocchi precedente, l’ingresso pos mode della funzione Read File è impostato su start, il che significa che la funzione inizia a leggere i dati al numero di byte pos offset dall’inizio del file. Il primo byte nel file ha un offset di zero. Quindi la posizione dell’elemento di ordine n in una matrice di numeri in virgola mobile e singola precisione memorizzati in questo file è di 4xn byte dall’inizio del file. Una costante in virgola mobile e singola precisione collegata all’ingresso byte stream type, dice alla funzione Read File di leggere i valori in virgola mobile e singola precisione dal file. Il controllo # values to read, collegato all’ingresso count della funzione Read File, dice alla funzione quanti sono gli elementi in singola precisione da leggere dal file. Notate che quando l’ingresso count è collegato, LabVIEW inserisce i dati di uscita in una matrice, perché LabVIEW legge più di un valore dal file. Sono importanti da ricordare i seguenti punti relativamente alle operazioni ad accesso casuale: y Quando si eseguono I/O su file di testo e binari, ricordate che i valori per il terminale pos offset sono misurati in bytes. y L’ingresso count nella funzione Read File controlla quanti byte di informazione sono letti dal file quando l’ingresso byte stream type non è collegato. I dati letti dal file vengono restituiti in una stringa. y Se l’ingresso byte stream type è collegato, l’uscita data della funzione Read File è dello stesso tipo dell’ingresso byte stream type quando l’ingresso count non è collegato. y Se l’ingresso byte stream type è collegato e l’ingresso count ha dei dati collegati ad esso, allora la funzione Read File restituisce una matrice contenente count elementi dello stesso tipo di dati dell’ingresso byte stream type. y Fate riferimento al LabVIEW Help e al LabVIEW User Manual per ulteriori informazioni sulle operazioni di accesso casuale e sui file a flusso di dati. National Instruments Corporation 4-7 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Esercitazione 4-1 Obiettivo: VI Binary File Writer Realizzare un VI che scriva dati su un file binario con uno schema semplice di formattazione dei dati Questo VI salva i dati su un file binario utilizzando uno schema semplice di formattazione in cui l’intestazione del file è un intero di tipo long word (I32) contenente il numero di dati presenti nel file. Nell’esercizio successivo, costruite un VI che legga il file binario. Pannello frontale 1. Aprite un nuovo VI. 2. Costruite il seguente pannello frontale. Quando create il menu tipo ring, ricordate che una combinazione rapida di tasti per aggiungere una nuova voce all’elenco di opzioni si ottiene premendo <ShiftEnter> dopo aver immesso il testo per una voce dell’elenco. Inserite Zero for nella voce 0 dell’elenco, Sine nella voce uno e così via. Per visualizzare il valore numerico del menu tipo ring, cliccate con il tasto destro del mouse sul controllo e selezionate Visible Items»Digital Display. Macintosh, <Shift-Return>; Sun, <Shift-Return>; HP-UX, <Shift-Enter>; and Linux, <Shift-Return>. L’aspetto del controllo del menu tipo ring varia da una piattaforma all’altra. Nota 3. Aprite lo schema a blocchi. LabVIEW Corso Base II 4-8 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Schema a blocchi 4. Realizzate lo schema a blocchi seguente. a. Inserite il VI Open/Create/Replace File VI che si trova nella palette Functions»File I/O. Questo VI crea o sostituisce un file. b. Inserite la funzione Write File che si trova nella palette Functions»File I/O. Questa funzione appare due volte in questa esercitazione. La prima funzione scrive l’intestazione del file binario, che è un intero a quattro byte contenente il numero di valori scritti sul file. La seconda scrive la matrice di dati su file. c. Inserite la funzione Close File che si trova nella palette Functions»File I/O. In questa esercitazione questa funzione chiude il file binario dopo che i dati sono stati scritti in esso. d. Inserite il VI Simple Error Handler che si trova nella palette Functions»Time & Dialog. In caso di errore, questo VI visualizza una finestra di dialogo con le informazioni sul tipo di errore e dove è avvenuto. e. Per creare questa costante, cliccate con il tasto destro del mouse sull’ingresso pos mode della funzione Write File e selezionate Create»Constant. Impostate position mode su start per garantire che i nuovi dati siano scritti relativamente all’inizio del file. f. Per creare questa costante, cliccate con il tasto destro del mouse sull’ingresso function del VI Open/Create/Replace File e selezionate Create»Constant. Selezionando create or replace, consentite all’utente di creare un nuovo file o di sovrascriverne uno esistente. g. Inserite il VI Acquire Signal che si trova nella palette Functions»User Libraries»Basics-II Course. In questa esercitazione, questo VI genera la forma d’onda selezionata tramite il controllo Select Waveform. h. Inserite la funzione Array Size che si trova nella palette Functions»Array. In questa esercitazione, questa funzione restituisce il numero di elementi nella matrice monodimensionale di dati da scrivere su file. 5. Salvate il VI come Binary File Writer.vi. Avviatelo, salvando i dati sul file del disco denominato data.bin. Fine dell’esercitazione 4-1 National Instruments Corporation 4-9 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Esercitazione 4-2 VI Binary File Reader Obiettivo: Realizzare un VI che legga il file binario creato nell’ultima esercitazione. Pannello frontale 1. Aprite un nuovo VI e realizzate il pannello frontale seguente. 2. Aprite lo schema a blocchi. Schema a blocchi 3. Realizzate lo schema a blocchi seguente. a. Inserite il VI Open/Create/Replace File VI che si trova nella palette Functions»File I/O. Questo VI apre un file. b. Inserite la funzione Read File che si trova nella palette Functions»File I/O. Questa funzione appare due volte in questa esercitazione. La prima funzione legge l’intestazione del file binario, che è un intero a quattro byte contenente il numero di elementi nella matrice memorizzata sul file. La seconda legge la matrice di dati dal file. c. Inserite la funzione Close File che si trova nella palette Functions»File I/O. In questa esercitazione questa funzione chiude il file binario dopo che i dati sono stati letti da esso. d. Inserite il VI Simple Error Handler che si trova nella palette Functions»Time & Dialog. In caso di errore, questo VI visualizza una finestra di dialogo con le informazioni sul tipo di errore e dove è avvenuto. LabVIEW Corso Base II 4-10 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file e. Inserite la costante Numeric che si trova nella palette Functions»Numeric. Dovete creare una costante I32 affinché la funzione Read File sappia quale tipo di dato aspettarsi. I32 è il tipo di dato di default per le costanti numeriche. f. Inserite la costante Numeric che si trova nella palette Functions»Numeric. Dovete creare una costante in doppia precisione affinché la funzione Read File sappia quale tipo di dato aspettarsi. Siccome I32 è il tipo di dato di default per le costanti numeriche, cliccate con il tasto destro del mouse e selezionate Representation»Double Precision. 4. Tornate al pannello frontale. Salvate il VI come Binary File Reader.vi. 5. Avviate il VI. Aprite il file data.bin creato nell’esercitazione 4-1. Dopo aver aperto il file, la funzione Read File utilizza l’ingresso byte stream type, che presenta un intero di tipo long, quattro byte, collegato ad esso, per leggere i primi quattro byte dal file. La funzione visualizza il numero nell’indicatore Number of Data Points, che mostra quanti numeri erano memorizzati nel file. Ricordate che questa intestazione è stata creata dalla funzione Write File nel VI Binary File Writer nell’esercitazione 4-1. La seconda funzione Read File legge la matrice di dati dal file utilizzando l’ingresso byte stream, che presenta un valore a virgola mobile in doppia precisione collegato ad esso. L’ingresso count definisce quanti valori dovrebbero essere letti dal file. 6. Chiudete il VI. Fine dell’esercitazione 4-2 National Instruments Corporation 4-11 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file B. File datalog di LabVIEW Se i vostri dati sono di tipo diverso, la formattazione in stringhe di testo o binario per la memorizzazione può essere noioso e poco efficiente. I file datalog di LabVIEW utilizzano un formato di memorizzazione dei dati per il salvataggio di dati di un qualsiasi tipo. Per esempio potreste voler salvare dei record di dati che contengono diverse centinaia di punti, compresa la data e l’ora per ogni insieme. Un file datalog memorizza le informazioni come una serie di record di un qualsiasi tipo di dato. Sebbene tutti i record in un file devono essere dello stesso tipo, tali record possono essere arbitrariamente complessi. Ogni record è scritto su file come un cluster contenente il nome dell’operatore del test, informazioni sul test, data e ora, e una matrice di valori numerici per i dati attuali del test. Utilizzate le stesse funzioni di I/O che avete usato per i file a flusso di byte per lavorare con i file datalog. Tuttavia, utilizzate l’ingresso del tipo di dato in maniera diversa per i file datalog. Per creare un nuovo file datalog, collegate un cluster che si adatti con il cluster del record di dati al terminale datalog type della funzione New File. Questo cluster definisce come i dati vengono scritti sul file. Quindi collegate il record dei dati attuali al terminale data della funzione Write File. Il cluster datalog type collegato a New File non deve essere un record di dati attuali—ne avete bisogno solo per definire il tipo di dato che potete memorizzare nel file. L’esempio seguente mostra come creare un nuovo file datalog. LabVIEW Corso Base II 4-12 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Per leggere il record delle informazioni dal file datalog, dovete collegare un ingresso a datalog type della funzione Open File che coincida esattamente con il tipo di dato dei record memorizzati nel file. L’esempio seguente mostra come aprire e leggere un file datalog esistente. Il cluster collegato all’ingresso datalog type della funzione Open File dev’essere identico al cluster utilizzato per creare il file e scriverci i dati, compresi il tipo di dato numerico e l’ordine del cluster. Nota Quando l’ingresso count della funzione Read File rimane scollegato, la funzione legge un singolo record dal file datalog. Se collegate un ingresso al terminale count, Read File restituisce una matrice di record. Quando utilizzare i file datalog Potete utilizzare file datalog per memorizzare e recuperare formati complessi di dati in LabVIEW. Tuttavi, i file datalog, come quelli binari, non hanno un formato standard per la memorizzazione. Quindi essi sono virtualmente impossibile da leggere con applicazioni software diverse da LabVIEW. I file datalog sono più utili se intendete accedere ai dati solo da LabVIEW e avete bisogno di memorizzare strutture complesse di dati. National Instruments Corporation 4-13 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Esercitazione 4-3 VI Save Data to File Obiettivo: Completare un VI che salvi i dati in un file testo, binario o datalog. Completando questo VI si abilita l’opzione Log Results to File del VI Analyze and Present Data dell’esercitazione 2-7. Ricordatevi che utilizzerete l’esercitazione 4-3 nel progetto della Lezione 5. Nota Nell’applicazione che state per sviluppare, avete bisogno di salvare un insieme di dati diversi su disco. Questo insieme di dati contiene semplici numeri, matrici di numeri e dati di tipo stringa. Inoltre questi dati vengono utilizzati solo in LabVIEW. A causa di questi vincoli, utilizzerete i file datalog per salvare su disco dei sottoinsiemi di dati dell’applicazione. Pannello frontale 1. Aprite il VI Save Data to File che si trova nella directory exercises\Basics2. Il pannello frontale è già realizzato I due controlli sul pannello frontale sono utilizzati per passare i dati dell’applicazione a questo VI, che opera come subVI nel progetto completo. Il Data Cluster conterrà il sottoinsieme di dati analizzati da salvare su disco e la stringa Employee name conterrà il nome dell’operatore da salvare su file. 2. Aprite lo schema a blocchi. LabVIEW Corso Base II 4-14 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Schema a blocchi 3. Completate la struttura Case dello schema a blocchi seguente. Le condizioni che non sono mostrate sono già realizzate. a. Cancellate la costante booleana etichettata con Delete Me. b. Inserite la funzione File Dialog che si trova nella palette Functions»File I/O»Advanced File Functions. Questa funzione richiede il nome per il nuovo file. Collegate l’uscita dei terminali exists e cancelled agli ingressi della funzione OR. Collegate il valore exists alla struttura Case come mostrato nel precedente schema a blocchi. c. Per creare questa costante, cliccate con il tasto destro del mouse sull’ingresso select mode della funzione File Dialog e selezionate Create»Constant. Con lo strumento modifica, impostate questa costante sul valore new file. d. Per creare questa costante, cliccate con il tasto destro del mouse sull’ingresso prompt della funzione File Dialog e selezionate Create»Constant. Questa stringa visualizza un messaggio di richiesta nella finestra di dialogo. La struttura Case esterna scrive i dati su un file datalog di LabVIEW. Notate che collegando Employee Name con Data Cluster si fornisce il tipo di dato per il file datalog. e. Inserite la funzione New File che si trova nella palette Functions»File I/O»Advanced File Functions. Questa funzione crea un nuovo file. Notate che l’ingresso datalog type di questa funzione deve ricevere un ingresso. f. Inserite la funzione Write File che si trova nella palette Functions»File I/O. Questa funzione scrive un record su un file datalog. g. Inserite la funzione Close File che si trova nella palette Functions»File I/O. In questa esercitazione questa funzione chiude il file dopo che ci sono stati scritti i dati. National Instruments Corporation 4-15 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file h. Inserite il VI Simple Error Handler che si trova nella palette Functions»Time & Dialog. In caso di errore, questo VI visualizza una finestra di dialogo con le informazioni sul tipo di errore e dove è avvenuto. 4. Dopo aver completato il VI, salvatelo e chiudetelo. 5. Aprite Analyze and Present Data.vi, che avete completato nell’esercitazione 3-3. Questo VI richiama il VI Save Data to File. Quando avviate questo VI e cliccate sul pulsante Log Results to File, compare una finestra di dialogo nel VI Save Data to File così potete dare un nome al file dati da salvare. Una volta che avete scelto il nome del file, LabVIEW salva l’insieme dei dati come file datalog. Fine dell’esercitazione 4-3 LabVIEW Corso Base II 4-16 National Instruments Corporation Lezione 4 Esercitazione 4-4 Obiettivo: Tecniche avanzate di I/O su file VI View Analysis File Studiare un VI che legga i file dati creati dal VI Save Data to File dall’esercitazione 4-3. Questo VI legge e visualizza i dati memorizzati dal VI Save Data to File. Nota Utilizzerete questo VI nella Lezione 5. Pannello frontale 1. Aprite il VI View Analysis File che si trova nella directory exercises\Basics2. Questo VI è già stato realizzato. 2. Aprite lo schema a blocchi. National Instruments Corporation 4-17 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Schema a blocchi La condizione True è vuota 3. Esaminate il comportamento del VI. Se l’utente cancella la finestra di dialogo, non accade niente. Notate che l’ingresso datalog type della funzione File Dialog è collegato ad un cluster dummy dello stesso tipo di quelli da leggere. Questo collegamento fa sì che la finestra di dialogo di LabVIEW visualizzi solo le directory e i file con un opportuno tipo di dato. Una volta che il file è stato selezionato, viene aperto come file datalog e viene letto un unico record di dati. Infine, notate l’uso della verifica degli errori in questa applicazione. 4. Dopo che avete avviato e testato il VI, chiudetelo. Non salvate i cambiamenti. Fine dell’esercitazione 4-4 LabVIEW Corso Base II 4-18 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file C. Salvataggio di dati su disco Quando la vostra applicazione acquisisce dati e li scrive su disco ripetutamente, potete migliorare l’efficienza delle operazioni di I/O su file se non aprite e chiudete il file ogni volta che vi accedete. La tecnica per lasciare aperti i file tra le operazioni di scrittura viene chiamata disk streaming. Disk streaming è una tecnica che abbiamo usato in questo corso senza descriverne le sue caratteristiche vantaggiose. Fate riferimento all’esercitazione 4-3 per un esempio. Gli esempi seguenti mostrano i vantaggi che derivano dall’utilizzo di questa tecnica. Nel primo esempio il VI deve aprire e chiudere il file durante ogni iterazione del ciclo. Il secondo esempio utilizza il disk streaming per ridurre il numero di volte che il VI interagisce col sistema operativo per aprire e chiudere il file. Aprendo il file una volta prima che il ciclo inizi e chiudendolo dopo che il ciclo ha terminato, risparmiate due operazioni su file ad ogni iterazione del ciclo. La tecnica di Disk streaming è particolarmente importante quando utilizzate VI ad alto livello, come Write To Spreadsheet File e Write Characters To File. Questi VI aprono, scrivono e chiudono il file ogni volta che vengono eseguiti. Perciò se richiamate uno di questi VI in un ciclo, eseguite operazioni di Open File e Close File inutili ad ogni iterazione del ciclo. National Instruments Corporation 4-19 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Sommario, trucchi e consigli Potete utilizzare le funzioni di I/O su file di LabVIEW per lavorare con file di testo, binari o datalog. Le stesse operazioni di base di Open File, Read File, Write File e Close File operano con tutti i tipi di file. File di testo I file di testo sono file in cui tutti i dati sono memorizzati come caratteri di testo leggibili. I file di testo sono utili perché quasi tutte le applicazioni software e i sistemi operativi possono leggerli. Tuttavia i file di testo possono essere più grandi del necessario e quindi ne vengono rallentati gli accessi. E’ anche molto difficile eseguire I/O su file ad accesso casuale con file di testo. Di solito utilizzate file di testo quando: y Altri utenti o applicazioni hanno bisogno di accedere al file dati. y Non avete bisogno di accedere casualmente in lettura o in scrittura al file dati. y Lo spazio su disco e la velocità di I/O su file non sono cruciali. File binari I file di dati binari sono file in cui i dati vengono memorizzati in formato binario senza conversioni per rappresentarli come testo. I file di dati binari sono generalmente più piccoli e vi si accede più rapidamente. L’I/O su file ad accesso casuale non presenta grandi difficoltà. Tuttavia non esiste un formato standard per i file binari. Quindi dovete mantenere le informazioni sui tipi di dati e sulle intestazioni utilizzate nei file binari. Vi consigliamo di utilizzare file di dati binari quando: y E’ improbabile che altri utenti o applicazioni abbiano bisogno di accedere ai vostri dati. y Avete bisogno di effettuare I/O su file ad accesso casuale. y Lo spazio su disco e la velocità di I/O su file sono importanti. File datalog I file datalog sono un tipo particolare di file binario usati per il salvataggio e il recupero di strutture di dati complesse in LabVIEW. Come nel caso di file binari, essi non hanno un formato standard. Consigliamo l’uso di file datalog quando: LabVIEW Corso Base II y I vostri dati sono composti da tipi di dati misti o complessi. y E’ improbabile che altri utenti o applicazioni abbiano bisogno di accedere ai vostri dati. y La tecnica di Disk streaming viene utilizzata per scrivere dati su un file più volte senza chiudere il file dopo ogni operazione di scrittura. Ricordate che i VI ad alto livello aprono e chiudono i file ogni volta che vengono eseguiti, determinando l’esecuzione di operazioni inutili ad ogni ciclo. 4-20 National Instruments Corporation Lezione 4 Tecniche avanzate di I/O su file Esercizi aggiuntivi 4-5 Scrivete un VI che utilizzi funzioni di I/O su file avanzate per creare un nuovo file. Quindi scrivete su quel file una stringa singola composta da una stringa di ingresso da parte dell’utente concatenata con un numero convertito in una stringa di testo utilizzando la funzione Format Into String. Chiamate il VI File Writer.vi. 4-6 Scrivete un VI che utilizzi funzioni di I/O su file avanzate per leggere il file creato nell’esercitazione 4-5. Chiamate il VI File Reader.vi. Consiglio Utilizzate la funzione EOF che si trova nella palette File I/O»Advanced File Functions per ottenere la lunghezza del file scritto. National Instruments Corporation 4-21 LabVIEW Corso Base II Lezione 4 Tecniche avanzate di I/O su file Note LabVIEW Corso Base II 4-22 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Questa lezione descrive alcuni aspetti che si devono considerare quando si realizzano grandi applicazioni in LabVIEW, incluso il processo di progettazione, l’organizzazione di subVI componenti e il processo di combinazione di questi componenti per creare un’applicazione completa. Imparerete: A. Ad assemblare la vostra applicazione in LabVIEW a partire da subVI già sviluppati. B. A conoscere le caratteristiche di LabVIEW per la gestione dello sviluppo del progetto. C. A conoscere gli strumenti di LabVIEW per la gestione del progetto. National Instruments Corporation 5-1 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW A. Assemblaggio di un’applicazione in LabVIEW La Lezione 1 di questo corso ha descritto un approccio di tipo generale allo sviluppo di applicazioni in LabVIEW. Questo approccio includeva una progettazione di tipo top-down dell’applicazione, seguito da un’implementazione bottom-up del progetto come serie di subVI. Di seguito si riporta uno schema di questo ciclo di sviluppo. Processo di confronto con il cliente Definizione del progetto Prove e rilascio del prodotto finale Progetto del diagramma di flusso Integrazione di subVI nel progetto Implementazione dei nodi come VI Prove sui subVI Top-Down Bottom-up Processo di sviluppo dei progetti in LabVIEW In questa lezione, inserirete i VI costruiti nelle lezioni precedenti in un’applicazione più grande. Svilupperete un VI per una generica acquisizione di dati che soddisfi i seguenti criteri: LabVIEW Corso Base II y Fornisca un’interfaccia utente a menu. y Richieda all’utente di accedere con un nome e una password corretti. y Se l’utente non ha inserito i dati corretti, le altre caratteristiche vengono disabilitate. y Consenta all’utente di configurare le impostazioni di acquisizione, compresa la frequenza di campionamento, il numero di campioni o di simulare i dati. y Acquisisca dati da forme d’onda con la configurazione definita dall’utente. 5-2 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW y Non appena i dati sono stati acquisiti ed ogni volta che lo desidera, l’utente possa selezionare un sottoinsieme di dati acquisiti, li possa analizzare, salvando i risultati dell’analisi su un file. y Consenta all’utente di caricare e visualizzare i risultati dell’analisi precedentemente salvati su disco. y Arresti l’applicazione con un click del pulsante Stop. Nelle lezioni dalla 1 alla 4, vi siete concentrati sugli elementi inferiori del processo di sviluppo, implementando e provando subVI che corrispondono ai nodi del seguente diagramma di flusso del progetto. START No Monitor Menu Interfaccia utente Selezione effettuata? Sì Pulsante di login selezionato? No No Entrato? Sì Sì Log in No Premuto il pulsante di uscita? Configura impostazioni di acquisizione Sì Raccoglie dati del processo Stop Selezione del processo Analizza dati correnti e salva su file Carica e visualizza file di analisi Lo sviluppo di grandi applicazioni in LabVIEW è un processo diverso rispetto alla realizzazione di VI relativamente lineari, essenzialmente adibiti ad un unico compito, con i quali abbiamo lavorato finora. Quando sviluppate grandi applicazioni, troverete che lavorare in gruppo, controllare il codice sorgente e creare uno schema gerarchico intuitivo per i subVI della vostra applicazione aumenta la produttività e migliora la documentazione e le prestazioni dell’applicazione. National Instruments Corporation 5-3 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Lavoro di gruppo Gli esperti di business management mettono in rilievo l’importanza del lavoro di gruppo durante la progettazione di compiti grandi e complessi. Quando si utilizza LabVIEW, il lavoro di gruppo è uno strumento potente per aumentare la produttività della programmazione grafica. Quando molte persone lavorano insieme per sviluppare un progetto in LabVIEW, è essenziale che tutti i membri della squadra concordino su un metodo di controllo del codice e di organizzazione. Controllo del codice sorgente Quando il numero di VI utilizzati nel vostro progetto cresce, il vostro gruppo di sviluppatori dovrebbe adottare misure per controllare il codice sorgente del progetto. Potete utilizzare la finestra interna VI Revision History, che si trova in Tools»VI Revision History, per registrare i cambiamenti che avete fatto ai VI. Quindi potete allestire un sistema di verifica per i VI. Strumenti di sviluppo realizzati da altri, che offrono un sistema di verifica per proteggere i file di progetto, di solito possono lavorare con LabVIEW, se sono in grado di operare con file binari. Se utilizzate uno di questi strumenti per gestire i vostri file di progetto, ricordatevi che i VI e LLB, le librerie di VI, sono file binari. Quindi gli strumenti che uniscono file sorgente non operano correttamente con i file di LabVIEW. Se utilizzate un sistema di verifica e i VI sono memorizzati in una LLB, dovete verificare l’intera libreria di VI. Tenete presente questo quando lavorate su un progetto. Una tecnica di gestione di VI è di lavorare su una copia del VI che volete modificare e di bloccare il VI originale per indicare agli altri che il VI non dev’essere modificato. Per bloccare un VI, abilitate l’impostazione Locking selezionando Security dal menu a tendina della finestra di dialogo File»VI Properties. Dovreste anche indicare che avete verificato il VI aggiungendo un commento nella finestra VI Revision History. Quando bloccate un VI, il suo schema a blocchi non può essere modificato. Dopo che avete finito di modificare il VI, sostituite il VI memorizzato nella LLB con la nuova versione e sbloccatela così altri sanno che è sicura la verifica del VI. Per documentare i vostri VI, selezionate Description and Tip dal menu a tendina nella finestra di dialogo File»VI Properties. Le descrizioni di controllo forniscono anch’esse un aiuto online che potete utilizzare nel prodotto finale. Utilizzo di librerie di LabVIEW (LLB) Potete caricare e salvare VI utilizzando un file speciale denominato libreria di VI (.llb). I file librerie di VI sono utili per l’organizzazione di VI. Alcuni dei vantaggi che derivano dall’uso di LLB sono: LabVIEW Corso Base II 5-4 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW y Potete utilizzare nomi lunghi fino a 255 caratteri per i vostri VI. y LLB memorizzano diversi VI in un formato compresso, che fa risparmiare spazio su disco. y Potete classificare dei VI per metterli in testa alla classifica. y Il trasporto di VI su un’altra piattaforma è semplificato perché non avete bisogno di trasferire molti file. Ci sono anche alcuni svantaggi quando utilizzate LLB: y Il caricamento e il salvataggio per applicazioni che usano un gran numero di subVI memorizzati in LLB sono generalmente più lenti rispetto a subVI che sono memorizzati direttamente su disco utilizzando directory. y Le librerie di VI non sono gerarchiche. Non potete creare una libreria di VI in un’altra libreria di VI, e quindi tutti i VI e subVI sono allo stesso livello. y Quando i file LLB diventano grandi, cioè fino a diversi megabyte, il salvataggio su un VI memorizzato in una LLB prende più tempo. y Ricordate che il sistema operativo visualizza una LLB come un singolo file, così quando salvate un VI in una LLB, LabVIEW e il sistema operativo devono operare su un file molto grande. Lavorando con file di tali dimensioni, correte rischi maggiori di superare i limiti di memoria o di spazio su disco, aumentando la probabilità di rovinare la libreria e di perdere il lavoro. y Non potete utilizzare gli strumenti di ricerca dei file del vostro sistema operativo per trovare VI memorizzati in una LLB. y Il controllo del codice sorgente di VI memorizzati in LLB è più difficile. Come regola, provate a limitare le dimensioni della vostra LLB a circa 1 MB. Memorizzare i vostri VI in una LLB o direttamente su disco può dipendere dalle limitazioni sul nome del file del vostro sistema operativo o da come scegliete di organizzare i vostri file. Fate riferimento al manuale LabVIEW Development Guidelines, disponibile all’indirizzo ni.com, per ulteriori informazioni sulla progettazione, la realizzazione e il test di applicazioni in LabVIEW, con una guida sugli stili, elenchi di controllo e riferimenti. Creazione di applicazioni in LabVIEW Ora state per creare l’applicazione descritta nelle pagine precedenti. Il primo passo per creare un’applicazione professionale e indipendente tramite VI è di capire l’architettura della vostra applicazione. Voi state per utilizzare l’architettura a macchine a stati descritta nella Lezione 1. Questa applicazione contiene un unico VI a livello superiore che richiama altri VI come subVI. National Instruments Corporation 5-5 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Nelle quattro esercitazioni successive realizzerete il VI Application Exercise. Ogni esercitazione aggiunge uno stato o due all’applicazione. Questo metodo viene utilizzato per consentirvi di testare l’applicazione man mano che viene costruita. LabVIEW Corso Base II 5-6 National Instruments Corporation Lezione 5 Esercitazione 5-1 Obiettivo: Sviluppo di grandi applicazioni in LabVIEW VI Application Exercise (5-1) Utilizzare il VI Login creato nell’esercitazione 3-1 per proteggere con password un’applicazione. Inizierete a creare un’applicazione che utilizza diversi VI che avete scritto precedentemente nel corso. Il primo passo di questo processo di sviluppo è di aggiungere una procedura di login al VI Menu creato nell’esercitazione 2-3. Pannello frontale 1. Aprite il VI Menu che si trova nella directory exercises\Basics2. Avete creato questo VI nell’esercitazione 2-3. Nota Se non avete completato l’esercitazione 2-3, individuate il VI Menu nelle soluzioni del corso memorizzate sul vostro computer. 2. Aggiungete un indicatore di stringa che si trova nella palette Controls»String & Path. Etichettatela con Operatore. 3. Aggiungete un Led rettangolare che si trova nella palette Controls»Boolean ed etichettatela con Accesso consentito. Scriverete questo VI in maniera tale che, finché non viene riconosciuto un utente con login corretto, l’utente possa utilizzare solo i pulsanti Login e Stop. 4. Aprite lo schema a blocchi. National Instruments Corporation 5-7 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Schema a blocchi 5. Modificate il VI seguente. Modificate solo il ciclo While e le condizioni –1 e 0. Il VI Login viene richiamato quando l’utente preme il pulsante Login sul pannello frontale (condizione 0 della struttura Case). Ricordatevi di cancellare la funzione One Button Dialog che avete inserito nella condizione 0 nell’esercitazione 2-3. Nota Se non avete completato l’esercitazione 3-1, individuate il VI Login nelle soluzioni del corso memorizzate sul vostro computer. LabVIEW Corso Base II 5-8 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 6. Inoltre modificate il VI in maniera tale che: a. L’indicatore Operatore sia inizializzato con una stringa vuota quando il VI si avvia. b. Se l’utente non ha effettuato il login correttamente, solo i pulsanti Login e Stop siano in esecuzione. c. Se il VI Login fornisce un valore FALSE per l’uscita Accesso consentito, l’indicatore Operatore deve risultare vuoto. Nota Il VI ha bisogno delle informazioni Operatore e Accesso consentito nelle successive iterazioni del ciclo. Quindi questo VI utilizza due registri a scorrimento aggiuntivi per memorizzare i dati. Dovete assicurarvi che le altre condizioni della struttura Case passino i dati correttamente, in maniera diretta fra le condizioni. Utilizzando i registri a scorrimento, notate che solo la condizione 0, in cui viene eseguito il VI Login, può modificare i valori Operatore e Accesso consentito. Il ciclo verifica che il valore memorizzato nel registro a scorrimento booleano, che rappresenta lo stato di Accesso consentito, sia TRUE, se l’utente ha premuto il pulsante Login (componente 0 nel cluster di menu) o quello Stop (componente 4) per determinare quale condizione eseguire. Se tutte queste condizioni sono FALSE, allora viene eseguita la condizione –1. 7. Avviate il VI e testatelo per assicurarvi che si comporti correttamente. Utilizzate gli strumenti di verifica di LabVIEW—esecuzione evidenziata, passo-passo, sonde e punti d’interruzione—per determinare il flusso di dati del VI. 8. Salvate il VI come Application Exercise (5-1).vi. Non chiudete il VI. Fine dell’esercitazione 5-1 National Instruments Corporation 5-9 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Esercitazione 5-2 VI Application Exercise (5-2) Obiettivo: Aggiungere il VI Acquire Data all’applicazione iniziata nell’esercitazione 5-1. Nell’esercitazione precedente, avete iniziato a realizzare il VI Application Exercise. Ora dovete aggiungere il VI Acquire Data, che avete realizzato nell’esercitazione 2-2. Schema a blocchi 1. Assicuratevi che il VI Application Exercise (5-1) sia aperto. Non modificherete il pannello frontale in questa esercitazione. Aprite lo schema a blocchi. 2. Mostrate la condizione 1 della struttura Case e cancellate la funzione One Button Dialog. Aggiungete il VI Acquire Data, che avete realizzato nell’esercitazione 2-2. Se non avete finito quell’esercitazione, utilizzate il VI delle soluzioni che si trova sul vostro computer. 3. Aggiungete un registro a scorrimento sulla cornice del ciclo While. Collegate l’uscita Time Waveform del VI Acquire Data sul lato destro del registro a scorrimento. 4. Dovete inizializzare il nuovo registro a scorrimento che avete creato. a. Cliccate con il tasto destro del mouse sul lato sinistro del registro a scorrimento che contiene il cluster di configurazione e selezionate Create»Control dal menu rapido. Questo crea un controllo di forma d’onda vuoto sul pannello frontale. b. Nascondete questo controllo di Time Waveform cliccando con il tasto destro del mouse sul terminale e selezionando Hide Control dal menu rapido. Ciò rende il controllo invisibile in maniera da non confondere gli utenti. LabVIEW Corso Base II 5-10 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 5. Modificate le proprietà del subVI Acquire Data in maniera tale che appaia come una finestra di dialogo quando viene richiamato. Cliccate due volte sul subVI Acquire Data per aprirne il pannello frontale. Selezionate File»VI Properties e quindi Window Appearance dal menu a tendina superiore e cliccate sul pulsante Dialog. Cliccate su OK quindi salvate e chiudete il VI Acquire Data. 6. Ricordate che se una condizione della struttura Case passa i dati all’esterno, anche tutte le altre condizioni della struttura devono farlo. Completate il VI affinché scambi i dati fra le altre condizioni non modificate, ricordando il metodo adottato nell’esercitazione 5-1. 7. Salvate il VI come Application Exercise (5-2).vi. Avviatelo e testatelo. Fine dell’esercitazione 5-2 National Instruments Corporation 5-11 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Esercitazione 5-3 Obiettivo: VI Application Exercise (5-3) Completare il VI Application Exercise aggiungendo i subVI per i pulsanti Analyze & Present Data e View Analysis File. Aggiungerete il VI Analyze & Present Data dell’esercitazione 2-7 e il VI View Analysis File, che avete studiato nell’esercitazione 4-4. Schema a blocchi 1. Assicuratevi che il VI Application Exercise (5-2) sia aperto. Non modificherete il pannello frontale in questa esercitazione. Aprite lo schema a blocchi. LabVIEW Corso Base II 5-12 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 2. Cancellate la funzione One Button Dialog nella condizione 2 della struttura Case. Aggiungete il VI Analyze & Present Data VI a questa condizione. Avete completato questo VI nell’esercitazione 2-7. a. Collegate la stringa contenente il nome dell’operatore all’ingresso Operator. b. Collegate la forma d’onda contenente i dati raccolti sull’ingresso Data. 3. Mostrate la condizione 3 della struttura Case e cancellate la funzione One Button Dialog. Aggiungete il VI View Analysis File. Non avete bisogno di fare collegamenti ad esso. 4. Salvate il VI come Application Exercise (5-3).vi ed avviatelo. Dovreste essere in grado ora di eseguire tutte le opzioni disponibili nel menu dopo aver effettuato il login con un nome e una password validi. Dovete selezionare un sottoinsieme di dati acquisiti quando scegliete Analyze & Present Data. Dopo aver scelto il sottoinsieme, cliccate sul pulsante Analyze e quindi selezionate il pulsante per salvare i dati su file. Altrimenti il file non contiene dati di forma d’onda. Nota Fine dell’esercitazione 5-3 National Instruments Corporation 5-13 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW B. Caratteristiche di LabVIEW per lo sviluppo di progetti Storia dei VI Uno degli strumenti di LabVIEW più utili per lo sviluppo da parte di gruppi è la finestra VI Revision History. Ogni VI ha una finestra History che visualizza i commenti registrati da coloro che hanno lavorato sul VI. Potete utilizzare la finestra VI Revision History per mantenere traccia delle modifiche e delle revisioni dei VI e delle applicazioni. Potete configurare LabVIEW con diverse opzioni di VI Revision History, che possono essere globali o per ogni VI, utilizzando le preferenze di LabVIEW presenti in Tools»Options e in File»VI Properties. Per aprire la finestra Revision History di un VI, selezionate Tools»VI Revision History. Dopo aver digitato i vostri commenti nell’area Comment della finestra Revision History, cliccate su Add per aggiungerli alla storia del VI. La finestra Revision History memorizza anche del numero di revisioni. Ogni volta che salvate il VI, il numero di revisioni del VI si incrementa di uno. Oltre al numero di revisioni e alla data e ora in cui è stato aggiunto il commento alla storia del VI, compare il nome dell’utente corrente nel campo User. Potete configurare le preferenze di LabVIEW per richiedere un nome utente all’avvio, selezionando Revision History dal menu a tendina superiore nella finestra di dialogo Tools»Options, oppure potete modificare il nome dell’utente selezionando Tools»User Name. LabVIEW Corso Base II 5-14 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Gerarchia dei VI Uno dei principali vantaggi derivanti dalla scomposizione della vostra applicazione in subVI è il risparmio di memoria. Inoltre, la risposta dell’editor di LabVIEW migliora perché VI più piccoli sono più facili da gestire. Applicazioni gerarchiche sono più facili da sviluppare, da leggere, da documentare e da modificare. Quindi, come regola generale, si consiglia di mantenere lo schema a blocchi del VI a livello superiore al disotto dei 500 KB. In generale, i vostri subVI dovrebbero essere significativamente più piccoli. Per verificare le dimensioni di uno schema a blocchi, selezionate Memory Usage dal menu a tendina superiore nella finestra di dialogo File»VI Properties. Solitamente dovete prendere in considerazione il suddividere un VI in diversi subVI se il vostro schema a blocchi è troppo grande per entrare completamente nello schermo. Se trovate che lo schema a blocchi di un VI sta diventando troppo grande. Potete convertirne una parte in un subVI utilizzando Edit»Create SubVI. Questa possibilità vi fornisce un metodo rapido e facile per creare la gerarchia della vostra applicazione. La finestra VI Hierarchy è anche un valido strumento per posizionare subVI e visualizzare il layout complessivo del progetto quando la vostra applicazione cresce. Per visualizzare la finestra VI Hierarchy, selezionate Browse»Show VI Hierarchy. Compare una nuova finestra che mostra le gerarchie di tutti i VI di livello superiore in memoria. Potete utilizzare le opzioni disponibili nella barra degli strumenti superiore della finestra VI Hierarchy per mostrare o nascondere varie categorie di oggetti utilizzati nella gerarchia, come variabili globali o VI forniti con LabVIEW, così come la gerarchia che si espande in orizzontale o in verticale. National Instruments Corporation 5-15 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Cliccando sulla piccola freccia che compare accanto ad un VI, si espande o si comprime la vista di quella gerarchia. Potete espandere diversi rami della gerarchia complessiva. La finestra Hierarchy seguente contiene la gerarchia dell’applicazione che avete completato nell’esercitazione precedente. I VI della directory di LabVIEW vi.lib non vengono mostrati. L’intera gerarchia viene mostrata cliccando con il tasto destro del mouse su un’area libera della finestra e scegliendo Show All VIs. Redo Layout Layout orizzontale Comprende globali Comprende Layout verticale VI Library Comprende Type Def Quando spostate il cursore sulle icone mostrate nella finestra Hierarchy, compare il nome del VI. Potete cliccare due volte su un’icona per aprire il VI. Potete anche individuare un VI nella gerarchia digitando il nome di un VI mentre siete nella finestra Hierarchy. Mentre digitate il nome, la finestra Hierarchy scorre sul relativo VI. Potete anche utilizzare la caratteristica Find per cercare un VI nella finestra Hierarchy. La finestra Hierarchy può anche essere usata come strumento di sviluppo quando pianificate o implementate il vostro progetto. Per esempio, dopo aver sviluppato un diagramma di flusso dei VI necessari per un’applicazione, potete creare, dal basso della gerarchia verso l’alto, ciascuno di questi VI in maniera tale che essi abbiano tutti gli ingressi e le uscite necessari sul loro pannello frontale, e i subVI che richiamano sul loro schema a blocchi. Ciò realizzerà la gerarchia di base dell’applicazione, che appare nella finestra Hierarchy. Potete quindi iniziare a sviluppare ciascun subVI, codificando con i colori le icone, che saranno colorate anche nella finestra Hierarchy, indicando il proprio stato. LabVIEW Corso Base II 5-16 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Per esempio, icone bianche potrebbero rappresentare VI non toccati, icone rosse potrebbero rappresentare subVI in corso di sviluppo e icone blu potrebbero rappresentare VI completati. Mentre questo è solo un esempio di utilizzo della finestra Hierarchy come strumento di sviluppo, esso dimostra l’utilità di questa finestra nell’organizzazione di un progetto. Utilizzo dell’Help online nelle vostre applicazioni in LabVIEW Quando eseguite gli ultimi ritocchi alla vostra applicazione, potreste decidere di fornire un help online all’utente. LabVIEW offre diversi meccanismi per farlo. Utilizzando l’opzione Description and Tip disponibile su ogni controllo e indicatore del pannello frontale, create non solo VI ben documentati, ma anche VI che possiedono help online estesi per l’utente. Se selezionate Help»Show Context Help, compare la finestra Context Help. Quando muovete il cursore su un oggetto, la finestra Context Help si modifica per mostrarne la descrizione. Potete da programma mostrare o nascondere la finestra Context Help con le funzioni Get Help Window Status e Control Help Window, che trovate nella palette Functions»Application Control»Help. Utilizzate questa funzione per determinare se la finestra Context Help è visibile e la posizione dell’angolo superiore sinistro della finestra. Con questa funzione potete controllare la visibilità della finestra Context Help e dove deve apparire nel caso venga mostrata. Potete anche utilizzare la funzione Control Online Help per accedere a LabVIEW Help o a file personalizzati di help che compilate utilizzando strumenti di altri. Il tipo di strumenti di sviluppo per riferimenti online che potete utilizzare per creare tale tipo di file dipende dalla piattaforma su cui gira la vostra applicazione. y Windows - Microsoft Help (.hlp files) y Macintosh – QuickView y Sun/HP-UX – Hyper Help National Instruments Corporation 5-17 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Con questa funzione potete gestire un file di help online. Potete elencare il contenuto del file di help, passare alle parole chiave nel file, o chiudere il file di help online. Fornire help online e materiale di riferimento per la vostra applicazione rende più facile utilizzarla e le conferisce un aspetto più pulito e professionale. Confronto di VI Il LabVIEW Professional Development System comprende uno strumento per determinare le differenze tra due VI caricati in memoria. Dal menu a tendina di LabVIEW selezionate Tools»Compare»Compare VIs per visualizzare la finestra di dialogo Compare VI. Da questa finestra di dialogo potete selezionare i VI che volete confrontare, così come le caratteristiche da verificare nei VI. Quando confrontate i VI, entrambi saranno visualizzati, con una finestra Differences che elenca tutte le differenze tra i due VI. In questa finestra potete scegliere le differenze e i dettagli da visualizzare, che possono essere cerchiati per chiarezza. LabVIEW Corso Base II 5-18 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Esercitazione 5-4 Obiettivo: Esaminare alcune delle caratteristiche interne di LabVIEW per la gestione delle applicazioni. In questa esercitazione esplorerete alcune delle caratteristiche interne a LabVIEW per la gestione delle applicazioni. 1. Aprite il VI Application Exercise(5-3) che avete creato nell’esercitazione precedente. Chiudete ogni altro VI caricato in memoria. 2. Selezionate Tools»VI Revision History. Appare la finestra della storia del VI. 3. Cliccate su Reset nella finestra Revision History per cancellare la storia presente. Cliccate su Yes per confermare la cancellazione e il ripristino del numero di revisione. 4. Nel riquadro Comment della finestra History digitate Creata l’applicazione iniziale e quindi cliccate sul pulsante Add. Il vostro commento dovrebbe apparire nell’elenco Revision History, insieme alla data e all’ora. Chiudete la finestra Revision History. 5. Selezionate Browse»Show VI Hierarchy. Compare la gerarchia dell’applicazione. National Instruments Corporation 5-19 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 6. Provate ad espandere e a comprimere la gerarchia. Notate che quando cliccate sulle piccole frecce nere e rosse della gerarchia, si espandono o si comprimono rami della gerarchia. Potreste vedere alcune icone con una freccia rossa accanto, ad indicare che richiamano uno o più subVI. Inoltre, potreste vedere anche delle icone con una freccia blu accanto, che si presenta quando un subVI è chiamato da diversi posti nell’ambito dell’applicazione, ma non tutte le chiamate sono correntemente indicate nella gerarchia. 7. Esaminate il funzionamento dei pulsanti nella barra degli strumenti della gerarchia. Notate come potete disporre la gerarchia utilizzando i pulsanti Layout o trascinando le icone, oppure come potete includere vari componenti dell’applicazione utilizzando i pulsanti Include. Utilizzate Redo Layout per ridisegnare il layout della finestra per minimizzare gli incroci tra linee e massimizzare la simmetria. 8. Cliccate due volte su ogni icona di subVI della gerarchia per visualizzare il subVI appropriato. Chiudete il subVI che avete scelto e chiudete la finestra della gerarchia. 9. Aprite il VI Application Exercise(5-2) che avete creato nell’esercitazione 5-2, passate al pannello frontale del VI Application Exercise(5-3) e quindi selezionate Tools»Compare»Compare VIs per visualizzare la finestra di dialogo Compare VIs. 10. Utilizzando l’opzione Select, assicuratevi che i due Application Exercise siano elencati nel riquadro VIs to Compare e che le opzioni di Compare siano impostate come nell’esempio precedente. 11. Cliccate su Compare per visualizzare la finestra Differences e affiancate i due VI. Contrassegnate il riquadro Circle Differences nella finestra Differences. Quindi selezionate una differenza dall’elenco, selezionate un dettaglio dall’elenco Details e quindi cliccate su Show Detail. Viene evidenziata la differenza tra i due VI. Esaminate le varie differenze tra i due VI e quindi chiudete la finestra Differences. LabVIEW Corso Base II 5-20 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 12. Chiudete Application Exercise(5-2).vi. Fine dell’esercitazione 5-4 National Instruments Corporation 5-21 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW C. Strumenti di LabVIEW per la gestione di progetti Ci sono diversi strumenti che potete aggiungere nell’ambiente di LabVIEW per avere assistenza nello sviluppo del progetto. La sezione seguente descrive due di questi strumenti che sono inclusi nel LabVIEW Professional Development System. Strumenti di controllo del codice sorgente Questi strumenti semplificano la gestione di applicazioni più grandi. La prima caratteristica aggiunta con questi strumenti è un sistema per il controllo del codice sorgente (SCC) che è fortemente integrato nell’ambiente di LabVIEW. Questo sistema contiene molte caratteristiche che si possono trovare in altri sistemi per il controllo del codice sorgente, come la verifica dei file in ingresso e uscita, il tracciamento delle revisioni e il supporto per utenti multipli. Inoltre gli strumenti SCC possono supportare altri sistemi per il controllo del codice sorgente come il Microsoft Visual SourceSafe. Tuttavia, come già detto precedentemente in questa lezione, i VI di un progetto devono essere salvati come singoli file (invece che all’interno di LLB) perché le caratteristiche di gestione dei file dei vari sistemi operativi non supportano le librerie di LabVIEW. Gli strumenti SCC contengono anche uno strumento VI Metrics per misurare la complessità di un’applicazione analogo al diffuso Source Lines of Code (SLOCs) per linguaggi testuali. Con lo strumento VI Metrics potete visualizzare statistiche sui VI, come il numero di nodi (funzioni, chiamate a subVI, strutture, terminali e così via) di un VI e dei suoi subVI. Altre statistiche comprendono il numero e le dimensioni degli schemi a blocchi, il numero e il tipo di interfacce utente, il numero di accessi a variabili globali e locali e il numero di chiamate a Code Interface Node o a librerie condivise. Avete accesso alla seguente finestra VI Metric dal menu Tools»Advanced. LabVIEW Corso Base II 5-22 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW E’ incluso in questo pacchetto anche uno strumento VI Library Manager. Questa funzione vi consente di copiare, rinominare e cancellare VI, sia che si trovino o meno in LLB. Il VI Library Manager può anche convertire LLB esistenti in file in una subdirectory, per rendere l’implementazione di strumenti SCC più semplice. Sono incluse anche le funzioni Compare VIs e Compare VI Hierarchies. Come descritto precedentemente, esse vengono usate per determinare le differenze tra due VI o gerarchie. Il LabVIEW Help e i manuali di questo pacchetto non solo forniscono materiale di riferimento per le utility precedenti ma anche discussioni estese sulla gestione di progetti software. Sono descritti in dettaglio vari modelli di sviluppo, tecniche di sviluppo di prototipi e di progetto, e metodi di tracciamento del progetto. Anche la documentazione dei VI e i consigli per lo sviluppo di un codice chiaro sono descritti in dettaglio. Application Builder di LabVIEW Potete utilizzare l’Application Builder di LabVIEW per creare programmi eseguibili indipendenti per utenti che non possiedono il software di sviluppo di LabVIEW. I VI eseguibili o le librerie condivise possono includere una gerarchia di VI che avete creato o il VI può essere configurato per aprire ed avviare un VI qualsiasi per l’utente. Configurazione di sistema necessaria Le applicazioni o le librerie condivise che avete creato con l’Application Builder generalmente avranno gli stessi requisiti del sistema di sviluppo di LabVIEW. I requisiti di memoria varieranno in funzione delle dimensioni dell’applicazione creata. National Instruments Corporation 5-23 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Trasformazione della vostra applicazione in un eseguibile indipendente Prima di LabVIEW 5.1, il processo di creazione di un’applicazione consisteva nel salvare i VI in una libreria, nel creare un’applicazione utilizzando la finestra di dialogo Build Application e quindi di creare l’installatore utilizzando la finestra di dialogo Create Distribution Kit. In LabVIEW 5.1 potete utilizzare la finestra di dialogo Build Application per svolgere tutte queste operazioni. Quando selezionate Tools»Build Application or Shared Library (DLL) compare una finestra di dialogo con dei tab. Effettuando le impostazioni nelle varie pagine dei tab della finestra di dialogo, potete definire l’applicazione che volete realizzare. Potete salvare uno script ed utilizzarlo successivamente per ricostruire l’applicazione. La finestra di dialogo Build Application or Shared Library contiene le seguenti pagine sotto tab—Target, Source Files, VI Settings, Application Settings e Installer Settings, come mostrato nell’esempio seguente. LabVIEW Corso Base II y Dal tab Target, potete definire se volete creare un eseguibile indipendente o una libreria condivisa, il nome della vostra applicazione e la directory in cui crearla. Opzionalmente, potete scegliere di scrivere i subVI in un file esterno se volete mantenere piccola l’applicazione principale. y Dal tab Source Files, potete definire i VI che fanno parte della vostra applicazione. Quando cliccate su Add Top Level VI, aggiungete i VI principali della vostra applicazione. Dovete selezionare solo i VI ad alto livello e LabVIEW include automaticamente tutti i subVI e i file collegati (come i file di menu o DLL). Se il vostro VI chiama dinamicamente un qualsiasi subVI utilizzando il VI Server, LabVIEW 5-24 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW non può rilevarlo automaticamente, quindi dovete aggiungerli cliccando sul pulsante Add Dynamic VI. Se volete includere un qualsiasi file dati nella vostra applicazione, cliccate sul pulsante Add Support File, e i file dati verranno automaticamente copiati nella directory della vostra applicazione. y Dal tab VI Settings definite le modifiche da effettuare ai vostri VI come parte della realizzazione. Potete scegliere di disabilitare certe VI Properties. Queste impostazioni si applicano solo al processo in corso e non influenzano i vostri VI sorgente originali. LabVIEW crea automaticamente la vostra applicazione la più piccola possibile rimuovendo codice per le correzioni, schemi a blocchi e pannelli frontali inutili. Se aprite un pannello frontale dinamicamente utilizzando il VI Server, dovete specificare che il pannello frontale è necessario utilizzando il tab VI Settings. y Dal tab Application Settings potete personalizzare le caratteristiche della vostra applicazione. Potete scegliere di definire le dimensioni della memoria per il Macintosh, o personalizzare icone e caratteristiche di server ActiveX sotto Windows. y Dal tab Installer Settings (solo Windows) create un installatore. L’installatore viene scritto sulla directory che contiene la vostra applicazione. Quando sviluppate un VI eseguibile con LabVIEW sotto Windows e lo trasferite su un altro computer, dovete includere anche la DLL Run-Time di LabVIEW. Il computer su cui viene eseguito il VI deve installare questa DLL utilizzando Run-Time DLL Installer di LabVIEW prima dell’esecuzione del VI. Se distribuite un VI utilizzando Build Application, la DLL Run-Time viene eseguita automaticamente. Dopo aver installato correttamente su una macchina la DLL Run-Time, essa può eseguire un qualsiasi VI eseguibile sviluppato in LabVIEW. Dovete includere solo la DLL Run-Time con il primo VI inviato su ciascun computer. Nota Creazione di applicazioni in LabVIEW Per creare un’applicazione professionale indipendente con dei VI, dovete aver chiari quattro aspetti: y L’architettura della vostra applicazione y Problemi di programmazione particolari dell’applicazione y Come realizzare la vostra applicazione y Come realizzare un installatore per la vostra applicazione La prima sezione di questa lezione descrive l’architettura della vostra applicazione ed ha realizzato l’applicazione nell’esercitazione. La vostra applicazione è un unico VI a livello superiore che si avvia quando lanciate l’applicazione e richiama pannelli frontali da diversi subVI, National Instruments Corporation 5-25 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW quando vengono chiamati. Questa è l’architettura più comune e più semplice per la realizzazione di applicazioni indipendenti. Aspetti della programmazione Dovreste considerare diversi aspetti della programmazione quando state realizzando VI che confluiranno in un’applicazione. Il primo aspetto da conoscere è quale codice di uscita viene usato per l’applicazione. Per esempio, state richiamando una qualche DLL di sistema o personalizzata o delle librerie condivise? State per processare argomenti sulla linea di comando? Questi sono esempi avanzati che vanno oltre lo scopo di questo corso, ma li dovete considerare per l’applicazione. Un secondo aspetto riguarda i nomi dei percorsi utilizzati nel VI. Un esempio è quando utilizzate la capacità del VI Server di caricare dinamicamente e di avviare i VI (questo viene descritto nel corso LabVIEW Advanced I). Una volta che l’applicazione è stata costruita, i VI vengono inclusi in un eseguibile. Supponete di avere un VI denominato test.vi all’interno dell’applicazione test.exe. Una richiesta di percorso in test.vi restituisce test.exe\test.vi con tutto il percorso precedente di test.exe. Facendo attenzione a questi aspetti imparerete a realizzare applicazioni più robuste in futuro. Un ultimo aspetto da considerare che condizionerà l’applicazione che avete realizzato è che il VI a livello superiore non esce da LabVIEW né chiude i pannelli frontali dei VI quando ha completato l’esecuzione. Per uscire completamente e chiudere il VI a livello superiore, dovete utilizzare la funzione Quit LabVIEW che si trova nella palette Functions»Application Control dello schema a blocchi del VI a livello superiore. Realizzazione dell’applicazione Come già descritto in questa sezione, utilizzate l’Application Builder di LabVIEW per creare un eseguibile o una libreria condivisa (DLL) per la vostra applicazione. Questo corso descrive come realizzare un eseguibile e il corso LabVIEW Advanced I descrive come realizzare ed utilizzare una libreria condivisa (DLL). L’Application Builder di LabVIEW può compattare la vostra applicazione in una delle due forme—come un singolo eseguibile o come singolo eseguibile con una libreria di VI. In funzione di come volete che appaia la vostra applicazione all’utente finale, e di quanto complesso possa essere il processo di installazione, potreste preferire un formato o l’altro. LabVIEW Corso Base II 5-26 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Di default è prevista la compressione dell’applicazione in un singolo file eseguibile. Tutti i VI che fanno parte dell’applicazione sono inclusi nel file eseguibile. Questi comprendono i VI a livello superiore, i VI dinamici e tutti i subVI relativi. Mentre questa compattazione è semplice perché fornisce un singolo file, questi file possono diventare abbastanza grandi in funzione del numero di VI facenti parte della vostra applicazione. La seconda opzione di compressione consiste nello spezzare l’applicazione in un file eseguibile e in una libreria di VI. In questo caso, l’Application Builder include tutti i VI ad alto livello e i VI dinamici nel file eseguibile risultante e tutti i subVI relativi vengono inseriti in un’unica libreria di VI. Mentre questa compressione comprende due file, il file che l’utente finale lancia può essere abbastanza piccolo. A seconda della natura della vostra applicazione, può essere necessaria la presenza di file che non sono VI per funzionare correttamente. I file comunemente necessari comprendono un file di preferenze (.ini) per l’applicazione, il file serpdrv di LabVIEW e altri file di help che i vostri VI richiamano. Il file serpdrv di LabVIEW (Windows e Unix) è necessario per ogni applicazione che utilizza la porta di I/O seriale. Notate che i file di menu run-time e i file delle librerie condivise richiamate utilizzando il Call Library Node non sono file di supporto. L’Application Builder comprende file di menu run-time nei file principali dell’applicazione. Esso memorizza automaticamente ogni libreria condivisa necessaria nella directory dei file di supporto dell’applicazione. Anche le subroutine esterne per CIN vengono memorizzate nei file principali dell’applicazione. Nota Fate riferimento al LabVIEW Help in Help»Contents and Index per ulteriori descrizioni su come utilizzare l’Application Builder e costruire un file con le preferenze per la vostra applicazione. Realizzazione dell’installatore L’ultima fase della creazione di un’applicazione professionale indipendente a partire dai vostri VI è quella di creare un installatore. L’Application Builder di LabVIEW comprende le funzionalità per creare installatori per Windows. Gli strumenti comuni per creare installatori su Macintosh sono DragInstall e Vise. Sui sistemi Unix potete creare uno script shell per installare la vostra applicazione. Gli installatori che create con l’Application Builder di LabVIEW installano tutti i file che fanno parte dell’elenco dei file sorgente. Dovete aggiungere a questo elenco tutti i file che volete installare. Definendo destinazioni particolari ai file sorgente, potete creare strutture a directory arbitrariamente complesse all’interno della directory di installazione. National Instruments Corporation 5-27 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Imparerete a conoscere le procedure e le opzioni dell’Application Builder quando realizzerete un’applicazione nell’esercizio successivo. Dopo aver definito le vostre specifiche utilizzando l’Application Builder, salverete queste impostazioni su disco sotto forma di file di script (.bld). LabVIEW Corso Base II 5-28 National Instruments Corporation Lezione 5 Esercitazione 5-5 Obiettivo: Sviluppo di grandi applicazioni in LabVIEW La mia applicazione eseguibile Creare un’applicazione indipendente con l’Application Builder. Dovete avere l’Application Builder correttamente installato per avviare questo esempio. Per stabilire se è installato, selezionate il menu Tools. Se compare l’opzione Build Application or Shared Library (DLL) nel menu Tools, allora l’Application Builder è correttamente installato. Nota Pannello frontale 1. Aprite il VI Application Exercise(5-3) che avete creato nell’esercitazione 5-3. Modificate il pannello frontale per rimuovere i commenti. 2. Selezionate File»VI Properties per visualizzare la finestra di dialogo VI Properties. Selezionate Window Appearance dal menu a tendina superiore, quindi selezionate Top-level Application Window. Questo fornisce al pannello frontale un aspetto professionale quando viene aperto come eseguibile. 3. Salvate il VI come Application Exercise.vi. Schema a blocchi 4. Aprite lo schema a blocchi ed utilizzate i componenti seguenti. a. Inserite la funzione not che si trova nella palette Functions»Boolean. Questa funzione inverte il valore da inviare al terminale condizionale del ciclo While. Quando il ciclo ha terminato l’esecuzione, questo valore è False, quindi viene inviato un True sul bordo del ciclo per la funzione Quit LabVIEW. National Instruments Corporation 5-29 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW b. Inserite la funzione Quit LabVIEW che si trova nella palette Functions»Application Control. Questa funzione fa uscire da LabVIEW e dall’applicazione dopo che è stata realizzata. 5. Salvate il VI come Application Exercise.vi. 6. Aprite il pannello frontale ed avviate il VI. Quando selezionate il pulsante Stop, il VI si arresta ed uscite da LabVIEW. 7. Riavviate LabVIEW e aprite un nuovo VI. Non aprirete il VI Application Exercise perché l’Application Builder non può creare un eseguibile se dei VI sono caricati in memoria. 8. Selezionate Tools»Build Application or Shared Library (DLL). Realizzate un eseguibile a partire da Application Exercise.vi denominato myApplication.exe ed inseritelo nella directory c:\myapp. Modificate il tab Target come segue. LabVIEW Corso Base II 5-30 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 9. Cliccate sul tab Source Files e selezionate il pulsante Add Top-Level VI. Aggiungete Application Exercise.vi come mostrato. 10. Cliccate sul tab VI Settings. Lasciate queste impostazioni sui valori di default—il VI a livello superiore si avvia quando viene aperto e gli schemi a blocchi e i pannelli frontali vengono salvati solo se necessario. Esaminate queste impostazioni; dovrebbero essere simili agli esempi seguenti. 11. Cliccate sul tab Application Settings. Qui è dove dovreste abilitare le impostazioni di ActiveX o fornire un’icona personalizzata alla vostra applicazione. Lasciate l’icona di default di LabVIEW. Non cambiate queste impostazioni. National Instruments Corporation 5-31 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW 12. Cliccate sul tab Installer Settings. Realizzate un kit per la distribuzione della vostra applicazione che si installa nella directory c:\Program Files\Myapplication. Configurate il tab Installer come indicato. 13. Cliccate sul pulsante Build. I file associati all’installatore vengono quindi compressi in dischetti di setup, che sono memorizzati nella directory c:\myapp\installer\disks. Viene anche creato un file Setup.exe, che può essere utilizzato per installare le immagini del dischetto. Tutti questi file possono essere copiati su dischetti per trasferire l’applicazione su un altro sistema. L’installatore LabVIEW Run-Time DLL è incluso di default. Viene anche creato l’eseguibile della vostra applicazione e chiamato myApplication.exe, come specificato nel tab Target. 14. Selezionate Done dalla finestra Build Application per chiudere questa funzione. Vi viene chiesto di salvare uno script affinché possiate realizzare nuovamente l’applicazione. Selezionate Yes e chiamate lo script myapp.bld. Ora se effettuate dei cambiamenti all’applicazione originale e volete ricostruire un eseguibile e un installatore con le stesse impostazioni, potete aprire questo script utilizzando il pulsante Load. 15. Avviate myApplication.exe dalla directory c:\myapp. Application Exercise dovrebbe aprire il proprio pannello frontale ed avviarsi automaticamente. Fate lavorare il VI per essere sicuri che tutte le impostazioni che avete scelto siano operative. Chiudete l’applicazione quando avete finito. LabVIEW Corso Base II 5-32 National Instruments Corporation Lezione 5 16. Avviate il Sviluppo di grandi applicazioni in LabVIEW file Setup.exe nella directory c:\myapp\disks\Myapplication. Dovreste essere guidati attraverso il processo di setup, l’eseguibile è creato all’interno della directory c:\Program Files\Myapplication, e dovreste essere in grado di avviare l’applicazione da Programs». Fine dell’esercitazione 5-5 National Instruments Corporation 5-33 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Sommario, trucchi e consigli y LabVIEW possiede diverse caratteristiche per assistere voi e i vostri collaboratori nello sviluppo di progetti, come la finestra VI Revision History per registrare commenti e modifiche ad un VI, e un login utente che, quando è usato con VI Revision History, registra chi ha fatto i cambiamenti sul VI. Potete accedere alla finestra VI Revision History in un qualsiasi momento selezionando VI Revision History dal menu Tools. y La finestra VI Hierarchy vi fornisce una panoramica rapida e sintetica dei VI utilizzati nel vostro progetto. C’è anche la possibilità di confrontare due VI per verificarne le differenze. y LabVIEW fornisce diversi strumenti per facilitare lo sviluppo di grandi progetti. Gli strumenti Source Code Control contengono diverse funzioni per la gestione del codice di LabVIEW, e l’Application Builder vi consente di creare eseguibili indipendenti o librerie condivise (DLL). Entrambi questi pacchetti sono inclusi nel LabVIEW Professional Development System. y La creazione di un’applicazione professionale indipendente con i vostri VI avviene attraverso la comprensione dei seguenti aspetti: − L’architettura della vostra applicazione. − Gli aspetti di programmazione particolari dell’applicazione. − Il processo di costruzione dell’applicazione. − Il processo di realizzazione dell’installatore. LabVIEW Corso Base II 5-34 National Instruments Corporation Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Esercizi aggiuntivi 5-6 Modificate il VI Application Exercise affinché i pulsanti Acquire Data, Analyze & Present Data e View Analysis File siano disabilitati e resi opachi se l’utente non ha inserito nome e password corretti. Consiglio: Utilizzate i riferimenti di controllo e il VI Disable Controls che avete realizzato nell’esercitazione 2-8 per modificare i pulsanti. Salvate l’applicazione come Application Exercise(5-6).vi. 5-7 Aggiungete un pulsante al controllo del cluster dei menu nel VI Application Exercise affinché l’utente possa mostrare o nascondere la finestra di Help di LabVIEW. Il testo del pulsante dovrebbe indicare cosa succede quando l’utente clicca sul pulsante, per esempio, Mostra Help e Nascondi Help. Se vi accorgete che i pulsanti e gli indicatori del pannello frontale non hanno descrizioni nella finestra Context Help, dovete aggiungerli nella finestra di dialogo rapida Description and Tip per ogni controllo e indicatore. Assicuratevi che il VI tracci correttamente lo stato della finestra Context Help. Per esempio, se l’utente clicca sul pulsante Show Help per mostrare la finestra Context Help, ma chiude la finestra Context Help dal menu Help»Show Context Help, il vostro VI assume erroneamente che la finestra Context Help è in visualizzazione. Salvate questo VI come Application Exercise(5-7).vi. Nota Utilizzate un Property Node per impostare il testo del pulsante. L’azione meccanica del pulsante dovrebbe essere Latch When Released. Utilizzate un registro a scorrimento per ricordare lo stato della visibilità della finestra Context Help e utilizzate la funzione Control Help Window per mostrare e nascondere la finestra Context Help. National Instruments Corporation 5-35 LabVIEW Corso Base II Lezione 5 Sviluppo di grandi applicazioni in LabVIEW Note LabVIEW Corso Base II 5-36 National Instruments Corporation Lezione 6 Controllo delle prestazioni Questa lezione descrive come ottimizzare le prestazioni dei vostri VI e anche come aumentare la velocità di esecuzione e migliorare l’utilizzo della memoria. Imparerete: A. A conoscere il multithreading e il multitasking di LabVIEW. B. Ad utilizzare la finestra Profile. C. A velocizzare i vostri VI. D. A conoscere quali aspetti della memoria di sistema influenzano le prestazioni di LabVIEW. E. Ad ottimizzare l’utilizzo della memoria e le prestazioni relative dei singoli VI. National Instruments Corporation 6-1 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni A. Panoramica sul multithreading e il multitasking in LabVIEW In LabVIEW 4 e versioni precedenti, potevate avviare diversi VI contemporaneamente e i VI rispondevano ancora agli ingressi utente da cursore o da tastiera. Per ottenere questo, il sistema di esecuzione utilizzava il multitatsking cooperativo—ogni attività differente processata una alla volta e a rotazione. Il multitatsking cooperativo funziona bene, ma il tempo del processore non è equamente distribuito su ogni attività. Eseguire una routine computazionale lunga o visualizzare una grande quantità di dati su un grafico può utilizzare una quantità spropositata di tempo del processore. Le attività vengono eseguite a turno dal processore, e una lunga attività non viene frazionata in parti più piccole, più brevi. Con questa architettura, compiti multipli venivano eseguiti nel sistema sotto un singolo thread, o processo. Le versioni di LabVIEW dalla 5.0 in poi, supportano il multithreading. Con il multithreading parti diverse di un’applicazione possono essere eseguite sotto diversi thread, o processi, in un computer. Questa architettura consente al sistema operativo di appropriarsi di un thread di esecuzione per fornire tempo di processore ad un altro thread. In tal modo il tempo della CPU viene più equamente condiviso tra i thread. Per sfruttare il multithreading, utilizzate LabVIEW 5.0 o successivi su un sistema operativo che supporta il multithreading come Windows, Solaris 2 o Concurrent PowerMax. Su sistemi operativi che non supportano il multithreading, LabVIEW continua a funzionare con il multitasking cooperativo. Di default LabVIEW sfrutta il multithreading se il sistema operativo lo supporta. Se volete verificare se il multithreading è abilitato, selezionate Performance and Disk dal menu a tendina superiore nella finestra di dialogo Tools»Options. Potete contrassegnare o meno il riquadro etichettato con Run with multiple threads. LabVIEW Corso Base II 6-2 National Instruments Corporation Lezione 6 Controllo delle prestazioni Questa opzione è disponibile solo su sistemi operativi che supportano il multithreading. Se rimuovete il contrassegno dal riquadro, il sistema di esecuzione si comporta come se voi aveste un unico thread. L’esecuzione di un singolo thread rimuove alcune sovrapposizioni dal sistema di esecuzione. Tuttavia non beneficiate dei vantaggi del multithreading, come il supporto multiplo del processore e la possibilità, per un’operazione di priorità più alta, di interrompere un’operazione lunga, come una schermata da rinfrescare per ottenere una risposta migliore dall’applicazione. Rimuovete il contrassegno per VI che non sono compatibili con un sistema di esecuzione multithreading. Vantaggi Un vantaggio importante del multithreading in LabVIEW è la separazione dell’interfaccia utente dall’esecuzione dello schema a blocchi. Ogni attività condotta nell’interfaccia utente, come il disegno del pannello frontale, la risposta ai click del mouse e così via, opera nel proprio thread. Ciò impedisce all’interfaccia utente di sottrarre tempo di esecuzione al codice dello schema a blocchi. In tal modo la visualizzazione di una grande quantità di in formazioni su un grafico non impedisce l’esecuzione del codice dello schema a blocchi. Inoltre, l’esecuzione di una lunga routine computazionale non impedisce all’interfaccia utente di rispondere ai click del mouse o a digitazioni su tastiera. I computer con processori multipli beneficiano ancora di più del multithreading. Su un sistema a singolo processore, il sistema operativo si impadronisce dei thread e distribuisce sul processore il tempo di ogni thread. Su un computer a processori multipli, i thread possono essere eseguiti su più processori contemporaneamente, e quindi più di un’attività può essere svolta nello stesso istante. National Instruments Corporation 6-3 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Utilizzo del multithreading Quando un’applicazione esistente di LabVIEW è in esecuzione, sfrutta automaticamente il sistema del multithreading senza dover effettuare modifiche all’applicazione. Tuttavia, lavorando con più VI, ci sono diverse classificazioni di thread, chiamate sistemi di esecuzione, disponibili per organizzare la vostra applicazione. Ci sono sei sistemi di esecuzione disponibili per avviare VI: y User Interface y Standard y Instrument I/O y Data Acquisition y Other 1 y Other 2 Lo scopo di avere alcuni sistemi di esecuzione differenti è di fornire partizioni diverse per VI che devono essere eseguiti indipendentemente da altri VI. Di default, i VI vengono eseguiti con il sistema di esecuzione Standard, che consente l’esecuzione in thread separati dall’interfaccia utente. Il sistema di esecuzione Instrument I/O è incluso per evitare che VISA, GPIB e I/O seriale interferiscano con altri VI. Analogamente, il sistema di esecuzione Data Acquisition viene impostato per i VI DAQ. Anche se i VI che voi scrivete saranno eseguiti correttamente se lasciate impostata la modalità di esecuzione Standard, potreste aver bisogno di spostare determinati VI su sistemi di esecuzione diversi. Per esempio, se state sviluppando driver per gli strumenti, potreste impostare la modalità di esecuzione dei vostri VI su Instrument I/O. Per cambiare la categoria del thread in cui un VI viene eseguito, selezionate Execution dal menu a tendina superiore della finestra di dialogo VI Properties. LabVIEW Corso Base II 6-4 National Instruments Corporation Lezione 6 Controllo delle prestazioni Il riquadro Preferred Execution System elenca le categorie disponibili di sistemi di esecuzione. Potete anche creare delle priorità su compiti paralleli in un ambiente che opera in multithread impostando la Priority del VI. All’interno di ogni categoria di thread, potete definire la priorità di esecuzione—normal, above normal, high, time critical, subroutine e background. La priorità normal coincide con la priorità a livello 1 e così via. Se ci sono più VI, i VI vengono disposti in coda di esecuzione. I VI con priorità più alta, eccetto la priorità subroutine, verranno eseguiti prima di quelli aventi priorità più bassa. Tuttavia, i VI con un livello di priorità subroutine si comportano in maniera diversa rispetto ai VI con altri livelli di priorità. Quando un VI è in esecuzione con una priorità subroutine, viene eseguito nella categoria di thread del suo chiamante e nessun altro VI può trovarsi in esecuzione fino a quando quel VI o i suoi subVI hanno terminato. I VI con una priorità subroutine possono chiamare solamente altri VI con priorità subroutine. Utilizzate VI con una priorità subroutine solo quando volete mandare in esecuzione un semplice calcolo senza elementi interattivi. Potete saltare l’esecuzione di un subVI con priorità subroutine quando esso è occupato, cliccando con il tasto destro del mouse sul subVI e selezionando Skip Subroutine Call if Busy. Utilizzate questa opzione quando state chiamando una subroutine condivisa da un VI con priorità high ma non volete aspettare che un VI subroutine diventi disponibile. Fate attenzione quando impostate i livelli di priorità per i VI. Utilizzare delle priorità per controllare l’ordine di esecuzione potrebbe non produrre i risultati sperati. Per esempio, se utilizzate l’impostazione delle priorità in maniera non corretta, i compiti con priorità più bassa potrebbero non essere mai eseguiti. Come vedrete più avanti in questa lezione, l’uso strategico delle funzioni Wait all’interno dei VI può anche essere un modo molto efficace di ottimizzazione del codice in LabVIEW. Fate riferimento a LabVIEW Help per ulteriori informazioni su come utilizzare le funzioni Wait. National Instruments Corporation 6-5 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni B. La finestra Profile La finestra Profile è uno strumento potente per analizzare come la vostra applicazione utilizza il tempo di esecuzione e la memoria. Con queste informazioni potete individuare VI specifici o parti di VI che hanno bisogno di essere ottimizzati. Per esempio, se notate che un particolare subVI impiega una grande quantità di tempo ad aggiornare il display, potete focalizzare la vostra attenzione sul miglioramento delle prestazioni del display di quel VI. La finestra Profile visualizza le informazioni sulle prestazioni di tutti i VI in memoria sotto forma di tabella interattiva. Dalla finestra potete scegliere il tipo di informazione da prendere e ordinare le informazioni per categoria. Potete anche monitorare le prestazioni dei subVI all’interno di differenti VI. Per mostrare la finestra Profile, selezionate Tools»Advanced»Profile VIs. Compare la finestra seguente. Notate che dovete selezionare l’opzione Profile Memory Usage prima di avviare una sessione per il profilo. Raccogliere informazioni sull’utilizzo della memoria da parte dei VI aggiunge una quantità di calcolo significativa all’esecuzione del VI, che influenza l’accuratezza di ogni statistica temporale che raccogliete durante la sessione per il profilo. Per questo dovreste eseguire profili per la memoria separati da quelli sul tempo. Molte delle opzioni nella finestra Profile sono disponibili solo dopo che avete iniziato una sessione. Durante una sessione, potete catturare un’istantanea dei dati disponibili e salvare i dati in ASCII su un foglio elettronico. Le misure di tempo si accumulano ogni volta che eseguite un VI. Tutte le statistiche misurate in una sessione di profilo sono raccolte per un’esecuzione completa di un VI, non per un’esecuzione parziale. Nota LabVIEW Corso Base II 6-6 National Instruments Corporation Lezione 6 Controllo delle prestazioni Statistiche sul tempo di esecuzione Per avere statistiche sul tempo di esecuzione con la finestra Profile, cliccate sul pulsante Start. L’esempio precedente mostra la finestra Profile dopo una sessione di profilo. La colonna di statistiche su VI Time mostra il tempo speso nell’esecuzione del VI e nella visualizzazione dei suoi dati, come anche il tempo speso dall’utente ad interagire con il pannello frontale. Questo tempo consiste in cinque sottocategorie, che potete mostrare selezionando l’opzione Timing Details. Le sottocategorie sono Diagram, Display, Draw, Tracking e Locals. Fate riferimento a LabVIEW Help o a LabVIEW User Manual per ulteriori informazioni su queste statistiche. La colonna di statistiche SubVI mostra il tempo di esecuzione totale per tutti i subVI richiamati dal VI principale. Inoltre le informazioni sui tempi possono essere visualizzate in secondi, millisecondi o microsecondi. La colonna di statistiche Total Time rappresenta il tempo di esecuzione totale per il VI principale come somma dei valori dei VI e dei subVI. Se selezionate l’opzione Timing Statistics, compaiono quattro nuove categorie di informazioni. # Runs visualizza quante volte ogni VI è stato eseguito. Il valore Average rappresenta il valore del tempo del VI diviso per # Runs, o la media del tempo impiegato da un VI in esecuzione. Shortest e Longest mostrano la più piccola e la più grande quantità di tempo necessaria per l’esecuzione del VI. Statistiche sulla memoria Per avere statistiche sulla memoria con la finestra Profile, selezionate l’opzione Profile Memory Usage prima di avviare la sessione dei profili. Potete anche selezionare l’opzione Profile Memory Usage dopo aver avviato il Profiler per avere informazioni aggiuntive sulla memoria. La finestra Profile visualizza due insiemi di dati sull’uso della memoria. Un insieme di dati mostra il numero di byte di memoria utilizzati, e l’altro mostra i blocchi della memoria. LabVIEW memorizza i dati come matrici, stringhe e percorsi in blocchi contigui di memoria. Se un VI utilizza un gran numero di blocchi di memoria, la memoria può frazionarsi, il che degrada le prestazioni di LabVIEW in generale, non l’esecuzione del VI. La colonna di statistiche Average Bytes mostra il numero medio di byte di memoria utilizzati da uno spazio dati di un VI durante la sua esecuzione. Min Bytes e Max Bytes rappresentano la più piccola e la più grande quantità di memoria utilizzata da un VI durante una singola esecuzione. Average Blocks indica quanti blocchi di memoria servono ad un VI in media, mentre Min Blocks e Max Blocks mostrano il più National Instruments Corporation 6-7 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni piccolo e il più grande numero di blocchi di memoria utilizzati da un VI durante una singola esecuzione. LabVIEW Corso Base II 6-8 National Instruments Corporation Lezione 6 Controllo delle prestazioni Esercitazione 6-1 Obiettivo: La finestra Profile Utilizzare la finestra Profile per avere informazioni su come la vostra applicazione viene eseguita. La finestra Profile è uno strumento potente per analizzare come la vostra applicazione utilizza il tempo di esecuzione e la memoria. Con queste informazioni, potete individuare le aree del vostro VI che necessitano di ottimizzazione. In questa esercitazione esaminate il progetto appena completato utilizzando la finestra Profile. 1. Aprite il vostro progetto definitivo, denominato CD Application Exercise VI. Se non avete completato il progetto potete aprire la soluzione. 2. Prima di eseguire il vostro progetto definitivo, selezionate Tools»Advanced»Profile VIs per visualizzare la finestra Profile. La finestra Profile non sta ancora acquisendo dati. National Instruments Corporation 6-9 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni 3. Per raccogliere informazioni sui tempi del vostro progetto definitivo, contrassegnate il riquadro Timing Statistics e cliccate sul pulsante Start. Ora state raccogliendo informazioni sui tempi dei VI in memoria. LabVIEW Corso Base II 6-10 National Instruments Corporation Lezione 6 Controllo delle prestazioni 4. Avviate il VI CD Application Exercise e lavorate come se foste un utente tipico. In un qualsiasi momento potete tornare alla finestra Profile per fotografare i tempi. Effettuare uno Snapshot non influenza le statistiche temporali finali. 5. Quando avete finito di lavorare con il vostro progetto, tornate alla finestra Profile e cliccate nuovamente sul pulsante Snapshot. Potete ordinare ogni colonna di dati cliccando sull’intestazione di colonna. Potete anche scegliere di visualizzare le statistiche temporali in secondi, millisecondi o microsecondi. Cliccando due volte sui VI elencati nella finestra Profile, potete visualizzare le statistiche dei VI che lo compongono. Ciò vi consente di esaminare i subVI per vedere il tempo impiegato. Potete visualizzare il pannello frontale dei singoli VI cliccando con il tasto destro del mouse sui VI elencati nella finestra Profile. Ordinate la colonna Total Time e osservate dove il VI CD Application Exercise impiega la maggior parte del suo tempo. Notate come quei VI corrispondono ai VI che richiedono interazione con l’utente. L’attesa di un ingresso dell’utente è spesso la parte dell’esecuzione che richiede più tempo. Nella finestra Profile potete catturare statistiche temporali e informazioni sull’uso della memoria da parte dei VI. Per avere informazioni sull’uso della memoria, contrassegnate il riquadro Profile Memory Usage. La raccolta di informazioni sull’uso della memoria da parte dei VI richiede sovrapposizioni che possono alterare le statistiche temporali. Nota National Instruments Corporation 6-11 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni 6. Raccogliete statistiche sull’uso della memoria da parte del VI CD Application Exercise. Dove viene utilizzata la memoria e perché? Osservate quali VI frazionano la memoria, e quali VI utilizzano molti blocchi. Perché questi VI utilizzano i blocchi? L’aver frazionato la memoria provoca l’esecuzione più lenta dei VI perché spostare i dati nella memoria è dispendioso. Fine dell’esercitazione 6-1 LabVIEW Corso Base II 6-12 National Instruments Corporation Lezione 6 Controllo delle prestazioni C. Velocizzare i VI LabVIEW compila i vostri VI e genera un codice che generalmente viene eseguito molto rapidamente. Tuttavia, quando si lavora su applicazioni critiche dal punto di vista temporale, dovete utilizzare particolari tecniche di programmazione per ottenere la migliore velocità di esecuzione possibile. Considerate le seguenti tre problematiche quando volete velocizzare i vostri VI: y Input/Output—file, controllo di strumenti, acquisizione dati e collegamento in rete y Visualizzazione di schermate—controlli e schermate efficienti y Gestione della memoria—uso efficiente di matrici, stringhe e strutture di dati Altri fattori, come il tempo di esecuzione e quello di chiamata di subVI, di solito hanno effetti minimi sulla velocità di esecuzione. Input/Output Chiamate di Input/Output (I/O) generalmente richiedono più tempo di un’operazione computazionale. Per esempio, una semplice operazione di lettura su una porta seriale può richiedere diversi millisecondi. Questo dispendio è presente non solo in LabVIEW, ma anche in altre applicazioni. Il motivo di ciò è che una chiamata di I/O comprende il trasferimento di informazioni attraverso diversi livelli di un sistema operativo. Il metodo migliore per ridurre questo dispendio di risorse in I/O è di minimizzare il numero di chiamate di I/O nella vostra applicazione. Strutturate la vostra applicazione in maniera tale da trasferire grandi quantità di dati ad ogni chiamata, invece di effettuare parecchie chiamate che trasferiscono piccole quantità di dati. Per esempio, considerate la creazione di un’applicazione di acquisizione dati (DAQ) che acquisisca 100 punti di dati. Per un’esecuzione più rapida, utilizzate una funzione di trasferimento dati di più punti come il VI AI Acquire Waveform, invece di utilizzare una funzione di trasferimento di un punto singolo come il VI AI Sample Channel. Per acquisire 100 punti, utilizzate VI AI Acquire Waveform con un ingresso che specifica che volete 100 punti. Ciò è più veloce che utilizzare il VI AI Sample Channel in un ciclo con una funzione di attesa per stabilire la temporizzazione. National Instruments Corporation 6-13 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Trasferimento dati di singoli punti (Metodo più lento) Trasferimento dati di più punti (Metodo più veloce) Nell’esempio precedente, il dispendio di risorse del VI Acquire Waveform è grosso modo lo stesso di una singola chiamata al VI AI Sample Channel, anche se sta trasferendo molti più dati. Inoltre, i dati vengono raccolti dal VI Acquire Waveform utilizzando temporizzatori hardware per controllare il campionamento. Chiamando il VI AI Sample Channel in un ciclo non consente una raccolta di dati ad una velocità di campionamento costante. Schermate L’aggiornamento dei controlli su un pannello frontale è un altro compito dispendioso dal punto di vista temporale in un’applicazione. Mentre il multithread aiuta a ridurre l’effetto che gli aggiornamenti del display hanno sul tempo di esecuzione complessivo, display complicati, come i grafici possono influenzare negativamente il tempo di esecuzione. Questo effetto può diventare significativo su piattaforme di LabVIEW che non supportano il mutlithreading. Sebbene molti indicatori non vengano ridisegnati quando ricevono dati che coincidono con i dati precedenti, i grafici vengono sempre ridisegnati. Per minimizzare questo spreco di risorse, mantenete semplici i display del pannello frontale e provate a ridurre il numero di oggetti del pannello frontale. Si aumenta l’efficienza dei grafici disabilitando l’autoscaling, i marcatori di scala e le griglie. Anche il progetto dei subVI può ridurre sprechi di visualizzazione. Se i subVI hanno pannelli frontali che rimangono chiusi durante l’esecuzione, nessuno dei controlli del pannello frontale può influenzare la velocità di esecuzione complessiva del VI. Come mostrato nello schema a blocchi seguente, potete ridurre gli sprechi di visualizzazione minimizzando il numero di volte che il vostro VI aggiorna il display. Disegnare i dati sullo schermo è un’operazione di I/O, simile all’acceso ad un file o ad uno strumento GPIB. Per esempio, potete aggiornare un grafico tipo waveform un punto alla volta, o diversi punti alla volta. Ottenete velocità di visualizzazione dei dati molto più alte se raccogliete i vostri dati su matrici, potendo così visualizzare diversi punti alla volta. In tal modo riducete la quantità di tempo richiesta dall’I/O per aggiornare l’indicatore. LabVIEW Corso Base II 6-14 National Instruments Corporation Lezione 6 Controllo delle prestazioni Aggiornamento singolo del grafico (Metodo più lento) Aggiornamento multiplo del grafico (Metodo più veloce) Altre problematiche Impegno risorse dei subVI Ogni chiamata ad un subVI richiede un certo dispendio di risorse. Questo dispendio è relativamente piccolo, dell’ordine delle decine di microsecondi, specialmente in confronto al tempo necessario per l’I/O e il display, che possono richiedere dai millisecondi alle decine di millisecondi. Tuttavia, se voi fate 10000 chiamate ad un subVI in un ciclo, l’impegno potrebbe influenzare in maniera significativa la vostra velocità di esecuzione. In questo caso, potreste considerare di includere il ciclo nel subVI. Un altro modo di minimizzare l’impegno di risorse dei subVI è di trasformare i vostri subVI in subroutine selezionando Execution dal menu a tendina superiore nella finestra di dialogo File»VI Properties. Tuttavia ci sono degli inconvenienti. Le subroutine non possono visualizzare i dati del pannello frontale, chiamare funzioni di temporizzazione o di finestre di dialogo o andare in multitask con altri VI. Le subroutine sono generalmente più adatte per VI che non richiedono interazione con l’utente e costituiscono piccoli compiti eseguiti frequentemente. Calcoli superflui nei cicli Evitate l’inserimento di calcoli nei cicli se il calcolo produce lo stesso valore per ogni iterazione. Spostate il calcolo all’esterno del ciclo e passate il risultato all’interno del ciclo. Per esempio considerate i due schemi a blocchi seguenti. Il risultato della divisione è lo stesso in ogni iterazione del ciclo, quindi potete migliorare le prestazioni spostando la divisione all’esterno del ciclo. Calcolo superfluo nel ciclo (Metodo più lento) National Instruments Corporation 6-15 Solo calcoli necessari nel ciclo (Metodo più veloce) LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Inoltre evitate di accedere a variabili locali e globali nei cicli quando non è necessario. Per esempio, lo schema a blocchi seguente spreca tempo leggendo dalla variabile globale e scrivendoci sopra durante ogni iterazione del ciclo. Se sapete che la variabile globale non viene letta o scritta da un altro schema a blocchi durante il ciclo, considerate l’utilizzo di registri di scorrimento per memorizzare dati, come mostrato nel secondo schema a blocchi. Accessi frequenti alla variabile globale (Metodo più lento) Accessi minimizzati alla variabile globale (Metodo più veloce) Notate che avete bisogno dei registri a scorrimento per passare un nuovo valore dal subVI all’iterazione successiva del ciclo. Gli utenti principianti di LabVIEW spesso omettono questi registri a scorrimento. Senza un registro a scorrimento, i risultati del subVI non vengono passati indietro al subVI come nuovo valore di ingresso, come mostrato nello schema a blocchi seguente. Nello schema a blocchi precedente, la variabile globale viene letta una volta prima dell’inizio del ciclo e lo stesso valore viene passato alla funzione 10000 volte. Il risultato del ciclo è lo stesso di quello che avreste ottenuto scrivendo il codice come nello schema a blocchi seguente. LabVIEW Corso Base II 6-16 National Instruments Corporation Lezione 6 Controllo delle prestazioni Schemi in parallelo Quando diversi cicli vengono eseguiti in parallelo sullo schema a blocchi, LabVIEW elabora i cicli alternativamente. Se alcuni di questi cicli sono meno importanti di altri, dovreste utilizzare la funzione Wait (ms) per garantire che i cicli meno importanti utilizzino meno tempo. Considerate per esempio lo schema a blocchi seguente. I due cicli vengono eseguiti in parallelo. Uno dei cicli acquisisce i dati e deve essere eseguito il più frequentemente possibile. L’altro ciclo monitora l’ingresso dell’utente. In tal modo entrambi i cicli prendono lo stesso tempo. Il ciclo che monitora l’utente può essere eseguito diverse centinaia di volte al secondo. In realtà questo ciclo avrebbe bisogno di essere eseguito solo alcune volte al secondo, perché l’utente non può effettuare cambiamenti sull’interfaccia molto rapidamente. Come mostrato nello schema a blocchi seguente, potete richiamare la funzione Wait (ms) nel ciclo dell’interfaccia utente per lasciare molto più tempo di esecuzione all’altro. National Instruments Corporation 6-17 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Esercitazione 6-2 VI Charting Benchmark Example Obiettivo: Osservare le velocità relative di un grafico a punti singoli e a punti multipli utilizzando la finestra Profile e gli effetti del multithreading su sistemi che supportano questa caratteristica. Quando aprite il VI Charting Benchmark Example, due altri pannelli frontali di subVI vengono aperti. Questi due subVI rappresentano gli stessi dati in condizioni differenti. Pannelli frontali 1. Se state eseguendo LabVIEW su un sistema operativo che supporta il multithreading (Windows, Solaris2, o Concurrent PowerMAX), completate i passi da a a c. Se siete su un sistema che non supporta il multithread, andate al passo 2. a. Configurate LabVIEW in maniera tale che non utilizzi il multithreading quando esegue i VI. Selezionate Tools»Options per visualizzare la finestra di dialogo Options. b. Dal menu a tendina superiore della finestra di dialogo Options selezionate Performance and Disk. Nella sezione Performance and Disk, rimuovete il contrassegno dal riquadro Run with multiple threads. Cliccate su OK. c. Uscite e riavviate LabVIEW affinché siano attivi gli aggiornamenti nelle preferenze. LabVIEW ora è configurato per eseguire VI in un singolo thread, utilizzando il multitasking cooperativo. LabVIEW Corso Base II 6-18 National Instruments Corporation Lezione 6 Controllo delle prestazioni 2. Chiudete tutti gli altri VI che potrebbero essere aperti. 3. Aprite il VI Charting Benchmark Example. Il VI è già realizzato. Quando lo aprite, si aprono anche altri due VI. Il VI Charting Benchmark Example genera una matrice di 1000 numeri casuali. Quando cliccate sul pulsante Run SubVIs, i due subVI vanno in esecuzione. Il subVI Update Chart 1 Point at a Time aggiorna il grafico 1000 volte. Il secondo subVI Update Chart 50 Points at a Time aggiorna il grafico 20 volte, visualizzando 50 punti alla volta. Selezionate Tools»Advanced»Profile VIs. 4. Spostate la finestra affinché non si sovrapponga agli altri pannelli frontali. 5. Cliccate sul pulsante Start nella finestra Profile. Vedete nella tabella le statistiche VI Time, SubVIs Time e Total Time. 6. Avviate il VI Charting Benchmark Example. Il VI non fa niente finché non cliccate sul pulsante Run SubVIs. Avviate i subVI almeno tre o quattro volte. Quindi cliccate sul pulsante Quit per arrestare il VI Charting Benchmark Example. 7. Dopo aver avviato i subVI diverse volte, cliccate sul pulsante Snapshot nella finestra Profile. Individuate il VI Charting Benchmark Example nella finestra Profile e cliccate due volte su di esso per visualizzare i due subVI. Ricordate che sono tempi cumulati, non le quantità di tempo necessarie per eseguire i sub VI una volta. Notate che l’aggiornamento del grafico un punto alla volta è il metodo più lento e che l’aggiornamento del grafico con diversi punti alla volta è il metodo più rapido. National Instruments Corporation 6-19 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni 8. Selezionate l’opzione Timing Statistics per visualizzare il tempo di esecuzione medio per i subVI. Quindi selezionate l’opzione Timing Details ed esaminate le statistiche Display e Draw. Notate che il tempo di Display è superiore per il subVI Update Chart 1 Point at a Time ed è molto basso per il subVI Update Chart 50 Points at a Time. Registrate il tempo di esecuzione medio nella tabella seguente. Fate riferimento a LabVIEW Help o a LabVIEW User Manual per ulteriori informazioni sulle statistiche. 9. Cliccate sul pulsante Stop nella finestra Profile per arrestare la sessioni sui profili. Quindi chiudete la finestra Profile. 10. Chiudete tutti i VI aperti e non salvate i cambiamenti. 11. Se state eseguendo LabVIEW su un sistema operativo con multithreading, contrassegnate il riquadro Run with multiple threads nella pagina Performance and Disk di Tools»Options e riavviate LabVIEW. Ripetete i passi da 3 a 10, notando nella tabella quanto più veloce vengano eseguiti i VI quando il display è in esecuzione nel suo sottosistema di esecuzione. Tabella 6-1. Tempi di esecuzione Tempo di esecuzione medio Multithreading off Multithreading on Più veloce in % VI Charting % Benchmark Example VI Update Chart 1 % Point at a Time VI Update Chart 50 % Points at a Time Fine dell’esercitazione 6-2 LabVIEW Corso Base II 6-20 National Instruments Corporation Lezione 6 Controllo delle prestazioni Esercitazione 6-3 Obiettivo: VI Dialog & SubVI Demo Osservare come una struttura a flusso di dati possa influenzare la velocità di esecuzione. Caricate ed avviate un VI che rappresenti un pattern di forme d’onda. Notate come il flusso di dati influenza l’esecuzione del VI. Pannello frontale 1. Se state eseguendo LabVIEW su un sistema operativo che supporta il multithread (Windows, Solaris2, o Concurrent PowerMAX), completate i passi da a a c. Se siete su un sistema che non supporta il multithreading, andate al passo 2. a. Configurate LabVIEW in maniera tale che non utilizzi il multithreading quando esegue i VI. Selezionate Tools»Options per visualizzare la finestra di dialogo Options. b. Dal menu a tendina superiore della finestra di dialogo Options selezionate Performance and Disk. Nella sezione Performance and Disk, rimuovete il contrassegno dal riquadro Run with multiple threads. Cliccate su OK. c. Uscite e riavviate LabVIEW affinché siano attivi gli aggiornamenti nelle preferenze. LabVIEW ora è configurato per eseguire VI in un singolo thread, utilizzando il multitasking cooperativo. 2. Aprite il VI Dialog & SubVI Demo. Il VI è già realizzato. Il pannello frontale contiene un grafico tipo strip e diversi pulsanti opzione. Questo grafico mostra due tipi di dati, la media continua di una temperatura simulata e una traccia rossa che mostra quanto rapidamente queste medie vengono calcolate. National Instruments Corporation 6-21 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni 3. Aprite lo schema a blocchi ed esaminatelo. Due cicli While vengono eseguiti in parallelo. Un ciclo gestisce la raccolta dei dati e l’analisi mentre l’altro gestisce l’interfaccia utente. 4. Avviate il VI. Osservate la velocità di rappresentazione e le medie al secondo da calcolare. Notate che il valore Average/Sec è periodico e si abbassa molto. Lo schema a blocchi contiene due cicli While eseguiti in parallelo. Il Plot Loop (superiore) è quello che genera la media della temperatura e il numero di medie al secondo. Il degrado delle prestazioni avviene quando il Menu Loop viene eseguito e verifica i valori dei pulsanti sul pannello frontale. Le prestazioni migliorano quando viene eseguito il Plot Loop. 5. Cliccate sul pulsante Show Dialog. Notate l’effetto sulla velocità di rappresentazione e sul valore Averages/Sec. Ricordate che un ciclo non può iniziare l’iterazione successiva finché l’intero schema a blocchi all’interno non ha completato l’esecuzione. Nel Menu Loop, vengono letti i valori dai pulsanti per determinare quale condizione dev’essere eseguita. Se cliccate sul pulsante Show Dialog, viene eseguita la condizione 0. La condizione non ha completato l’esecuzione se non cliccate sul pulsante OK nella finestra di dialogo. Perciò, mentre la finestra di dialogo viene visualizzata, il Plot Loop non deve condividere il processore con il Menu Loop. LabVIEW Corso Base II 6-22 National Instruments Corporation Lezione 6 Controllo delle prestazioni 6. Cliccate sul pulsante Pop-Up VI. Il VI Pop-up 2nd Process apre il proprio pannello frontale e va in esecuzione. Notate l’effetto sul primo valore Average/Sec del VI. Come nella situazione in cui avete cliccate sul pulsante Show Dialog, il Menu Loop non viene più eseguito finché non ha completato il VI Pop-up 2nd Process. Tuttavia LabVIEW avvia il secondo VI nello stesso istante del VI originario. Il degrado nelle prestazioni avviene quando viene avviato il secondo VI. Perciò LabVIEW esegue più VI nello stesso modo in cui esegue cicli in parallelo—ogni processo occupa lo stesso tempo. 7. Cliccate sul pulsante Stop. 8. Modificate il Menu Loop affinché includa una funzione Wait (ms). Collegate un valore costante di 300 all’ingresso della funzione. Notate come cambia la velocità del Plot Loop. 9. Chiudete il VI e non salvate le modifiche. 10. Se state eseguendo LabVIEW su un sistema operativo con multithreading, contrassegnate il riquadro Run with multiple threads nella pagina Performance and Disk di Tools»Options e riavviate LabVIEW. Ripetete i passi da 2 a 9, notando come il multithreading influenza la velocità di esecuzione del VI Dialog & SubVI Demo. Se volete ottenere ulteriori risultati, spostate la finestra con il cursore mentre il VI Dialog & SubVI Demo è in esecuzione. Questo aumenta il carico di lavoro del processore creando risultati evidenti. Fine dell’esercitazione 6-3 National Instruments Corporation 6-23 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Esercitazione 6-4 Obiettivo: VI Computation & Global Benchmark Osservare gli effetti di calcoli superflui e di attività con variabili globali sulla velocità di esecuzione dei VI. Usate la finestra Profile per confrontare le prestazioni di VI che eseguono gli stessi compiti utilizzando differenti tecniche di programmazione. Pannello frontale 1. Chiudete tutti i VI eventualmente aperti. 2. Aprite il VI Computation & Global Benchmark. Il VI è già realizzato. 3. Selezionate Tools»Advanced»Profile VIs. Cliccate sul pulsante Start nella finestra Profile. Non raccogliete statistiche. 4. Avviate il VI Computation & Global Benchmark. Cliccate sul pulsante Run SubVIs per avviare i seguenti quattro subVI. Avviate i subVI almeno tre o quattro volte. LabVIEW Corso Base II 6-24 National Instruments Corporation Lezione 6 Controllo delle prestazioni 5. Dopo aver avviato i subVI diverse volte, arrestate il VI e cliccate sul pulsante Snapshot nella finestra Profile. Individuate il VI Computation & Global Benchmark nella finestra Profile e cliccateci sopra due volte per visualizzare i suoi subVI se non sono già visualizzati. Osservate il tempo impiegato da ogni subVI. In particolare, confrontate il tempo impiegato eseguendo il VI Update Globals Inside Loop rispetto al VI Globals Outside of Loop e il tempo impiegato eseguendo il VI Unnecessary Loop Computations rispetto al VI Unnecessary Computations Removed. Vi aspettavate questo comportamento? Come potreste applicare quello che avete imparato in questa esercitazione al vostro modo di programmare? 6. Cliccate sul pulsante Stop nella finestra Profile per arrestare la sessione profili. Quindi chiudete la finestra Profile. 7. Chiudete il VI. Non salvate i cambiamenti. Fine dell’esercitazione 6-4 National Instruments Corporation 6-25 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni D. Memoria di sistema LabVIEW gestisce in maniera trasparente molti dettagli con cui normalmente avete a che fare nei linguaggi di programmazione testuali. Una delle principali sfide della programmazione con un linguaggio testuale è l’uso di memoria. In un linguaggio di programmazione testuale, dovete allocare memoria prima di usarla e disallocarla quando avete finito. Dovete anche prestare particolare attenzione a non scrivere accidentalmente oltre la memoria che avete allocato. Gli errori principali che si commettono nei linguaggi di programmazione testuali riguardano l’allocazione della memoria. La programmazione a flusso di dati di LabVIEW rimuove molte delle difficoltà riguardanti la gestione della memoria. In LabVIEW non allocate variabili, assegnandole dei valori o leggendo dei valori da esse. Invece create uno schema a blocchi con collegamenti grafici che rappresentano il percorso dei dati. Le funzioni che generano dati allocano l’immagazzinamento di quei dati. Quando i dati non sono più necessari, LabVIEW disalloca la memoria relativa. Quando dovete aggiungere una nuova informazione ad una matrice o ad una stringa, LabVIEW alloca la memoria necessaria. Questa gestione automatica della memoria è uno dei principali vantaggi di LabVIEW. Tuttavia, siccome è automatica, ne avete un controllo inferiore. Dovete capire come LabVIEW alloca e disalloca la memoria affinché possiate progettare applicazioni con esigenze di memoria inferiori. Inoltre, una comprensione su come minimizzare l’uso della memoria può aiutarvi ad aumentare la velocità di esecuzione, siccome l’allocazione di memoria e la copia di dati può prendere una considerevole quantità di tempo. La memoria in LabVIEW Windows, Sun e HP-UX—LabVIEW alloca la memoria in maniera dinamica, prendendo quanto necessario. Questo processo è trasparente per l’utente. Macintosh— LabVIEW alloca un singolo blocco di memoria all’avvio, al di fuori del quale vengono eseguite tutte le allocazioni successive. Quando caricate un VI, i suoi componenti vengono caricati in questo blocco di memoria. Inoltre, quando avviate un VI, tutta la memoria che utilizza viene allocata da questo blocco. Su Macintosh configurate la quantità di memoria che LabVIEW alloca all’avvio selezionando l’opzione Get Info dal menu File nel Finder. Notate che se LabVIEW va oltre questa memoria, non può incrementare queste dimensioni. Perciò dovete impostare questo parametro il più grande possibile. Assicuratevi di lasciare abbastanza memoria per qualsiasi altra applicazione vogliate eseguire contemporaneamente con LabVIEW. LabVIEW Corso Base II 6-26 National Instruments Corporation Lezione 6 Controllo delle prestazioni Memoria virtuale Quando utilizzate Windows o Macintosh, potete utilizzare la memoria virtuale per aumentare la memoria disponibile per le vostre applicazioni. La memoria virtuale utilizza lo spazio disponibile su disco per accumulare RAM. Se allocate molta memoria virtuale, le applicazioni considerano questa memoria disponibile per l’immagazzinamento dati. Su Macintosh allocate memoria virtuale utilizzando il dispositivo Memory nella cartella Control Panel. Windows, Sun e HP-UX gestiscono automaticamente l’allocazione di memoria virtuale. LabVIEW non distingue tra RAM e memoria virtuale. Il sistema operativo nasconde il fatto che la memoria sia virtuale. Tuttavia, l’accesso ai dati memorizzati nella memoria virtuale è più lento di quello alla RAM fisica. Con la memoria virtuale, potete osservare occasionalmente prestazioni più lente perché i dati vengono scambiati con l’hard disk dal sistema operativo. La memoria virtuale può aiutare le applicazioni più grandi, ma probabilmente non è adatta ad applicazioni che hanno vincoli di tempo stringenti. Componenti dei Vi I VI hanno i seguenti componenti principali: y Pannello frontale y Schema a blocchi y Codice—schema a blocchi compilato in codice macchina y Dati—valori di controlli e indicatori, dati di default, costanti dello schema a bocchi e così via. Quando caricate un VI, LabVIEW carica in memoria il pannello frontale, il codice, se coincide con la piattaforma, e i dati del VI. Se il VI deve essere ricompilato a causa di un cambiamento di piattaforma o di un’interfaccia di un subVI, LabVIEW carica in memoria anche lo schema a blocchi. LabVIEW carica in memoria anche il codice e lo spazio dati dei subVI. In alcuni casi, LabVIEW carica in memoria anche il pannello frontale di alcuni subVI. Per esempio, se il subVI utilizza i Property Nodes, LabVIEW deve caricare il pannello frontale perché i Property Nodes operano sulle caratteristiche dei controlli del pannello frontale. Come mostrato nell’esempio seguente, potete risparmiare memoria convertendo in subVI alcuni dei componenti dei VI. Se create un unico, grande VI senza subVI, il pannello frontale, il codice e i dati di quel VI ad alto livello finiscono in memoria. In taluni casi potreste realmente vedere abbassarsi l’uso della memoria run-time. National Instruments Corporation 6-27 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Pannello Schema a frontale blocchi Codice Spazio dati VI a livello superiore Pannello Schema a frontale blocchi Codice Spazio dati subVI Pannello Schema a frontale blocchi Codice Spazio dati subVI Sempre residente Residente quando necessario LabVIEW Corso Base II 6-28 National Instruments Corporation Lezione 6 Controllo delle prestazioni E. Ottimizzazione dell’uso della memoria da parte dei VI Questa sezione descrive alcuni aspetti specifici riguardanti l’utilizzo più efficiente della memoria da parte dei VI. Discuteremo come monitorare e migliorare l’utilizzo della memoria e suggeriremo dei modi per assemblare e processare in modo efficiente matrici e strutture di dati. Come monitorare l’uso della memoria Come mostrato nell’esempio seguente, selezionate Memory Usage dal menu a tendina superiore nella finestra di dialogo File»VI Properties per avere un’analisi dell’utilizzo della memoria per un particolare VI. La colonna di sinistra sintetizza l’uso del disco e quella di destra indica quanta RAM viene usata per i vari componenti del VI. Osservate che le informazioni non comprendono l’utilizzo di memoria dei subVI. Potete anche utilizzare la finestra Profile per monitorare la memoria utilizzata da tutti i VI in memoria. Nota Quando monitorate l’utilizzo di memoria di un VI, assicuratevi di salvare il VI prima di esaminare i suoi requisiti relativi alla memoria. La caratteristica Undo di LabVIEW esegue delle copie temporanee degli oggetti e dei dati, che possono aumentare la memoria necessaria indicata per un VI. Salvando il VI si liberano le copie generate da Undo, generando dei rapporti accurati sulla memoria. National Instruments Corporation 6-29 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Regole generali per un uso migliore della memoria Adottate le regole seguenti per creare VI che utilizzino la memoria in maniera efficiente. y Spezzare un VI in subVI solitamente migliora l’utilizzo della memoria perché LabVIEW può recuperare la memoria dati dei subVI quando i subVI non sono in esecuzione. y Non eccedete nell’uso di variabili globali e locali per memorizzare matrici o stringhe; la lettura di una variabile globale o locale genera una copia dei dati memorizzati nella variabile. y All’apertura dei pannelli frontali, visualizzate grandi matrici e stringhe solo se necessario. Gli indicatori sui pannelli frontali mantengono una copia dei dati che visualizzano. y Se il pannello frontale di un subVI non sarà visualizzato, non lasciate inutilizzati i Property Nodes sul subVI. I Property Nodes provocheranno la giacenza in memoria del pannello frontale del subVI, incrementando l’utilizzo di memoria. y Non utilizzate l’opzione Suspend Data Range con VI critici dal punto di vista tempi e memoria. Il pannello frontale dei subVI dev’essere caricato per verifiche sull’intervallo e vengono eseguite copie extra dei dati per i controlli e gli indicatori dei subVI. y Quando progettate schemi a blocchi, osservate i luoghi in cui le dimensioni di un ingresso sono differenti da quelle di un’uscita. Per esempio, se aumentate frequentemente le dimensioni di una matrice o di una stringa utilizzando la funzione Build Array o Concatenate Strings, generate copie dei dati, aumentando il numero di allocazioni di memoria che LabVIEW deve effettuare. Queste operazioni possono frazionare la memoria. y Utilizzate tipi di dati consistenti per le matrici ed osservate i punti di forzatura quando vengono passati i dati a subVI e a funzioni. Quando LabVIEW cambia il tipo di dati, l’uscita è un nuovo buffer. y Non utilizzate tipi di dati complicati, di tipo gerarchico, per esempio matrici di cluster contenenti grandi matrici o stringhe, o cluster contenenti grandi matrici o stringhe. La sezione Strutture di dati semplici rispetto a quelle complesse in questa lezione contiene ulteriori informazioni sulla progettazione di tipi di dati efficienti. Assemblaggio ed elaborazione di matrici Quando progettate lo schema a blocchi, ci sono diversi passi da seguire per rendere più efficiente l’utilizzo della memoria da parte dei vostri VI. Per esempio, potete assemblare ed elaborare matrici in modi che minimizzano la quantità di accesso in memoria necessaria. LabVIEW Corso Base II 6-30 National Instruments Corporation Lezione 6 Controllo delle prestazioni LabVIEW memorizza matrici di numeri in blocchi contigui di memoria. Se utilizzate cicli For per assemblare queste matrici, LabVIEW può determinare la quantità di memoria necessaria ed allocare lo spazio necessario a monte della prima iterazione. Tuttavia, se utilizzate cicli While, LabVIEW non può predeterminare i requisiti di spazio di cui avete bisogno. LabVIEW potrebbe aver bisogno di riallocare l’intero buffer, forse parecchie volte, quando la matrice cresce. Il tempo necessario a questa operazione aumenta con le dimensioni della matrice. Perciò, quando possibile, dovreste utilizzare cicli For per assemblare matrici piuttosto che cicli While o concatenare matrici con la funzione Build Array. Inplaceness Quando possibile, il compilatore di LabVIEW riutilizza i buffer d’ingresso di una funzione per memorizzare la sua uscita. Questa condivisione di buffer viene chiamata inplaceness. Nell’esempio seguente, la funzione Multiply utilizza lo stesso buffer come ingresso superiore. La matrice sulla destra si dice che è stata inserita nella matrice A. National Instruments Corporation 6-31 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Un’uscita di una funzione riutilizza un buffer d’ingresso se l’uscita e l’ingresso hanno lo stesso tipo di dati, di rappresentazione e, nelle matrici, nelle stringhe e nei cluster, la stessa struttura e numero di elementi. Funzioni in grado di implementare l’inplaceness sono le funzioni trigonometriche e logaritmiche, la maggior parte delle funzioni numeriche e alcune funzioni su stringhe e matrici come To Upper Case e Replace Array Element. Una funzione che fa scorrere o sposta elementi di una matrice, come la Replace Array Element, può riutilizzare i buffer. Alcune funzioni come Array Subset e String Subset potrebbero non copiare dati ma potrebbero passare puntatori a sottomatrici o sottostringhe. Nell’illustrazione seguente A, B, C e D identificano buffer singoli. Build Array e Concatenate Strings sono funzioni speciali. Esse operano con l’inplaceness quando possono ma talvolta devono allocare nuovi buffer. LabVIEW Corso Base II 6-32 National Instruments Corporation Lezione 6 Controllo delle prestazioni Funzioni che riutilizzano i buffer Funzioni che possono allocare nuovi buffer Funzioni che allocano nuovi buffer Forzatura e tipi di dati consistenti Considerate la funzione Random Number (0-1), utilizzata spesso negli esempi mostrati nel corso. Questa funzione produce dati in doppia precisione e a virgola mobile (DBL). Quindi vengono create sulla cornice dei cicli For matrici DBL. Per risparmiare memoria potreste considerare l’utilizzo di matrici in singola precisione a virgola mobile (SGL) al posto delle matrici DBL. Dei tre metodi seguenti per creare matrici SGL, uno è corretto e gli altri due sbagliati. Ricordate che ogni valore DBL richiede 8 byte di memoria, mentre ogni valore SGL richiede 4 byte di memoria. National Instruments Corporation 6-33 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Metodo 1 (sbagliato) Il metodo 1 potrebbe essere il vostro primo tentativo di risparmiare spazio dati in memoria. Potreste pensare che portare su SGL la rappresentazione della matrice sul pannello frontale (FP) possa far risparmiare spazio in memoria. Tuttavia questo metodo non influisce sulla quantità di memoria necessaria al VI, perché la funzione crea un buffer separato per mantenere i dati convertiti. Il punto di forzatura sul terminale della matrice SGL indica che la funzione ha creato un buffer separato per mantenere i dati convertiti. LabVIEW Corso Base II 6-34 National Instruments Corporation Lezione 6 Controllo delle prestazioni Metodo 2 (sbagliato) Il metodo 2 è un tentativo di rimuovere il punto di forzatura convertendo ogni matrice in SGL utilizzando la funzione To Single Precision Float che si trova nella palette Functions»Numeric»Conversion. Tuttavia anche questo metodo incrementa le dimensioni dello spazio dati, perché la funzione crea due nuovi buffer, Ce D, per mantenere le nuove matrici SGL. National Instruments Corporation 6-35 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Metodo 3 (corretto) Il metodo 3 riduce considerevolmente le dimensioni dello spazio dati, da 24.3 kB a 12.6 kB. Questo metodo converte in SGL l’uscita della funzione Random Number (0-1) prima che venga creata la matrice; quindi questo metodo crea due matrici SGL sulla cornice del ciclo For piuttosto che due matrici DBL. LabVIEW Corso Base II 6-36 National Instruments Corporation Lezione 6 Controllo delle prestazioni Strutture di dati semplici rispetto a quelle complesse I tipi di dati semplici, che comprendono stringhe, numeri, booleani, cluster di numeri o di booleani e le matrici di numeri o di booleani, hanno dei riferimenti in memoria. Per altri dati, noti come nidificati, o dati complessi, è più difficile creare riferimenti. Esempi di dati nidificati comprendono matrici di stringhe, cluster contenenti matrici di cluster e matrici di cluster contenenti matrici. Matrice di cluster contenente matrici Cluster di matrici contenenti un cluster Dati semplici Dati complessi Per prestazioni migliori, evitate di creare strutture di dati complicate. Le prestazioni possono risentirne perché è difficile accedere e manipolare elementi interni senza generare copie di dati. Quindi, mantenete le vostre strutture di dati le più semplici possibile. Strutture di dati semplici possono generalmente essere manipolate con facilità ed in maniera efficiente. Considerate un’applicazione in cui volete registrare i risultati di diverse prove. Nei risultati volete una stringa che descriva la prova e una matrice con i risultati della prova. Un tipo di dati che potreste utilizzare per memorizzare queste informazioni è una matrice di cluster contenenti una stringa descrittiva e una matrice con i dati della prova, come mostrato nel pannello frontale seguente. National Instruments Corporation 6-37 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Ora pensate a che cosa vi serve per effettuare cambiamenti ad un elemento nella matrice Test Data. Innanzitutto dovete indicizzare un elemento della matrice complessiva Tests. Per quell’elemento, che è un cluster, dovete separare gli elementi per accedere alla matrice. Quindi sostituite un elemento della matrice e memorizzate la matrice risultante nel cluster. Infine memorizzate il cluster risultante nella matrice originaria. Un esempio di questo è mostrato nell’illustrazione seguente. Copiare dati è dispendioso in termini di memoria e di prestazioni. La soluzione è di realizzare strutture di dati più semplici possibile. In questo caso potreste memorizzare i dati in due matrici, come mostrato nello schema a blocchi seguente. La prima matrice è una matrice di stringhe. La seconda matrice è bidimensionale, ed ogni riga è formata dai risultati di una prova. Nell’esempio seguente, il pannello frontale contiene nuovi controlli per memorizzare i dati e lo schema a blocchi effettua gli stessi cambiamenti ai dati della prova, come mostrato nello schema a blocchi precedente. LabVIEW Corso Base II 6-38 National Instruments Corporation Lezione 6 Controllo delle prestazioni National Instruments Corporation 6-39 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Esercitazione 6-5 VI Assembling Arrays Obiettivo: Osservare la velocità di costruzione di matrici utilizzando metodi diversi. Caricate ed avviate un VI che crei una matrice di numeri utilizzando diversi metodi. Utilizzando la finestra Profile, confrontate le prestazioni dei VI utilizzando cicli For, cicli While, l’autoindicizzazione e la funzione Build Array per creare matrici. Inoltre confrontate questi metodi con una tecnica che utilizza la funzione Replace Array Element su una matrice esistente. Pannello frontale 1. Chiudete tutti i VI eventualmente aperti. 2. Aprite il VI Assembling Arrays. 3. Per visualizzare la finestra Profile selezionate Tools»Advanced» Profile VIs. Selezionate l’opzione che visualizza le statistiche temporali. Cliccate sul pulsante Start nella finestra Profile per iniziare una sessione di profili. Non raccogliete statistiche sulla memoria. 4. Avviate il VI Assembling Arrays. Per verificare differenti metodi di costruzione di matrici, cliccate sul pulsante Test. L’indicatore Method mostra quale metodo è sotto osservazione. Il VI prova sei metodi diversi. 5. Dopo aver eseguito il test diverse volte, cliccate sul pulsante Snapshot nella finestra Profile. Ora descriveremo le sei diverse tecniche di costruzione di matrici e perché le prestazioni di questi VI differiscono. Utilizzando la finestra Profile, contrassegnate il riquadro Timing Statistics ed osservate i tempi di esecuzione medi mostrati. LabVIEW Corso Base II 6-40 National Instruments Corporation Lezione 6 Controllo delle prestazioni La funzione Initialize Array è leggermente più veloce di un ciclo For con autoindicizzazione. In entrambi i casi la dimensione della matrice è nota e LabVIEW può allocare la quantità corretta di memoria una sola volta. Ricordate che il ridimensionamento richiede più tempo di esecuzione. Perciò la funzione Initialize Array o il ciclo For con autoindicizzazione sono il metodo migliore per creare matrici. Un ciclo For viene eseguito un numero predeterminato di volte. Un ciclo While no, quindi LabVIEW non può predeterminare quanta memoria deve allocare se una matrice viene costruita all’interno di un ciclo While. Quando la matrice viene costruita in un ciclo While, esso si ridimensiona secondo le necessità. Ogni ridimensionamento richiede al sistema operativo l’allocazione di un nuovo buffer e quindi la copia del vecchio buffer nel nuovo buffer più grande. Più c’è bisogno di ridimensionamenti, maggiore è il tempo di esecuzione. Un ciclo For richiede meno ridimensionamenti, e quindi viene eseguito più rapidamente rispetto al ciclo While. Osservate questa differenza quando confrontate il tempo di esecuzione medio per il ciclo For utilizzando il VI Auto Indexing e il ciclo While utilizzando il VI Auto Indexing. Se potete predeterminare le dimensioni massime di una matrice da costruire, allora potete inizializzare questa matrice e passarla all’interno del ciclo While. Una volta all’interno del ciclo While, ogni elemento può essere aggiornato o sostituito se necessario. Questo è un metodo efficiente perché la matrice non ha bisogno di essere riallocata una volta che è stata passata all’interno del ciclo While. Questo non è ancora così efficiente come il ciclo For o la funzione Initialize Array. National Instruments Corporation 6-41 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Evitate di utilizzare la funzione Build Array all’interno di un ciclo. Ogni volta che un nuovo valore viene aggiunto alla matrice, LabVIEW deve riallocare il buffer e copiare l’intera matrice nella nuova locazione. Perciò i tempi di esecuzione della funzione Build Array sono più lenti. 6. Chiudete la finestra Profile. Chiudete il VI modifiche. e non salvate le Fine dell’esercitazione 6-5 LabVIEW Corso Base II 6-42 National Instruments Corporation Lezione 6 Controllo delle prestazioni Esercitazione 6-6 VI Performance Enhancements Obiettivo: Incrementare le prestazioni di un VI. Il VI Performance Enhancements è stato creato per svolgere i seguenti compiti. y Acquisire 1000 punti di un forma d’onda da un canale. y Salvare questi dati su disco. y Visualizzare lo spettro di potenza della forma d’onda acquisita. Il VI è scritto in modo scarno. Il VI consuma molta memoria, viene eseguito lentamente ed è poco documentato. Inoltre, il VI non fornisce i risultati desiderati per forme d’onde sopra i 60 Hz. In questo progetto dovete utilizzare le informazioni del capitolo precedente ed altre che avete appreso nel corso. 1. Chiudete tutti i VI eventualmente aperti. 2. Aprite il VI Performance Enhancements nella directory Exercises\LV Basics2. Visualizzate la finestra Profile selezionando Tools»Advanced»Profile VIs. Selezionate Timing Statistics nella finestra Profile. 3. Avviate il VI. Dopo che ha terminato, cliccate sul pulsante Snapshot nella finestra Profile per visualizzare le informazioni sull’esecuzione del VI. Osservate quante volte vengono richiamati i VI e tra quei VI che vengono chiamati più volte quelli più lenti. Osservate quali VI sono stati eseguiti molte volte e osservate quali VI richiedono probabilmente tempi di esecuzione più lunghi. 4. Selezionate File»VI Properties e quindi Memory Usage dal menu a tendina superiore. Un VI ben scritto per questa applicazione dovrebbe consumare un totale di circa 25 k di memoria. Osservate quanto consuma questo VI scritto in modo scarno. 5. Modificate il VI affinché questa applicazione: − Funzioni correttamente per forme d’onda a frequenza superiore. − Sia più veloce. − Utilizzi meglio le strutture di dati e sia più facile da comprendere. − Sia meglio documentata. Utilizzate i consigli dati in questa lezione, le informazioni di altri capitoli di questo corso e i seguenti consigli per partire: − Mettere i VI ad alto livello all’interno di cicli crea chiamate ridondanti a funzioni. − Raccogliere o visualizzare dati un punto alla volta è meno efficiente che acquisire più punti. National Instruments Corporation 6-43 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni − Tipi di dati lineari sono più efficienti in termini di uso della memoria rispetto a strutture complesse di dati. − Ci sono molti modi per documentare un VI. 6. Salvate il VI modificato. 7. Avviate il VI. Notate i miglioramenti nell’esecuzione e nell’utilizzo della memoria. Notate anche la maggiore leggibilità e semplicità del codice. Assicuratevi di salvare il VI prima di esaminare il suo utilizzo di memoria. Questo evita che la caratteristica Undo di LabVIEW allochi inutilmente memoria. Nota 8. Quando siete soddisfatti del vostro VI, salvatelo come Performance Improvements.vi. Fine dell’esercitazione 6-6 LabVIEW Corso Base II 6-44 National Instruments Corporation Lezione 6 Controllo delle prestazioni Esercitazione 6-7 VI Performance Challenge/ VI Maximized Performance Obiettivo: Incrementare le prestazioni di un VI. Il VI Performance Challenge svolge i seguenti compiti. 1. Genera quattro insiemi di dati. Ogni insieme è costituito da una matrice di 5000 punti e da una stringa contenente data e ora relativa a quando sono stati presi i dati. Ogni elemento ha bisogno di 2 sole cifre di precisione. 2. Salva tutti i dati acquisiti e i relativi riferimenti temporali su disco. Il file sarà usato solo nelle applicazioni in LabVIEW e quindi non necessita di alcun formato specifico. 3. Trova il valore massimo per ogni insieme di dati e visualizza 100 punti intorno al valore massimo del grafico. Il grafico finale dovrebbe contenere quattro tracce, una per ogni insieme di dati. Questo VI è scritto in maniera scarna. Viene eseguito lentamente e impegna più memoria del necessario. In questa esercitazione ottimizzate il VI per incrementare la velocità di esecuzione e diminuire l’impegno di memoria. 1. Chiudete tutti i VI eventualmente aperti. 2. Aprite il VI Performance Challenge. Visualizzate la finestra Profile selezionando Tools»Advanced»Profile VIs. Selezionate Timing Statistics e Timing Details nella finestra Profile, affinché posiate avere una migliore comprensione su quello che avviene mentre il VI è in esecuzione. 3. Avviate il VI. Dopo che ha terminato, cliccate sul pulsante Snapshot nella finestra Profile per visualizzare le informazioni sull’esecuzione del VI. Osservando queste informazioni, notate quanto tempo viene richiesto per l’aggiornamento delle variabili locali e anche quante volte questa applicazione richiama subVI di I/O su file. 4. Selezionate File»VI Properties e quindi Memory Usage dal menu a tendina superiore. Notate la considerevole quantità di memoria richiesta dai dati di questo VI. 5. Modificate il VI per incrementare la velocità di esecuzione e per ridurre la quantità di memoria richiesta. Utilizzate i consigli di questa lezione e le seguenti indicazioni per cominciare: y Le variabili locali aumentano l’impegno di memoria e rallentano la velocità di esecuzione, specialmente quando vi si accede all’interno di cicli. y Create le matrici in modo efficiente. y Minimizzate il numero di operazioni di I/O eseguite nell’ambito dell’applicazione. Aprite e chiudete un file solo se necessario. National Instruments Corporation 6-45 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni y Evitate calcoli inutili e conversioni di dati, specialmente all’interno di cicli. y Minimizzate e semplificate i display dei pannelli frontali. y Utilizzate strutture di dati semplici. Suggerimento Dovete solamente rispettare i requisiti dell’applicazione descritti precedentemente. Come implementare questa applicazione dipende da voi. 6. Salvate il VI modificato. 7. Avviate il VI, notando i miglioramenti sulla velocità nella finestra Profile e sull’impegno di memoria in VI Properties. Potreste anche ripetere i passi da 5 a 7 diverse volte, ottimizzando ulteriormente l’applicazione. Assicuratevi di salvare il VI prima di esaminare il suo utilizzo di memoria. Questo evita che la caratteristica Undo di LabVIEW allochi inutilmente memoria. Nota 8. Quando siete soddisfatti del vostro VI, salvatelo come Maximized Performance.vi. Fine dell’esercitazione 6-7 LabVIEW Corso Base II 6-46 National Instruments Corporation Lezione 6 Controllo delle prestazioni Sommario, trucchi e consigli In funzione del sistema operativo. LabVIEW utilizza il multithreading o il multitasking cooperativo per svolgere più compiti contemporaneamente. Con il multithreading, compiti differenti possono utilizzare differenti thread di esecuzione, mentre in un sistema con multitasking cooperativo, compiti diversi utilizzano lo stesso thread di esecuzione. Utilizzate la finestra Profile per valutare le prestazioni di un VI e per aiutarvi ad individuare i compiti che richiedono la maggior parte del tempo di esecuzione e di impegno di memoria. Potete quindi concentrarvi sul miglioramento di queste aree critiche per aumentare le prestazioni complessive del vostro VI. Utilizzate i seguenti consigli per velocizzare i vostri VI: y Riducete il numero di chiamate di I/O diminuendo il numero di dati da acquisire, o acquisendo più dati in poche chiamate. y Riducete il numero di controlli e indicatori che avete sul pannello frontale. y Evitate l’uso di autoscaling sui grafici. y Aggiornate i grafici con diversi punti alla volta, non un punto alla volta. y Forzate l’attesa di compiti meno importanti, utilizzando la funzione Wait (ms). In tal modo i compiti più importanti hanno più tempo macchina a disposizione. y Evitate calcoli inutili in strutture a cicli. Sebbene LabVIEW rimuova molte delle difficoltà relative alla gestione della memoria, potete avere meno controllo su altri processi. Ricordate che potete monitorare la memoria del vostro computer andando sulla pagina Memory Usage nella finestra di dialogo File»VI Properties e in Tools»Advanced»Profile VIs. L’uso della memoria virtuale possiede vantaggi e svantaggi. Essa può significativamente aumentare la RAM disponibile per LabVIEW e i vostri VI. Tuttavia, siccome la RAM si trova sull’hard disk, le prestazioni possono risentirne quando vi si accede. Spezzare grandi VI ad alto livello in diversi subVI più piccoli riduce la quantità di memoria consumata dalla vostra applicazione e può migliorare le prestazioni. Utilizzate i seguenti consigli per velocizzare i vostri VI: y Evitate di eccedere nell’uso di variabili locali e globali. y Evitate di visualizzare e di operare con grandi matrici e stringhe. National Instruments Corporation 6-47 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni LabVIEW Corso Base II y Utilizzate funzioni che riutilizzano i buffer dati. y Utilizzate tipi di dati consistenti. In altre parole, evitate i punti di forzatura. y Utilizzate strutture di dati le più semplici possibile. y Quando all’interno di cicli generate matrici la cui rappresentazione dev’essere cambiata, cambiate la rappresentazione all’interno del ciclo, non dopo. 6-48 National Instruments Corporation Lezione 6 Controllo delle prestazioni Note National Instruments Corporation 6-49 LabVIEW Corso Base II Lezione 6 Controllo delle prestazioni Note LabVIEW Corso Base II 6-50 National Instruments Corporation Appendice Questa appendice, contenente informazioni utili per gli utenti di LabVIEW, è composta dalle seguenti sezioni: A. SubVI polimorfici B. Grafica personalizzata in LabVIEW C. Il Web Server in LabVIEW D. Informazioni aggiuntive E. Tabella delle corrispondenze dei caratteri ASCII National Instruments Corporation A-1 LabVIEW Corso Base II Appendice A. SubVI polimorfici Le funzioni interne di LabVIEW possono gestire differenti tipi di dati per lo stesso terminale, una potenzialità chiamata polimorfismo. Un esempio di polimorfismo è la funzione ADD. E’ anche possibile creare i vostri VI polimorfici, che possono gestire più di un tipo di dato per lo stesso terminale. Questi VI polimorfici possono essere utilizzati come subVI polimorfici. L’uso di VI polimorfici vi consente di presentare all’utente un’interfaccia più semplice per i vostri VI. Considerate il caso di un VI polimorfico che possa ordinare sia matrici mono che bidimensionali. Invece di avere un VI per l’ordinamento di matrici monodimensionali e un altro subVI per l’ordinamento di matrici bidimensionali, un unico VI chiamato Sort Array gestisce entrambi i tipi di ingressi. Completate i passi seguenti per creare il vostro VI polimorfico. 1. Create un insieme di VI aventi lo stesso schema per il riquadro dei connettori, uno per differenti insiemi di tipi di dati. 2. Create un VI polimorfico selezionando File»New e quindi Polymorphic VI nella finestra di dialogo New. Compare la finestra di dialogo Polymorphic VI. LabVIEW Corso Base I A-2 National Instruments Corporation Appendice 3. Aggiungete ciascuno degli insiemi dei VI al VI polimorfico utilizzando il pulsante Add VI. 4. Potete creare un’icona per il VI polimorfico utilizzando il pulsante Edit Icon. Potete creare anche il context help per il VI polimorfico selezionando Documentation dal menu a tendina superiore nella finestra di dialogo File»VI Properties. Nota Context help per il VI polimorfico non è associato al context help dei VI che compongono il VI polimorfico. Perciò dovete creare un nuovo context help utilizzando la pagina Documentation nella finestra di dialogo File»VI Properties. Un VI polimorfico è una raccolta di subVI con lo stesso schema per il riquadro connettori. Ogni subVI costituisce un’istanza del VI polimorfico. Quando i dati sono collegati ad un subVI polimorfico, LabVIEW sceglie automaticamente quale istanza utilizzare in funzione dei tipi di dati collegati agli ingressi del subVI polimorfico. Se l’istanza non è disponibile, compare un file spezzato. Potete scavalcare la selezione automatica di LabVIEW cliccando con il tasto destro del mouse sul subVI polimorfico e selezionando un’istanza specifica dal menu a tendina di destra Select Type. National Instruments Corporation A-3 LabVIEW Corso Base II Appendice Esercitazione A-1 Ordinare matrici polimorfiche Obiettivo: Creare un VI polimorfico e utilizzarlo come subVI. Utilizzare VI polimorfici vi consente di presentare un’interfaccia molto più semplice agli utenti dei vostri VI. Considerate il caso di un VI polimorfico che possa ordinare sia matrici mono che bidimensionali. Due VI singoli possono svolgere questa funzione. Invece di avere un VI per l’ordinamento di matrici monodimensionali e un altro subVI per l’ordinamento di matrici bidimensionali, un VI chiamato Sort Array gestisce entrambi i tipi di ingressi. In questa esercitazione create questo VI. 1. Create un VI che ordini una matrice monodimensionale. Questo VI dovrebbe includere anche un’opzione per ordinare gli elementi in maniera ascendente o discendente e produrre un oggetto booleano di errore. L’esempio seguente è un possibile pannello frontale. Avete bisogno di creare il pannello frontale e lo schema a blocchi e di provare il codice che avete scritto. 2. Create un riquadro connettori utilizzando la configurazione seguente. Utilizzate lo stesso riquadro connettori per l’istanza Sort 2D Array. Altrimenti il VI polimorfico produce fili spezzati. Nota LabVIEW Corso Base I A-4 National Instruments Corporation Appendice 3. Salvate il vostro lavoro come Sort 1D Array+.vi. 4. La funzione Sort 2D Array è già realizzata. Tuttavia dovete completare il riquadro dei connettori. Questo esempio è stato scaricato da ni.com\support nel Example Programs Database. Aprite questo file da exercises\LV Basics2\Sort 2D Array.vi. 5. Create e collegate il riquadro dei connettori per il VI Sort 2D Array. Anche se il riquadro dei connettori è già costruito potreste aver bisogno di modificarlo per agevolare la differenziazione rispetto al programma Example. Non avete bisogno di collegare tutti i controlli e indicatori su questo pannello frontale. Ricordate la configurazione utilizzata per il VI Sort 1D Array. 6. Salvate questo nuovo VI come Sort 2D Array+.vi. Ora create il VI polimorfico, che è composto dall’istanza Sort 1D Array+ e dall’istanza Sort 2D Array+. 7. Per combinare le due istanze in un unico VI polimorfico, selezionate File»New e quindi Polymorphic VI. Se vi trovate nella finestra di benvenuto, selezionate Polymorphic VI dal menu a tendina New VI. National Instruments Corporation A-5 LabVIEW Corso Base II Appendice 8. Aggiungete i VI Sort 1D Array+ e Sort 2D Array+ utilizzando il pulsante Add VI. Potreste aver bisogno di andare nelle directory in cui avete salvato questi VI. 9. Create un’icona per questo nuovo VI polimorfico selezionando il pulsante Edit Icon. 10. Create il context help per questo VI selezionando Documentation dal menu a tendina superiore nella finestra di dialogo File»VI Properties. 11. Salvate il vostro VI come Sort Poly Array.vi. 12. Utilizzate questo VI come subVI in un altro VI per testare la funzionalità. Osservate la schermata dell’help. Notate anche cosa succede quando cliccate due volte sul VI polimorfico. Cosa succede se selezionate un particolare contesto cliccando con il tasto destro del mouse e selezionando Select Type? Fine dell’esercitazione A-1 LabVIEW Corso Base I A-6 National Instruments Corporation Appendice B. Grafica personalizzata in LabVIEW Ci sono diverse caratteristiche di LabVIEW disponibili per fornire ai pannelli frontali un aspetto personalizzato più professionale. Queste caratteristiche, fornite con LabVIEW full and professional development system, forniscono all’interfaccia utente una grafica personalizzata e possibilità di animazione. Decorazioni Uno dei metodi più semplici per migliorare l’interfaccia utente è di applicare le decorazioni di LabVIEW ad un pannello frontale così come avete fatto nella Lezione 2, Progettazione di pannelli frontali. Attraverso un uso attento delle decorazioni, potete aumentare la leggibilità dei pannelli frontali. Importazione di grafica Potete importare grafica da altri VI per utilizzarla come immagini di sfondo, come elementi nei controlli di tipo ring o parti di altri controlli. Tuttavia, prima che possiate utilizzare un’immagine in LabVIEW, dovete caricarla nella clipboard di LabVIEW. Ci sono uno o due modi per fare ciò, in funzione della vostra piattaforma. y Windows—Se copiate un’immagine direttamente da un programma di disegno nella Clipboard di Windows e quindi passate a LabVIEW, LabVIEW importa automaticamente l’immagine nella Clipboard di LabVIEW. Potete anche utilizzare l’opzione Import Picture from File del menu Edit di LabVIEW per importare un file grafico nella clipboard di LabVIEW. LabVIEW riconosce i file grafici nei seguenti formati: CLP, EMF, GIF, PCX, BMP, TARGA, TIFF, LZW,WFM e WPG. y Macintosh—Se copiate da un programma di disegno nella Clipboard e quindi passate a LabVIEW, LabVIEW importa automaticamente l’immagine nella Clipboard di LabVIEW. y UNIX—Potete utilizzare l’opzione Import Picture from File del menu Edit di UNIX per importare un’immagine di tipo X Window Dump (XWD), che potete creare utilizzando il comando xwd. Dopo che un’immagine è stata copiata nella Clipboard di LabVIEW, potete riportarla sul pannello frontale come immagine statica, oppure potete utilizzare l’opzione Import Picture di un menu rapido o le opzioni Import Picture nel Control Editor. Controlli personalizzati Potete personalizzare i controlli e gli indicatori in LabVIEW per modificare il loro aspetto sul pannello frontale. Potete anche salvare questi controlli per utilizzarli in altri VI. Da un punto di vista del programma, funzionano come i controlli standard di LabVIEW. National Instruments Corporation A-7 LabVIEW Corso Base II Appendice Control Editor Avviate il Control Editor selezionando un controllo sul pannello frontale e quindi Edit»Customize Control. Il Control Editor appare con l’oggetto selezionato del pannello frontale nella sua finestra. Il Control Editor presenta due modalità di funzionamento, edit mode e customize mode. Edit Mode In edit mode, potete cliccare con il tasto destro del mouse sul controllo e modificare le sue impostazioni come volete che appaiano nell’ambiente di programmazione di LabVIEW. Edit Mode Type Def. Status Testo Align Distribute Reorder Objects Objects Objects Customize Mode In customize mode, potete spostare singoli componenti del controllo l’uno rispetto all’altro. Per un elenco di ciò che potete modificare in customize mode, selezionate Window»Show Parts Window. Customize Type Def. Mode Status Testo Align Distribute Reorder Objects Objects Objects Un modo di personalizzare un controllo è di modificare type definition status. Potete salvare un controllo come controllo, come definizione di tipo, o come definizione di tipo stringente, in funzione della selezione mostrata nel ring Type Def. Status. L’opzione del controllo è la stessa che voi avreste selezionando un controllo dalla palette Controls. Potete modificarla in un qualsiasi modo ed ogni copia che realizzate e modificate mantiene le sue proprietà specifiche. Un controllo Type Definition è una copia principale di un controllo personalizzato. Tutte le copie di questo genere di controllo devono essere dello stesso tipo. Per esempio, se create un controllo personalizzato Type Definition con una rappresentazione numerica di tipo Long, non potete farne una copia e portare la sua rappresentazione su Unsigned Long. Utilizzate una Type Definition quando volete inserire un controllo con lo stesso tipo di dato in più posti. Se cambiate il tipo di dato di Type Definition nel Control Editor, il tipo di dato si aggiorna automaticamente in tutti i VI che utilizzano il controllo personalizzato. LabVIEW Corso Base I A-8 National Instruments Corporation Appendice Tuttavia, potete ancora personalizzare individualmente l’aspetto di ogni copia di controllo Type Definition. Un controllo Strict Type Definition dev’essere identico sotto tutti i punti di vista dovunque lo utilizziate. Oltre al tipo di dato, le sue dimensioni, i suoi colori e il suo aspetto devono essere gli stessi. Utilizzate un controllo Strict Type Definition quando volete avere oggetti completamente identici in più posti e volete modificarli tutti automaticamente. Potete ancora avere etichette singole per ogni istanza di un Strict Type Definition. Salvataggio dei controlli Dopo aver creato un controllo personalizzato, potete salvarlo per un utilizzo successivo. Di default i controlli salvati sul disco hanno un’estensione .ctl. Potete anche inserire controlli nella palette Controls utilizzando lo stesso metodo che avete usato per aggiungere subVI alla palette Functions. Potete anche utilizzare il Control Editor per salvare controlli con le proprie impostazioni di default. Per esempio, potete utilizzare il Control Editor per modificare le impostazioni di default di un grafico tipo waveform, salvarle e richiamarle successivamente in altri VI. National Instruments Corporation A-9 LabVIEW Corso Base II Appendice Esercitazione A-2 Obiettivo: Utilizzare il Control Editor per modificare un controllo. 1. Aprite un nuovo pannello frontale. 2. Inserite un Horizontal Pointer Slide che si trova nella palette Controls»Numeric del pannello frontale. Cliccate con il tasto destro del mouse sul controllo e selezionate Visible Items»Digital Display. Modifica del controllo 3. Avviate il Control Editor selezionando il controllo con lo strumento Posiziona e selezionando Edit»Customize Control. Utilizzando lo strumento Modifica spostate il controllo nel mezzo del pannello frontale per avere più spazio lavorativo a disposizione. 4. Cliccate con il tasto destro del mouse sul display digitale e selezionate Replace»Numeric»Meter. Posizionate il misuratore sopra il controllo slide, come mostrato nell’esempio seguente. 5. Nascondete la scala dello slide cliccandoci sopra con il tasto destro del mouse e selezionando Scale»Style»None. LabVIEW Corso Base I A-10 National Instruments Corporation Appendice 6. Chiudete il Control Editor selezionando Close dal menu File. Salvate il controllo come Custom Slider.ctl, quindi cliccate su Yes per sostituire quello esistente. Il controllo modificato viene mostrato sul pannello frontale. Potete salvare controlli che avete creato quando salvate VI. Potete caricare controlli salvati utilizzando Select a Control dalla palette Controls. I controlli hanno un’estensione .ctl. Nota 7. Lavorate con il controllo ed osservate come il misuratore segue i valori. 8. Chiudete il VI. Non salvate le modifiche. Fine dell’esercitazione A-2 National Instruments Corporation A-11 LabVIEW Corso Base II Appendice Esercitazione A-3 Obiettivo: Creare un indicatore booleano personalizzato. Realizzate un VI che utilizzi indicatori booleani personalizzati per mostrare lo stato di un becco di Bunsen e di un’ampolla riscaldata. Le figure che rappresentano gli stati on e off del becco di Bunsen e l’ampolla sono già stati disegnati. Pannello frontale 1. Aprite il VI Custom Picture Exercise che si trova nella directory exercises\Basics2. Il VI contiene un selettore verticale per attivare o disattivare il becco di Bunsen ed un pulsante per uscire dall’applicazione. Esso contiene anche due immagini per rappresentare gli stati on e off del becco di Bunsen e due immagini che rappresentano gli stati di ebollizione e non ebollizione dell’ampolla. 2. Per creare l’oggetto booleano personalizzato dell’ampolla, completate i passi seguenti. a. Cliccate con il tasto destro del mouse su un’area libera del pannello frontale e selezionate Square LED dalla palette Controls»Classic Controls»Boolean. Etichettate il LED con Ampolla. b. Utilizzando lo strumento Posiziona, selezionate l’immagine che mostra l’ampolla in ebollizione e selezionate Edit»Cut. Cliccate sull’indicatore a LED dell’ampolla e selezionate Edit»Customize Control. Ora appare il Control Editor con il LED dell’ampolla visualizzato. Cliccate con il tasto destro del mouse sul LED e selezionate Import Picture»True. Questa immagine rappresenta ora lo stato TRUE. Nota Lo stato di default del LED è FALSE. Se non vedete l’immagine, il LED si trova probabilmente nello stato FALSE. LabVIEW Corso Base I A-12 National Instruments Corporation Appendice c. Passate al pannello frontale cliccandoci sopra. Utilizzando lo strumento Posiziona, selezionate l’immagine dell’ampolla con il contenuto non in ebollizione e selezionate Edit»Cut. Passate alla finestra Control Editor cliccandoci sopra. d. Cliccate con il tasto destro del mouse sull’ampolla e selezionate Import Picture»False. Questa immagine rappresenta ora lo stato FALSE. e. Selezionate Apply Changes dal menu File e chiudete il Control Editor. Non salvate il controllo personalizzato. 3. Cliccate con il tasto destro del mouse su un’area libera e selezionate Square LED dal menu rapido Controls»Classic Controls»Boolean. Etichettate il LED con Fiamma. 4. Seguendo i passi precedenti, rendete il LED uguale al becco di Bunsen. Lo stato TRUE dovrebbe mostrare il bruciatore on; lo stato FALSE dovrebbe mostrare il bruciatore off. 5. Nascondete le etichette degli indicatori booleani cliccandoci sopra con il tasto destro del mouse e selezionando Visible Items»Label. Selezionate gli indicatori booleani e allineateli orizzontalmente usando lo strumento Align Objects. Schema a blocchi 6. Completate lo schema a blocchi seguente. 7. Salvate il VI con lo stesso nome. 8. Tornate al pannello frontale ed avviate il VI. Portate sulla posizione on ed off il selettore Burner e notate i cambiamenti del booleano personalizzato. 9. Arrestate il VI cliccando sul pulsante Quit. Se cliccate sul pulsante Quit mentre il bruciatore è acceso, una fienstra di dialogo avvisa che dovete spegnere il bruciatore prima di arrestare il sistema. 10. Chiudete il VI quando avete finito. Fine dell’esercitazione A-3 National Instruments Corporation A-13 LabVIEW Corso Base II Appendice Il Web Server in LabVIEW Il Web è uno dei modi più popolari per condividere informazioni ed è un buon modo per condividere le vostre misure e dati. LabVIEW offre diversi modi per aiutarvi nella pubblicazione dei vostri dati sul web e per creare documenti HTML. La Lezione 3 descrive DataSocket e come esso utilizzi il metodo ad URL per descrivere ed accedere a dati di LabVIEW. Un altro metodo è di utilizzare il Web Server in LabVIEW per pubblicare immagini dei vostri pannelli frontali sul web. Di default, dopo che avete abilitato il Web Server, tutti i VI sono visibili a tutti i browser Web. Tuttavia, potete controllare l’accesso da browser ai pannelli frontali pubblicati e configurare quali VI siano visibili sul Web. Per visualizzare pannelli frontali di VI sul Web, i VI devono trovarsi nella memoria del computer. Per configurare il Web Server, selezionate Tools»Options e quindi Web Server: Configuration dal menu a tendina superiore. La finestra Web Server: Configuration è quella in cui dovete abilitare il Web Server. La configurazione di default del Web Server è adatta alla maggior parte della applicazioni. Se dovete modificare la configurazione di default, fate riferimento all’help di LabVIEW. La finestra Web Server: Browser Access vi consente di configurare quali indirizzi browser possono visualizzare i pannelli frontali dei vostri VI. Quando un Web browser tenta di ottenere un’immagine di un pannello frontale di un VI, il Web Server confronta l’indirizzo del browser con quelli presenti nella Browser Access List per determinare se è consentito l’accesso. Se un indirizzo della Browser Access List coincide con l’indirizzo del browser, Web Server consente o nega l’accesso a seconda di come è stata effettuata l’impostazione. Di default tutti i browser hanno accesso al Web Server di LabVIEW. Fate riferimento alla finestra Context Help per ulteriori informazioni sulla sintassi utilizzata per definire l’accesso dei browser. La finestra Web Server: Visible VIs vi consente di definire quali VI siano accessibili ad un Web browser. Quando un Web browser cerca di ottenere un’immagine di un pannello frontale, il Web server confronta il nome del VI con quelli presenti nell’elenco Visible VIs per stabilire se è consentito l’accesso. Se un nome nell’elenco Visible VIs coincide con il nome del VI, il Web Server consente o nega l’accesso a quell’immagine di VI basandosi sulle impostazioni effettuate da voi. Di default le immagini dei pannelli frontali di tutti i VI sono visibili. Fate riferimento alla finestra Context Help per ulteriori informazioni sulla sintassi utilizzata per stabilire la visibilità dei VI. LabVIEW Corso Base I A-14 National Instruments Corporation Appendice Nota Utilizzate l’Enterprise Connectivity Toolset di LabVIEW per controllare i VI sul Web e per aggiungere maggiore sicurezza ai VI da pubblicare sul Web. Fate riferimento al sito Web della National Instruments per ulteriori informazioni. Il Web Publishing Tool di LabVIEW Potete anche utilizzare Tools»Web Publishing Tool per creare un documento HTML e includere immagini statiche o animate del pannello frontale. Potete anche includere immagini del pannello frontale in un documento HTML esistente. Cliccate sul pulsante Instructions per visualizzare informazioni su come aggiungere un titolo al vostro file HTML e su come aggiungere testo prima e dopo il pannello frontale del vostro VI. Inserite un nome di VI nel campo VI Name o selezionate Browse dal menu a tendina VI Name e andate su un VI. Per visualizzare pannelli frontali di VI sul Web, i VI devono risiedere nella memoria del vostro computer. Nota Potete avere un’anteprima del documento nel vostro browser di default cliccando sul pulsante Start Web Server e quindi sul pulsante Preview in Browser. Se il pulsante Start Web Server non è evidenziato, il Web Server è già in esecuzione. Quando cliccate sul pulsante Save to Disk, il titolo, il testo e l’immagine del pannello frontale del VI vengono salvati in un documento HTML. Se volete visualizzare il documento da un computer remoto, salvate il documento HTML nella directory root del Web Server, solitamente labview\www. Compare la finestra di dialogo Document URL con la URL del vostro documento HTML. National Instruments Corporation A-15 LabVIEW Corso Base II Appendice Esercitazione A-4 Generate & Analyze Data Obiettivo: Utilizzare gli strumenti del Web Server di LabVIEW per visualizzare un pannello frontale in un web browser. Aprite il VI che avete realizzato nell’esercitazione 1-1, il VI Generate & Analyze Data e salvate il suo pannello frontale in un documento HTML. Pannello frontale 1. Aprite il VI Generate & Analyze Data dalla directory exercises\LV Basics2. 2. Abilitate e configurate il Web Server selezionando Tools»Options. 3. Selezionate Web Server: Configuration dal menu a tendina superiore della finestra di dialogo Options e contrassegnate il riquadro Enable Web Server. 4. Cliccate sul pulsante OK per chiudere la finestra di dialogo Options. Ora il Web Server di LabVIEW è in esecuzione. 5. Avviate il VI per alcuni secondi e fermatelo. 6. Selezionate Tools»Web Publishing Tool. Cliccate sul pulsante Instructions e leggete come utilizzare questo strumento. LabVIEW Corso Base I A-16 National Instruments Corporation Appendice 7. Cliccate sul collegamento continue e configurate la finestra seguente. 8. Cliccate sul pulsante Preview in Browser per aprire e visualizzare il pannello frontale in un browser. Compare una finestra simile a quella mostrata nella figura successiva. National Instruments Corporation A-17 LabVIEW Corso Base II Appendice L’opzione Animated funziona solo con Netscape Navigator. In Internet Explorer potete solamente visualizzare immagini statiche. Nota 9. Tornate alla finestra Web Publishing Tool e cliccate sul pulsante Save to Disk per salvare il titolo, il testo e l’immagine del pannello frontale del VI in un documento HTML. Salvate il documento come Generate & Analyze Data.htm nella directory LV Basics2. Compare un messaggio di avviso che vi dice dove installare il file se volete che altre macchine lo vedano. 10. Cliccate sul pulsante Done per uscire dal Web Publishing Tool. 11. Tornate al browser e digitate la seguente URL nella barra degli indirizzi: http://127.0.0.1. Questa definisce la macchina locale. Compare la finestra seguente. 12. Leggete le informazioni e chiudete il browser quando avete finito. 13. Disattivate il Web Server selezionando visualizzare la finestra di dialogo Options. Tools»Options per 14. Selezionate Web Server: Configuration dal menu a tendina superiore della finestra di dialogo Options e rimuovete la selezione dal riquadro Enable Web Server. 15. Cliccate sul pulsante OK per chiudere la finestra di dialogo Options. 16. Chiudete il VI Generate & Analyze Data. Fine dell’esercitazione A-4 LabVIEW Corso Base I A-18 National Instruments Corporation Appendice D. Informazioni aggiuntive Questa sezione descrive come potete avere ulteriori informazioni relativamente a LabVIEW, ai driver degli strumenti e ad altri argomenti relativi a questo corso. Opzioni del supporto tecnico della National Instruments Il modo migliore per ottenere un supporto tecnico e altre informazioni su LabVIEW, prove e misure, strumentazione e altri prodotti e servizi della National Instruments è di collegarsi al sito web della NI che si trova all’indirizzo ni.com. La pagina di supporto del sito web della National Instruments contiene collegamenti a note applicative, la conoscenza di base del supporto, centinaia di esempi e vari tipi di aiuto per la risoluzione di problemi relativi ad argomenti discussi in questo corso ed altro ancora. Un altro eccellente posto per ottenere supporto quando sviluppate varie applicazioni con i prodotti della National Instruments è la NI Developer Zone sempre all’indirizzo ni.com. La NI Developer Zone comprende anche collegamenti diretti alla rete di driver per gli strumenti e alle pagine web dei membri dell’Alliance Program. L’Alliance Program L’Alliance Program della National Instruments riunisce integratori di sistemi, consulenti e venditori hardware per fornire servizi completi e esperienza ai clienti. Il programma assicura assistenza qualificata e specializzata per lo sviluppo di applicazioni e di sistemi. Le informazioni relative e i collegamenti a molti dei membri dell’Alliance Program sono disponibili presso il sito della National Instruments. Newsgroup di supporto all’utente I newsgroup di supporto all’utente della National Instruments sono una raccolta di newsgroup Usenet che copre i prodotti della National Instruments e i campi generali della scienza e dell’ingegneria. Potete leggere, cercare e scrivere sui newsgroup per condividere soluzioni e trovare un supporto aggiuntivo da altri utenti. Potete accedere ai newsgroup di supporto all’utente dalla pagina web di supporto della National Instruments. Altri corsi di formazione della National Instruments. National Instruments offre diversi corsi di formazione per gli utenti di LabVIEW. I corsi sono elencati nel catalogo della National Instruments e online all’indirizzo ni.com/custed. Questi corsi continuano la formazione che avete ricevuto qui e la espandono in altre aree. Potete acquistare il materiale dei corsi o iscrivervi ad un corso con istruttore contattando la National Instruments. National Instruments Corporation A-19 LabVIEW Corso Base II Appendice Pubblicazioni di LabVIEW Newsletter LabVIEW Technical Resource (LTR) Iscrivetevi al LabVIEW Technical Resource per scoprire consigli e tecniche potenti per lo sviluppo di applicazioni in LabVIEW. Questa pubblicazione trimestrale offre informazioni tecniche dettagliate per nuovi utenti e per utenti avanzati. Inoltre, ogni numero contiene un dischetto di VI e utility di LabVIEW che implementano metodi trattati nel numero. Per ordinare LabVIEW Technical Resource, chiamate la redazione di LTR al numero (214) 706-0587 o visitate il sito www.ltrpub.com. Libri di LabVIEW Sono stati scritti molti libri sulla programmazione e sulle applicazioni in LabVIEW. Il sito web della National Instruments contiene un elenco di tutti i libri su LabVIEW e i collegamenti a siti per l’acquisto di questi libri. Sono anche comprese informazioni sull’editore così potete contattare direttamente l’editore per ulteriori informazioni sul contenuto e sull’ordinazione di libri su LabVIEW, di automazione e su misure basate su PC. Listserve info-labview Info-labview è un e-mail group di utenti di tutto il mondo che discutono su LabVIEW. Gli appartenenti a questa lista possono rispondere a domande sulla realizzazione di sistemi in LabVIEW per applicazioni particolari, su dove trovare i driver degli strumenti o fornire aiuto per un dispositivo e su problemi che si presentano. Inviate un messaggio di sottoscrizione a info-labview all’indirizzo [email protected]. Inviate altri messaggi amministrativi al responsabile dell’elenco infolabview a: [email protected] Inviate un messaggio agli iscritti a: [email protected] Potete anche ricercare tra archivi ftp all’indirizzo: ftp://ftp.pica.army.mil/pub/labview/ Gli archivi contengono diversi VI, messi a disposizione per l’esecuzione di una grande varietà di compiti. LabVIEW Corso Base I A-20 National Instruments Corporation Appendice E. Tabella delle corrispondenze dei caratteri ASCII La tabella seguente contiene i codici dei caratteri ASCII e quelli equivalenti nel sistema esadecimale, ottale e decimale. Hex Ottale Decimale ASCII Hex Ottale Decimale ASCII 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 000 001 002 003 004 005 006 007 010 011 012 013 014 015 016 017 020 021 022 023 024 025 026 027 030 031 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 040 041 042 043 044 045 046 047 050 051 052 053 054 055 056 057 060 061 062 063 064 065 066 067 070 071 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 SP ! “ # $ % & ‘ ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 National Instruments Corporation A-21 LabVIEW Corso Base II Appendice Hex Ottale Decimale ASCII Hex Ottale Decimale ASCII 1A 1B 1C 1D 1E 1F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 032 033 034 035 036 037 100 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 120 121 122 123 124 125 126 127 130 131 132 133 134 135 136 137 26 27 28 29 30 31 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 SUB ESC FS GS RS US @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 3A 3B 3C 3D 3E 3F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 072 073 074 075 076 077 140 141 142 143 144 145 146 147 150 151 152 153 154 155 156 157 160 161 162 163 164 165 166 167 170 171 172 173 174 175 176 177 58 59 60 61 62 63 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 : ; < = > ? ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL LabVIEW Corso Base I A-22 National Instruments Corporation