Design Pattern #2 – Simple State Machine

Ogni programmatore è alla ricerca di un modo più rapido e semplice per sviluppare software, uno strumento adatto è la macchina a stati.

Simple State Machine Pattern (SSM)

Nel precedente articolo abbiamo visto il primo modello di progettazione, il General VI Pattern, oggi incominceremo a parlare di macchina a stati.

Ogni programmatore è alla ricerca di un modo più rapido e semplice per sviluppare software, uno strumento adatto è la macchina a stati.

Ma cos’è la macchina a stati in labVIEW?

Detta in parole semplici la Simple State Machine Pattern consiste in una Case Structure all’ interno di un While Loop, e almeno uno shift register per memorizzare lo stato corrente all’iterazione.

Il ciclo while offre la possibilità di eseguire il codice fino a quando al conditional terminal viene dato valore falso ( es. un bottone).

Il Case Structure consente di variare il codice da eseguire, all’ interno di una macchina a stati semplice vi sono diversi casi, ma solitamente sono già determinati nell’ iterazione precedente.

La Simple State machine  viene usata per VI che possono essere facilmente divisibili per compiere multiple azioni divise per casi. Questo Pattern è composto da una fase Startup, una fase Shutdown e differenti codici/azioni eseguiti dalla fase principale dell’ applicazione, in base a condizioni che si verificano nel codice.

Solitamente all’ interno del codice è presente una costante enum che deve essere definita(TypeDef), gli enumeratori sono molto utili quando si parla di state machine perché rendono il tutto più leggibile e i casi possibili saranno solo quelli esplicitati nella typedef.

Questo vantaggio però limita la flessibilità e l’utilizzo di funzionalità offerte invece utilizzando come messaggio di transizione, le stringhe.

L’utilizzo di stringhe ha il contro che è potenzialmente più facile scrivere messaggi che non trovano corrispondenza di caso, ma utilizzando degli accorgimenti questo unico svantaggio è eliminato.

Il primo accorgimento è utilizzare lo stato di Default che verrà eseguito ogni volta non ci sia un match tra il messaggio e il case. Questo per noi sarà un caso da gestire come errore di sviluppatore e inserendo nel msg error, il messaggio ricevuto, possiamo intercettarlo in fase di debug.

Altro semplice aiuto è quello di utilizzare il case insensitive match, disponibile solo dalle versioni 2015 in su.

Case Insensitive match

Un approfondimento sul tema Stringhe vs Enum è discusso qui.

Ci sono altri casi che riteniamo obbligatori quando si implementa una SSM.

Idle

Il caso ‘idle’ è un caso di attesa a fare un operazione, lo approfondiremo nel prossimo articolo sull’ utilizzo della Event Strucure. In questo caso si dovrebbe mettere sempre una logica di attesa di un determinato evento o un attesa di input in generale.

Init

Il caso Init inserisce le logiche di apertura di riferimenti, e tutte le operazioni che devono essere eseguite in una fase di inizializzazione.

Il fatto di inserirlo come stato all’interno della SM, ci offre la possibilità di richiamarlo anche durante l’esecuzione.

Error

Centralizziamo gli errori per poter eseguire in unico spazio il codice di gestione e le azioni da eseguire in caso di errore. Questo viene combinato con una case di ErrorTrap da posizionare in uscita alla struttura case principale e che devia il messaggio ad un messaggio di Error.

Exit

In questo stato gestiamo un uscita con CleanUp e tutte le operazioni di chiusura riferimenti ecc.

Quindi i casi da inserire sempre sono 5 Init,Idle,Default,Error,Exit

Un implementazione di macchina a stati è la JKI State Machine, che potete scaricare da qui, utilizzando il VI Package Manager.

Nella prossima parte vedremo la funzionalità della Event-Based Simple State Machine

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.