Design Pattern #5- Queued State Machine

la macchina a stati in coda è un particolare stile di implementazione flessibile e versatile, facile da mantenere ed efficiente dal punto di vista computazionale

Queued State Machine

Nel precedente articolo abbiamo visto il funzionamento della Macchina a Stati Multipla, oggi incominceremo a parlare di Queued State Machine.

Come suggerito dal nome la Queued state machine lavora con le code,  per capire bene come funziona questo tipo di macchina a stati è necessario spiegarvi la funzionalità di alcune funzioni necessarie all’ interno della nostra applicazione.

Obtain Queue:  Crea un riferimento a una coda, è possibile specificare il nome, tipo di dato e grandezza della coda.

Trattandosi di un riferimento e non del dato potremo ulizzarlo per riferirci al dato da altre parti del codice anche da loop paralleli.

Enqueue Element: Aggiunge un elemento alla coda, necessita della Reference e dell’elemento da inserire.

Enqueue accoda i dati in modalità FIFO, utilizza “Enqueue Element At Opposite End” per accodare in LIFO.

Dequeue Element: Rimuove un elemento dal davanti della coda (First Output) e ritorna l’elemento rimosso.

Importante: Se non ci sono dati in coda e non è stato impostato il timeout (-1) rimane fermo attendendo il dato in coda.

Release Queue: Rilascia il riferimento alla coda, distruggendola.

Tornando alla QSM è un particolare stile di implementazione flessibile e versatile, facile da mantenere ed efficiente dal punto di vista computazionale.

Soprattutto data la possibilità di collegarsi mediante reference agli altri loop è espandibile.

L’utilizzo delle Queues quindi porta benefici notevoli.

Si introduce uno scambio di dati message based , ovvero inviamo un messaggio e lo riceviamo da altre parti del codice(vedremo in seguito non necessariamente nello stesso loop).

Esempio di QSM

Abbiamo realizzato una piccola libreria per incapsulare un tipo di messaggio che possa portare sia lo stato sia i parametri.

Per farlo utilizziamo un cluster con una stringa (msg) e un variant(dato).

Utilizzando le code rimuovi la possibilità di perdita di dati, rendi loops paralleli sincronizzati e non necessita il polling.

Le nostra SM come quelle standard, utilizza i 5 casi principali che abbiamo visto nei precedenti articoli, ovvero: Initialize, Defaul, Event, Error ed Exit.

All’ interno della nostra macchina stati abbiamo utilizzato anche un tipo di dato un pò insolito chiamato Variant, che può essere visto come un contenitore generico per gli altri tipi di dati, rendendo l’applicazione più versatile.

In conclusione si può quindi dire che la QSM è sicuramente una macchina a stati che garantisce diversi vantaggi.

Viene implementata in diversi framework in modi e meccanismi diversi, la sua principale evoluzione in framework è il QMH.

La Macchina a Stati in coda rimane il pattern di programmazione tra i più utilizzati nel mondo labVIEW, per la sua possibilità di passare dati tra loop paraleli e per non perdere i dati.

Presenta quindi scalabilità e flessibilità.

Nel prossimo articolo vedremo la funzionalità del Produer/Consumer Pattern.

Ora puoi approfondire questo argomento con uno dei nostri corsi HandsON.

Protocolli Industriali con LabVIEW

Scoprire i protocolli industriali, come integrarli in labview. In questo corso impararerai a implementare toolkit e librerie, per utilizzare protocolli come ModBus e OPC-UA
Intermedio

Liv. Intermedio

OnLine; Con Istrutttore

3 gg

LabVIEW UI/UX

Lo sviluppo di applicativi per Testing e Misure vede sempre più una necessità di integrare interfacce curate soprattutto in prospettiva dell'utilizzo da utenti meno esperti e nel considerare di ridurre errri e incertezze dovute spesso ad un interfaccia poco chiara e intuitva.
Intermedio

Liv. Intermedio

OnLine; Con Istrutttore

3 gg

Corso LabVIEW StateMachine Pro

Il paradigma di programmazione convenzionale è il data flow. Siamo abituati ad usare il cluster di errore per gestire la sequenza di esecuzione dei nodi in labview. La macchina a Stati, permette di gestire l'ordine di esecuzione condizionato all'uscita dello stato in esecuzione. L'implementazione di questo pattern permette quindi l'integrazione del diagramma di stato e una razionalizzazione dell'applicazione, diventando più flessibile, leggibile e manutenibile.
INTERMEDIO

Liv. INTERMEDIO

In Presenza

1 gg

Scopri i nostri servizi e Prodotti, Contattaci ora!

Altri articoli dal nostro Blog

Per diventare un programmatore LabVIEW esperto, è necessario dedicare diversi mesi o anche anni al perfezionamento delle proprie competenze. Questo processo include l’apprendimento di funzionalità avanzate come la gestione dei dati, l’interfacciamento hardware e l’ottimizzazione delle prestazioni.
LabVIEW, un ambiente di programmazione grafica ampiamente utilizzato per il controllo e l’automazione, offre potenti strumenti di sincronizzazione come eventi, code e notificatori per gestire la comunicazione tra processi paralleli. Tuttavia, quando si affronta la gestione del timeout su funzioni di sincronismo, è cruciale adottare strategie efficaci per garantire la reattività del sistema.