In LabVIEW la DVR (Data Value by Reference) permette di passare dal modello di programmazione sul dato ad un approccio asincrono basato su reference.
Tipicamente il modello LabVIEW usa il flusso di dati ed è suggeribile utilizzarlo al massimo, spesso però capita di dover condividere dati tra più task o in generale poter condividere i dati in modo asincrono, utilizzando uno spazio memoria e puntando a questo con una reference.
Come funziona?
Vediamo come creare un cronometro, con API per Creazione, Reset, Read e Distruzione.
CreateChrono
New DVR crea la reference.
Ora creiamo la funzione di start
La struttura in place elemet con DataValueReference Read (a destra) and Write (a sinistra), legge il dato lo utilizza nel codice e lo riscrive sulla memoria a cui punta la reference.
La funzione GetTime
Anche in questo caso riutilizzamo la struttura in place element per riprendere il dato dalla memoria e calcolare il tempo trascorso per differenza dallo start time.
Ecco il test dell’API creata. Sono create due sessioni di cronometro indipendenti.
Meccanismi di condivisione byRef ce ne sono diversi, i più diffusi Queue (Single Element Queue), Notifier.
DVR diversamente, si basa su “In Place element Structure” ottimizzando l’allocazione di memoria, riducendo la duplicazione.
È anche una valida sostituzione delle Functional Global o meglio Application Engine, rispetto a queste ultime otteniamo migliore incapsulamento e protezione dei dati, una libreria API che separa le funzioni in modo più scalabile, funzioni di create e destroy per creare sessioni programmaticamente.
Memoria e OOP by ref
Con l’introduzione delle classi e della programmazione ad oggetti, che in LabVIEW rimane byData, ritorna maggiormente l’esigenza di avere uno switch byValue, byRef e contrario.
La DVR aiuta a condividere dati e funzionalità tra i dati.
Quando si usa con le classi si può poi evitare o abilitare la condivisione con le classi discendenti, configurabile nelle proprietà di classe.