Sei sulla pagina 1di 3

LabVIEW_04_II bozza:Layout 1

19-11-2007

13:04

Pagina 21

SCUOLA DI LABVIEW

04

Training per principianti

a cura di Matteo Foini

IL DEBUG DI VI - PARTE II
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.

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.

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-

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.

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.

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

LabVIEW_04_II bozza:Layout 1

19-11-2007

13:04

Pagina 22

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.

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


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.

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-

22

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.

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-

LabVIEW_04_II bozza:Layout 1

19-11-2007

13:04

Pagina 23

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.

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.

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.

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-

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

Readerser vice.it n. 425

Figura 3. Arresto di un While Loop

23