L’utilizzo di una Variant Lookup Table, basata su Set/Get Variant Attribute, offre un potente strumento per la gestione dinamica dei dati in LabVIEW. In questo articolo vedremo come combinare questa tecnica con la Programmazione a Oggetti (OOP) per realizzare un semplice test sequencer.
Obiettivo
Vogliamo costruire un test sequencer che dimostri la versatilità dell’approccio Set/Get Variant Attribute come lookup table, utilizzando le classi come elementi. L’obiettivo è rendere la gestione dei test modulare e scalabile, sfruttando i vantaggi della programmazione orientata agli oggetti.
Definizione delle classi
In questo progetto definiremo tre classi:
Classe Test (Astratta)
La classe Test rappresenta la base astratta del sequencer. Contiene un unico metodo, Test.vi, che fungerà da punto di ingresso per l’esecuzione dei test. Questo metodo sarà poi sovrascritto nelle classi derivate.
Procedura per Creare la Classe Test:
- Fare clic con il tasto destro su “My Computer” → New → Class e assegnare il nome Test.
- Selezionare la classe Test, fare clic con il tasto destro e scegliere “New → VI from Dynamic Dispatch Template”.
- Salvare il file come Test.vi.
Classe Test01 e Classe Test02 (Derivate)
Le classi Test01 e Test02 derivano dalla classe Test e ne sovrascrivono il metodo Test.vi con la logica specifica di ciascun test.
Procedura per Creare le Classi Derivate:
- Creare una nuova classe (Test01).
- Aprire le proprietà della classe e selezionare la scheda Inheritance.
- Premere “Change Inheritance” e selezionare Test come classe padre.
- Eseguire l’override del metodo Test.vi:
- Fare clic con il tasto destro sulla classe Test01 → New → VI from Override.
- Selezionare Test.vi e confermare.
- Ripetere la stessa procedura per la classe Test02.

Una volta completata la gerarchia, selezionando “Show Class Hierarchy”, sarà visibile la relazione Padre/Figlio tra la classe astratta Test e le classi derivate Test01 e Test02.


Implementazione della Variant Lookup Table
Ora implementiamo una Variant Lookup Table per associare dinamicamente le classi ai test.
Passaggi:
- Creare un nuovo VI (“New VI” da “My Computer”).
- Trascinare nel diagramma Test01 e Test02.
- Aprire la palette Variant, selezionare Set Variant Attribute e aggiungerne due istanze.
- Collegare le classi Test01 e Test02 come valori per i rispettivi attributi del Variant.
⚠ Nota: È possibile usare un Variant generico come chiave, ma per maggiore sicurezza tipologica, si consiglia di collegare la classe Test come input.

Esecuzione del Test Sequencer
Per eseguire i test in sequenza:
Chiamare il metodo Test.vi sull’istanza recuperata.
Aggiungere un For Loop o un While Loop per eseguire i test in modo iterativo.
Utilizzare Get Variant Attribute per recuperare l’istanza della classe associata a una chiave specifica.

Vantaggi dell’approccio Variant Lookup Table
L’uso di una Variant Lookup Table offre diversi vantaggi rispetto ad altre strutture dati:
✅ Flessibilità nei tipi di dato: supporta qualsiasi tipo di dato senza necessità di conversioni esplicite.
✅ Gestione dinamica delle chiavi: a differenza degli array, non richiede dimensioni predefinite.
✅ Prestazioni ottimizzate: la ricerca chiave-valore è più veloce rispetto agli array, grazie a un algoritmo di ricerca non lineare.
✅ Maggiore scalabilità: semplifica l’estensione del sistema, consentendo l’aggiunta di nuovi test senza modifiche strutturali.
Confronto ed evoluzione: Variant Lookup Table vs. Mappe (Maps)
Variante moderna: le Variant Lookup Table, basate su Set/Get Variant Attribute, sono uno strumento potente e flessibile, ma con l’introduzione delle Mappe tipizzate in LabVIEW, oggi esiste una soluzione più naturale per molti casi d’uso.
✳️ Le Mappe offrono:
✅ Tipizzazione diretta: non serve wrapping/unwrapping con Variant
✅ Migliore leggibilità del codice (self-documenting)
✅ Serializzazione nativa in JSON/XML per archiviazione o esportazione configurazioni
✅ Supporto al debugging più semplice
✅ Struttura simile ai dizionari Python, più vicina agli standard moderni
Come costruire lo stesso Test Sequencer con Mappe
Puoi sostituire la Variant Lookup Table con una Map<String, Test> dove:
La chiave è il nome o ID del test (String)
Il valore è un oggetto della classe Test, o una delle sue derivate (Test01, Test02, …)
Esempio (semplificato):
Map Insert: key: “Test01” value: new instance of Test01 class
Map Lookup: key = “Test01” Call Test.vi on returned class instance
In termini di codice, la logica del sequencer non cambia, ma la gestione delle associazioni è più robusta e standardizzata, rendendo il codice più adatto a team di sviluppo e a sistemi più estesi.
Quando usare Variant Attribute e quando Mappe?
Scenario Variant Attribute Mappe
Massima flessibilità nei tipi ✅ ❌
Performance elevate ✅ ✅
Serializzazione (file, JSON/XML) ❌ (più complesso) ✅
Lettura/comprensione del codice ❌ ✅
Integrazione con API moderne ❌ ✅
Progetti legacy o < LabVIEW 2019 ✅ ❌
Approfondimenti e ispirazioni:
ftp://ftp.ni.com/pub/events/webcasts/variant_attribute_lookup_table.pdf