I Malleable VI sono vi polimorfi sul dato.
Possono quindi adattarsi al dato di input trasformando di conseguenza il dato in uscita.
A differenza dei VI polimorfi che erano collezioni di vi’s incapsualti in un modello di vi chiamato Polimorfo, in questo caso non si devono fare diversi vi, sarà il vi che si adatta al dato.
Ovviamente necessitano di alcuni accorgimenti obbligatori.
Abbiamo provato a fare un esempio per farne capire non solo la funzionalità ma anche l’enorme comodità.
Obiettivo è quello di realizzare un Buffer Circolare polvalente per qualsiasi tipo di dato.
Scegliamo di utilizzare l’API Queue Operations

Creazione del Buffer

Se salviamo così comìè il codice come .vim (estensione per malleable vi) notiamo che la freccia sarà rotta.
Seguendo le indicazioni vediamo che il vi deve essere impostato come esecuzione rientrante preallocata, SubVI in linea e togliendo la spunta invece dalla automatic error handling e AllowDebug.

Queste impostazioni saranno da ripetere per tutti i file che vogliamo salvare di tipo vim.
Sfruttiamo il vi Loss Enqueue per inserire i nuovi elementi, perdendo il più vecchio, il Get Queue Status, con il flag return data a True.

L’ultimo VI di questa libreria è il Destroy Queue che distrugge la coda e dealloca la memoria.

Creiamo ora un Test VI per verificare il funzionamento


L’introduzione dei VI Malleable, elimina la necessità di creare covertitori per i vari tipi di dato e direttamente le funzioni si adattano al dato, si deve prestare molta attenzione alle impostazioni che potrebbero modificarne il funzionaento e il risultato.
Troviamo già diversi VIM nelle palette riconoscibili dal colore arancio.

Approfondimenti
https://www.ni.com/docs/en-US/bundle/labview/page/lvconcepts/malleable_vis_intro.html