State Machine

Che cos’è una state machine?

Una state machine (o finite state machine) è una rappresentazione di un sistema reattivo basato su eventi che passa da uno stato all’altro se viene soddisfatta la condizione che controlla il cambiamento. La maggior parte delle state machine viene rappresentata tramite diagrammi, ma può anche essere descritta in formato testuale.

Sono necessari tre componenti di base per costruire una state machine:

  • Stati: diversi passaggi, attività o modalità operative che distinguono il processo
  • Transizioni: metodi per passare da uno stato all’altro
  • Azioni: eventi o cambiamenti che si verificano durante l’esecuzione di una state machine

I componenti base di una state machine possono essere osservati in un sistema di trasmissione automatica modellato con Stateflow. (Vedi l’esempio)

Le prime state machine venivano utilizzate da matematici e informatici per descrivere i sistemi di calcolo. Semplificavano logiche complesse in una rappresentazione grafica più gestibile. Rispetto alle alternative testuali, la natura visiva di una state machine rende più chiari i rapporti tra i diversi stati del sistema e le condizioni che determinano una transizione o un’azione. Nel tempo, l’uso delle state machine si è esteso alla modellazione di logiche complesse in sistemi dinamici come aerei, automobili, robot e telefoni cellulari.

Tra gli esempi di operazioni contenenti logica complessa figurano:

  • Pianificazione di una sequenza di attività o passaggi per un sistema
  • Definizione della logica di rilevamento guasti, isolamento e ripristino
  • Supervisione del passaggio da una modalità di funzionamento all’altra

È possibile utilizzare una state machine per rappresentare una versione semplificata del cambio automatico di un’auto. L’esempio mostrato di seguito ha quattro stati operativi etichettati come first, second, third e fourth. Come gli ingranaggi che rappresentano, gli stati in una state machine sono esclusivi, ovvero è attivo solo uno stato alla volta. Questa state machine monitora la velocità dell’auto e cambia marcia quando viene raggiunta la soglia di velocità prevista per la marcia in uso.

Una state machine di un sistema di trasmissione automatica in Stateflow passa da una marcia all’altra quando viene raggiunta una soglia di velocità. (Vedi l’esempio)

State machine di Mealy e Moore

Ci sono due standard comuni da considerare quando si progetta una state machine:

  • Mealy: gli output dipendono sia dallo stato attuale che dagli input e vengono gestiti direttamente all'interno delle transizioni.
  • Moore: gli output sono determinati unicamente dallo stato in cui ci si trova e vengono quindi definiti all'interno degli stati stessi.
Un diagramma di una state machine che evidenzia gli stati in ingresso — come l'inserimento di una moneta da cinque o dieci centesimi, oppure nessuna moneta — e i relativi output corrispondenti.

Una state machine di un distributore automatico, modellata secondo la semantica di Mealy, determina se una bibita viene erogata durante le transizioni. (Vedi l’esempio di Stateflow)

Un diagramma di una state machine che mostra cinque stati per un semaforo che controlla due direzioni.

Una state machine di un semaforo, modellata secondo la semantica di Moore, definisce le uscite all’interno dello stato per il colore del segnale stradale. (Vedi l’esempio di Stateflow)

Per saperne di più su queste semantiche e su quando implementarle, consulta la Panoramica sulle macchine di Mealy e Moore.

Concetti di Harel applicati alle state machine

Data la crescente complessità dei componenti software, anche i blocchi fondamentali delle state machine hanno dovuto evolversi. Negli anni ’80, David Harel individuò ulteriori funzionalità necessarie per rappresentare con precisione dettagli più complessi dei sistemi:

  • La gerarchia introduce uno stato (o più stati) genitore per strutturare e compartimentare ulteriormente il progetto.
  • Il parallelismo o l’ortogonalità consente a un unico diagramma di includere più stati che operano in contemporanea.
  • La trasmissione di eventi consente lo scambio di informazioni tra due state machine o stati indipendenti.

Quando queste funzionalità sono abbinate alle state machine, le rappresentazioni vengono chiamate statechart di Harel.

Elementi di un diagramma di stato di Harel sono necessari per definire la complessità aggiuntiva di un sistema di sicurezza. (Vedi l’esempio)

State machine con Stateflow

Stateflow® è un ambiente di programmazione grafico basato sulle finite state machine. Puoi iniziare con semplici diagrammi di stato sulla base dei quali realizzare state machine per modellare la logica complessa di sistemi dinamici. Puoi anche progettare state machine, diagrammi di transizione di stato, diagrammi di flusso, tabelle di transizione di stato e tabelle di verità. Questo approccio può essere utile nello sviluppo di applicazioni per il controllo di supervisione, la pianificazione delle attività, la gestione dei guasti, i protocolli di comunicazione, le interfacce utente e i sistemi ibridi.

È possibile simulare le state machine in Stateflow per valutarne il comportamento in diverse condizioni. Ad esempio, una state machine che modella un ascensore può essere simulata per osservare come reagisce alla pressione di diversi pulsanti o al verificarsi di un guasto. Simulando la state machine, puoi assicurarti che la logica si comporti come previsto, verificare se mancano alcune condizioni e testare diversi scenari.

Per saperne di più sulla modellazione di state machine, consulta Stateflow and Simulink®. Per iniziare a creare state machine in Stateflow, consulta Modellazione di finite state machine.


Vedere anche: logica di controllo, diagramma di stato, sistemi di controllo, sistemi embedded, FDIR, progettazione Model-Based, testing model-based, PackML, modellazione e simulazione, software di simulazione, Model-Based System Engineering (MBSE)

Esercitazioni gratuite

Stateflow Onramp

Inizia ora