LabVIEW “First Call?”: L’inizializzazione intelligente per strutture robuste

È uno strumento che ogni sviluppatore LabVIEW esperto impara ad apprezzare e utilizzare in modo strategico, soprattutto nelle Functional Global Variables (FGVs) e nei meccanismi di sincronizzazione avanzata.
FirstCall LabVIEW

Introduzione

In LabVIEW, la funzione First Call? è un elemento spesso sottovalutato ma fondamentale per garantire un’inizializzazione sicura e controllata all’interno dei VIs. Questa funzione restituisce TRUE solo alla prima esecuzione del VI nel contesto in cui è caricato, permettendo di distinguere il primo ciclo di un algoritmo dai successivi. È particolarmente utile nelle Functional Global Variables (FGVs) e nei meccanismi di sincronizzazione avanzata.

Cos’è “First Call?”

La funzione First Call?, situata nella palette Programming > Synchronization, restituisce TRUE solo la prima volta che il VI viene eseguito dopo l’avvio del chiamante di livello superiore, come quando si clicca sul pulsante Run o si utilizza il metodo Run VI. Se un secondo chiamante di livello superiore chiama il VI mentre il primo è ancora in esecuzione, First Call? non restituirà nuovamente TRUE.

Dopo che tutti i chiamanti di livello superiore diventano inattivi e un chiamante di livello superiore inizia nuovamente, First Call? restituirà TRUE la prima volta che il VI viene eseguito dopo lo stato inattivo .

Approfondimento: First Call on NI

Applicazioni pratiche

Inizializzazione in FGV

Nelle Functional Global Variables (FGVs), l’uso di First Call? è estremamente utile per effettuare un’inizializzazione una tantum.

Ad esempio, per creare un riferimento a una risorsa, come una Queue o un oggetto DAQmx, e mantenerlo per tutta la durata dell’esecuzione del programma, si può utilizzare uno Shift Register o un Feedback Node, ponendo il blocco di inizializzazione all’interno del ramo TRUE di una Case Structure condizionata da First Call?.

Singleton pattern con Feedback Node

Quando si preferisce una rappresentazione più compatta rispetto agli shift register, si può sostituire lo shift register con un Feedback Node.

La logica resta la stessa: il valore iniziale viene scritto nel Feedback Node al primo ciclo (First Call? = TRUE), mentre nei cicli successivi, il nodo restituisce semplicemente il valore memorizzato.

Questa alternativa è particolarmente efficace per VIs riutilizzabili e per semplificare la lettura del diagramma.

Gestione Queue/Notifier/Event/File

First Call? può essere utilizzato per inizializzare una reference con il suo creatore solo quando un VI viene eseguito la prima volta. Ad esempio, per una Queue, la funzione Obtain Queue viene chiamata solo la prima volta, il riferimento viene salvato nello shift register, e le operazioni di enqueue/dequeue successive riutilizzano lo stesso riferimento.

Uso in VI rientranti

In LabVIEW, un VI rientrante può essere eseguito da più chiamanti contemporaneamente, ma ogni chiamante ha il proprio spazio dati separato. Questo significa che le variabili interne del VI (inclusi shift register, feedback node e anche la funzione First Call?) non vengono condivise tra le varie chiamate.

Quando si usa First Call? in un VI rientrante condiviso, questa funzione restituirà TRUE la prima volta che ogni chiamante lo esegue, perché ciascun chiamante ha una sua “istanza” indipendente del VI e quindi anche della funzione stessa .

Best Practice

  • Chiarezza: l’inizializzazione è esplicitamente localizzata.
  • Efficienza: risorse create una sola volta, evitando overhead inutili.
  • Robustezza: evita condizioni impreviste nei cicli successivi.
  • Manutenibilità: facilita la comprensione del flusso di controllo e dei riferimenti.

Esempio Pratico

Una Main UI, chiama una seconda VI che visualizza solo una visualizzazione del grafico e i dati gli vengono passati tramite un evento Data.

Un VI con i feedback node, crea l’evento tutte le prime volte il vi viene istanziato in memoria, le altre istanze espongono invece la reference registrata tramite il feedback node.

Considerazioni finali

La funzione First Call? è uno strumento semplice ma potente che, se ben compreso, può migliorare significativamente la qualità del software in LabVIEW.

Integrata in FGVs per l’inizializzazione di reference come Queue, Notifier, Occurrence o in qualsiasi meccanismo che richieda un’inizializzazione controllata, è sinonimo di un’architettura solida e professionale.


È uno strumento che ogni sviluppatore LabVIEW esperto impara ad apprezzare e utilizzare in modo strategico, soprattutto nelle Functional Global Variables (FGVs) e nei meccanismi di sincronizzazione avanzata.

Picture of Nicola Bavarone
Nicola Bavarone
Ciao, sono Nicola Bavarone, LabVIEW enthusiast da quando circolava la versione 5.1. Sono certificato CLA e CPI, e da oltre 20 anni lavoro nel mondo dei test e misura, prima come responsabile di laboratorio, oggi come fondatore di Bytelabs e ByteQX. Insieme al mio team aiuto aziende e professionisti a costruire soluzioni robuste, integrate e su misura per i loro processi.

Altri articoli dal nostro Blog

La Multicolumn Listbox in LabVIEW è uno strumento efficace per
In LabVIEW, l’adozione di pattern architetturali (come State Machine, Producer/Consumer,

Mettiti in contatto