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

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.
L’azienda leader nel settore elettrico in Ungheria ha collaborato con Bytelabs per implementare un sistema avanzato di collaudo e caratterizzazione degli avvolgimenti elettrici. Utilizzando tecnologie come Advantech ADAM 5000 TCP, LabVIEW e il power meter Yokogawa WT5000, il sistema permette test ad alta velocità, salvataggio sicuro dei dati su un server SQL e creazione automatica di report PDF. La flessibilità di eseguire test manuali o automatici ha migliorato l’efficienza operativa, consentendo un collaudo più rapido e una tracciabilità dei prodotti ottimizzata. L’implementazione ha portato a significativi miglioramenti nell’efficienza e nella qualità del processo di collaudo e caratterizzazione degli avvolgimenti elettrici.
La certificazione dei prodotti è fondamentale per garantire la sicurezza e la qualità dei prodotti che vengono immessi sul mercato. Tra le diverse fasi del processo di certificazione, i test giocano un ruolo centrale, sia per garantire la conformità del prodotto ai requisiti normativi sia per verificare la sua affidabilità e sicurezza.