Você está na página 1de 3

SCUOLA DI LABVIEW

04

Training per principianti


IL DEBUG DI VI - PARTE II
a cura di Matteo Foini

Proseguiamo la discussione del tema introdotto nel numero scorso

PUNTI DINTERRUZIONE
Utilizzate il tool Breakpoint, mostrato di seguito, per inserire un punto dinterruzione in un VI, in un nodo o su un collegamento dello schema a blocchi ed arrestare lesecuzione in quella posizione.

ma a blocchi e selezionate SubVI Node Setup dal menu rapido. Contrassegnate il riquadro Suspend when called per sospendere lesecuzione solo per quellistanza del subVI. La finestra VI Hierarchy, che visualizzate selezionando ViewVI Hierarchy, indica se il VI in pausa o sospeso. Una freccia indica un VI regolarmente in esecuzione o in esecuzione passo passo.

Quando impostate un punto dinterruzione su un collegamento, lesecuzione si arresta dopo che il dato passato attraverso il collegamento. Inserite un punto dinterruzione sullo schema a blocchi per arrestare lesecuzione dopo che tutti i nodi nello schema a blocchi sono stati eseguiti. Quando un VI si ferma su un punto dinterruzione, LabVIEW porta lo schema a blocchi in primo piano ed utilizza un simbolo per evidenziare il nodo o il collegamento che contiene il punto dinterruzione. Quando spostate il cursore su un punto dinterruzione esistente, larea nera del cursore Breakpoint appare bianca. Quando raggiungete un punto dinterruzione durante lesecuzione, il VI si ferma e il pulsante Pause appare rosso. Potete svolgere le seguenti azioni: Eseguire passo passo utilizzando i pulsanti single-stepping. Sondare i collegamenti per verificare i valori intermedi. Modificare i valori dei controlli del pannello frontale. Cliccare sul pulsante Pause per proseguire con lesecuzione fino al punto dinterruzione successivo o finch il VI non ha finito lesecuzione.

Un simbolo di pausa indica un VI in pausa o sospeso.

Un simbolo di pausa verde o vuoto in bianco e nero, indica un VI che si mette in pausa quando richiamato. Un simbolo di pausa rosso, o uno solido in bianco e nero, indica un VI in pausa. Un punto esclamativo indica che il subVI sospeso.

Un VI pu essere contemporaneamente sospeso e in pausa.

DETERMINAZIONE DELLISTANZA CORRENTE DI UN SUBVI


Quando ponete in pausa un subVI, il menu a tendina Call list della barra degli strumenti elenca la catena dei programmi chiamanti, dal VI a livello superiore fino al subVI. Questo elenco non lo stesso che vedete quando selezionate BrowseThis VIs Callers, che elenca tutti i VI chiamanti indipendentemente dal fatto che siano correntemente in esecuzione. Utilizzate il menu Call list per determinare listanza corrente del subVI se lo schema a blocchi contiene pi di unistanza. Quando selezionate un VI dal menu Call list, si apre il suo schema a blocchi e LabVIEW evidenzia listanza corrente del subVI.

SOSPENSIONE DELLESECUZIONE
Sospendete lesecuzione di un subVI per modificare i valori dei controlli e degli indicatori, per controllare il numero di volte che il subVI viene eseguito prima di tornare al programma chiamante, o per tornare indietro allinizio dellesecuzione del subVI. Potete avviare tutte le chiamate ad un subVI con lesecuzione sospesa o potete sospendere una specifica chiamata ad un subVI. Per sospendere tutte le chiamate ad un subVI, aprite il subVI e selezionate OperateSuspend when Called. Il subVI viene sospeso automaticamente quando un altro VI lo chiama. Se selezionate questa voce di menu quando eseguite passo passo, il subVI non viene sospeso immediatamente. Il subVI viene sospeso quando viene chiamato. Per sospendere una specifica chiamata al subVI, cliccate con il tasto destro del mouse sul nodo del subVI nello sche-

C. DATI INDEFINITI O INATTESI


I dati indefiniti, che sono NaN (non un numero) o Inf (infinito) invalidano tutte le operazioni successive. Le operazioni in virgola mobile restituiscono i due valori simbolici seguenti che indicano operazioni fallite o risultati privi di significato: NaN (non un numero) rappresenta un valore in virgola mobile prodotto da operazioni non valide, come

21

SCUOLA DI LABVIEW

04

lesecuzione di una radice quadrata di un numero negativo. Inf (infinito) rappresenta un valore in virgola mobile prodotto da operazioni tipo la divisione di un numero per zero. LabVIEW non verifica condizioni di overflow o di underflow su valori interi. Gli overflow e gli underflow di numeri in virgola mobile sono trattati secondo lIEEE 754, Standard for Binary Floating-Point Arithmetic. Le operazioni in virgola mobile propagano NaN e Inf in modo affidabile. Quando convertite esplicitamente o implicitamente NaN o Inf in interi o in booleani, i valore diventano privi di significato. Per esempio, la divisione di 1 per 0 produce Inf. Convertendo Inf in un intero a 16 bit si ottiene il valore 32767, che appare come un valore normale. Prima di convertire dati in interi, utilizzate lo strumento Probe per verificare la validit di valori in virgola mobile intermedi. Verificate NaN collegando la funzione Not A Number/Path/Refnum? sotto Comparison al valore che sospettate non sia valido. Non basatevi su valori particolari come NaN, Inf o array vuoti per determinare se un VI produce dati indefiniti. Invece, confermate che il VI produce dati definiti facendo s che un VI riporti un errore se incontra una situazione che probabile che produca dati indefiniti. Per esempio, se create un VI che utilizza un array in ingresso per indicizzare un For Loop, determinate cosa volete che faccia il VI quando larray in ingresso vuoto. Se producete un codice di errore in uscita, sostituite i dati definiti per il valore che crea il ciclo o utilizzate una struttura Case che non esegue il For Loop se larray vuoto.

ne automatica degli errori per un subVI o una funzione in un VI, collegate il parametro error out a quello error in di un altro subVI o funzione o ad un indicatore error out.

GESTIONE MANUALE DEGLI ERRORI


Potete scegliere altri metodi di gestione degli errori. Per esempio, se un VI di I/O nello schema a blocchi va in time out, potreste non desiderare che si arresti lintera applicazione e che venga visualizzata una finestra di dialogo per lerrore. Potreste desiderare che il VI riprovi per un certo periodo di tempo. In LabVIEW potete prendere queste decisioni sulla gestione degli errori nello schema a blocchi del VI. Utilizzate i VI di LabVIEW per la gestione degli errori e le funzioni nella palette Dialog & User Interface e i parametri error in ed error out della maggior parte dei VI e funzioni per gestire gli errori. Per esempio, se LabVIEW incontra un errore, potete visualizzare il messaggio di errore in modi diversi dalle finestre di dialogo. Utilizzate la gestione degli errori insieme agli strumenti di debug per trovare e gestire gli errori. I VI e le funzioni restituiscono gli errori in uno dei due modi - con codici numerici di errore o con un cluster di errore. Tipicamente, le funzioni utilizzano codici numerici di errore e i VI utilizzano un cluster di errori, di solito con ingressi ed uscite di errore. Quando eseguite una qualsiasi operazione di ingresso/uscita (I/O), prendete in considerazione leventualit che si possano presentare degli errori. Quasi tutte le funzioni di I/O restituiscono informazioni sugli errori. Includete la verifica degli errori nei VI, specialmente per operazioni di I/O (file, seriale, strumentazione, acquisizione dati e comunicazione) e fornite un sistema per gestire gli errori in maniera appropriata. Utilizzate i VI di LabVIEW per la gestione degli errori, le funzioni e i parametri per gestire gli errori. Per esempio, se LabVIEW incontra un errore, potete visualizzare il messaggio di errore in una finestra di dialogo. Oppure potete fissare lerrore da programma e cancellare lerrore collegando luscita error out del subVI o la funzione allingresso error in del VI Clear Errors. Utilizzate la gestione degli errori insieme agli strumenti di debug per trovare e gestire gli errori. National Instruments raccomanda fortemente lutilizzo della gestione degli errori.

D. VERIFICA E GESTIONE DEGLI ERRORI


Non importa quanto avete confidenza con il VI che create. Voi non potete prevedere ogni problema che pu incontrare un utente. Senza un meccanismo di verifica degli errori, sapete solamente che il VI non lavora correttamente. La verifica degli errori vi dice perch e dove avvengono gli errori.

GESTIONE AUTOMATICA DEGLI ERRORI


Ogni errore possiede un codice numerico ed un corrispondente messaggio di errore. Di default LabVIEW gestisce automaticamente ogni errore quando un VI in esecuzione sospendendo lesecuzione, evidenziando il subVI o la funzione in cui avvenuto lerrore e visualizzando una finestra di dialogo per lerrore. Per disabilitare la gestione automatica degli errori per il VI corrente, selezionate FileVI Properties e quindi Execution dal menu a tendina Category. Per disabilitare la gestione automatica degli errori per ogni VI nuovo che create, selezionate ToolsOptions e quindi Block Diagram dallelenco Category. Per disabilitare la gestio-

CLUSTER DEGLI ERRORI


Utilizzate i controlli e gli indicatori dei cluster degli errori per creare ingressi e uscite di errore nei subVI. I cluster error in ed error out includono le seguenti componenti informative: status un valore booleano che riporta TRUE in caso di errore. code un intero con segno a 32 bit che identifica nume-

22

SCUOLA DI LABVIEW

ricamente lerrore. Un codice di errore nonzero accoppiato con uno status di FALSE segnala un avvertimento piuttosto che un errore. source una stringa che identifica dove avvenuto lerrore. La gestione degli errori in LabVIEW segue il modello a flusso di dati. Proprio come i valori dei dati fluiscono attraverso un VI, cos fanno le informazioni sugli errori. Collegate le informazioni sugli errori dallinizio del VI fino alla fine. Includete un VI di gestione degli errori alla fine del VI per determinare se il VI stato eseguito senza errori. Utilizzate i cluster error in ed error out in ogni VI che utilizzate o realizzate per passare informazioni sugli errori attraverso il VI. Quando il VI in esecuzione, LabVIEW verifica se ci sono gli errori in ogni nodo di esecuzione. Se LabVIEW non trova errori, il nodo viene eseguito normalmente. Se LabVIEW rileva un errore, il nodo passa lerrore al nodo successivo senza eseguire quella parte di codice. Il nodo successivo fa lo stesso e cos via. Alla fine del flusso di esecuzione, LabVIEW riporta lerrore.

Figura 2. Condizione Error

le selettore di una struttura Case, letichetta del selettore di condizione visualizza due casi - Error e No Error - e la cornice della struttura Case cambia colore - rosso per Error e verde per No Error. In caso di errore, la struttura Case esegue la parte Error dello schema a blocchi. Quando un cluster degli errori collegato al terminale di selezione, la struttura Case riconosce solo lo status booleano del cluster.

SPIEGAZIONE DEGLI ERRORI


In caso di errore, cliccate con il tasto destro del mouse sulla cornice del cluster e selezionate Explain Error dal menu rapido per aprire la finestra di dialogo Explain Error. La finestra di dialogo Explain Error contiene informazioni sullerrore. Il menu rapido include unopzione Explain Warning se il VI contiene avvertimenti e non errori. Potete anche accedere alla finestra di dialogo Explain Error dal menu HelpExplain Error. I VI e le funzioni restituiscono gli errori in uno di due modi - con codici numerici di errore o con un cluster di errore. Tipicamente, le funzioni utilizzano codici numerici di errore e i VI utilizzano un cluster di errori, di solito con ingressi ed uscite di errore.

UTILIZZO DEI WHILE LOOP PER LA GESTIONE DEGLI ERRORI


Potete collegare un cluster degli errori al terminale condizionale di un While Loop per arrestare literazione del ciclo. Quando collegate un cluster degli errori al terminale condizionale, solo il valore TRUE o FALSE del parametro status del cluster degli errori viene passato al terminale. In caso di errore, il While Loop si arresta. Quando un cluster degli errori viene collegato al terminale condizionale, le voci del menu rapido Stop if True e Continue if True si modificano in Stop on Error e Continue while Error. Nella figura 3, il cluster degli errori e il pulsante di stop vengono usati insieme per determinare quando arrestare il ciclo. Questo il metodo consigliato per arrestare la maggior parte dei cicli.

UTILIZZO DELLE STRUTTURE CASE PER LA GESTIONE DEGLI ERRORI


Lesempio riportato nelle figure 1 e 2 mostra una struttura Case con un cluster degli errori utilizzato per definire le condizioni. Quando collegate un cluster degli errori al termina-

Figura 3. Arresto di un While Loop Readerser vice.it n. 425

Note sullautore
Figura 1. Condizione No Error

Laureato in ingegneria nucleare al Politecnico di Milano, Matteo Foini lavora in qualit di Technical Marketing Engineer presso National Instruments Italy

23

Você também pode gostar