Costruisci il tuo test sequencer con OOP e Variant LookUpTable

Utilizzare una Variant lookup table, basata su Set/Get Variant Attribute, vediamo come utilizzarla con la programmazione ad oggetti, realizzando un semplice sequencer.

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:

  1. Fare clic con il tasto destro su “My Computer” → New → Class e assegnare il nome Test.
  2. Selezionare la classe Test, fare clic con il tasto destro e scegliere “New → VI from Dynamic Dispatch Template”.
  3. 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:

  1. Creare una nuova classe (Test01).
  2. Aprire le proprietà della classe e selezionare la scheda Inheritance.
  3. Premere “Change Inheritance” e selezionare Test come classe padre.
  4. Eseguire l’override del metodo Test.vi:
  5. Fare clic con il tasto destro sulla classe Test01 → New → VI from Override.
  6. Selezionare Test.vi e confermare.
  7. 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:

  1. Creare un nuovo VI (“New VI” da “My Computer”).
  2. Trascinare nel diagramma Test01 e Test02.
  3. Aprire la palette Variant, selezionare Set Variant Attribute e aggiungerne due istanze.
  4. 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

https://forums.ni.com/t5/LabVIEW-Development-Best/Using-Variant-Attributes-for-High-Performance-Lookup-Tables-in/ba-p/3478922

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