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.

Potrebbe interessarti anche

Refactoring in LabVIEW.

Il refactoring in LabVIEW è un processo di ristrutturazione di codice, funzionante correttamente, con lo scopo di renderlo leggibile, manutenibile ed espandibile.

Malleable VI

I VIM o VI malleable, sono Vi polimorfi sul dato. Sono da tenere in considerazione nella creazione delle proprie API.

Variabili Locali e Globali

Local e Global Variable sono utili, facili da implementare, ma attenzione a non abusarne. In questo articolo cerchiamo di vederne l'utilizzo migliore, almeno dal nostro punto di vista.

Manutenzione predittiva: significato e obiettivi

Cosa significa svolgere manutenzione predittiva? Effettuare interventi mirati sui macchinari, per prevenire i guasti con largo anticipo.

WATS e OEE

WATS ha migliorato una delle sue features più importanti: l’OEE. Il focus sulla produttività è una sfida costante per le imprese, non di meno in un settore competitivo come quello della manifattura elettronica.

La manutenzione predittiva

Manutenzione predittiva per intervenire sul macchinario prima che si guasti. Fermi di produzione evitati, riduzione costi e pianificazione interventi.