Diagramma di stato

Che cosa sono i diagrammi di stato?

Un diagramma di stato o un diagramma di transizioni di stato è una rappresentazione grafica del numero finito di stati di una macchina a stati, delle transizioni di stato e delle regole che disciplinano le transizioni. I diagrammi di stato vengono utilizzati come punti di partenza di alto livello per progettazioni software complesse, in quanto la loro semplicità consente di comunicare chiaramente modalità di funzionamento diverse.

In un diagramma di stato:

  • I riquadri rappresentano gli stati o le diverse modalità di funzionamento
  • Le frecce indicano la transizione da uno stato all’altro
  • Il testo associato a ciascuna freccia rappresenta la regola che disciplina la transizione
Figura 1: diagramma di stato di un forno a microonde con 3 modalità di funzionamento (off, riscaldamento e standby), modellato con Stateflow.

Figura 1. Diagramma di stato di un forno a microonde con 3 modalità di funzionamento (off, riscaldamento e standby), modellato con Stateflow.

Gli output o le azioni di una macchina a stati sono descrizioni del comportamento di ogni stato del sistema. In base a dove viene definito l’output della macchina, le macchine a stati si classificano in due tipologie: Moore e Mealy.

Implementazione di Moore di un diagramma di stato

In questo tipo di macchina a stati, gli output dipendono esclusivamente dallo stato del sistema e sono definiti come azioni degli stati. Indipendentemente da come si entra in un determinato stato, l’azione dello stato rimane la stessa. Ad esempio, nel diagramma di stato della Figura 2, l’output di Heating (riscaldamento) rimane sempre uguale, indipendentemente dal fatto che la transizione avvenga dallo stato Idling (standby) o OFF.

Figura 2: diagramma di stato modellato usando l’implementazione di Moore con Stateflow.

Figura 2. Diagramma di stato modellato usando l’implementazione di Moore con Stateflow.

Implementazione di Mealy di un diagramma di stato

In questo tipo di macchina a stati, gli output dipendono non solo dallo stato del sistema, ma anche dagli input ricevuti dal sistema. Come mostrato nel diagramma di stato della Figura 3, in un’implementazione di Mealy gli output sono definiti in corrispondenza delle transizioni.

Figura 3: diagramma di stato modellato usando l’implementazione di Mealy con Stateflow.

Figura 3. Diagramma di stato modellato usando l’implementazione di Mealy con Stateflow.

Con l’implementazione di Mealy, i diagrammi di stato possono essere riorganizzati e semplificati con l’aggiunta di loop per aggiornare gli output della macchina. Per le progettazioni più complesse, questo aspetto è ancora più vantaggioso.

Figura 4: diagramma di stato riorganizzato, modellato usando l’implementazione di Mealy con Stateflow.

Figura 4. Diagramma di stato riorganizzato, modellato usando l’implementazione di Mealy con Stateflow.

Sia le macchine di Mealy che le macchine di Moore sono molto utilizzate per via della loro semplicità e chiarezza e i due stili vengono spesso uniti in un unico diagramma di stato.

Statechart: diagrammi di stato ottimizzati

I blocchi costitutivi di base dei diagrammi di stato non sono sufficienti affinché un unico diagramma possa rappresentare dei sistemi logici complessi. Per catturare i dettagli di progettazione più intricati in modo efficace occorrono funzionalità aggiuntive. Gli statechart, noti anche come statechart di Harel, aggiungono funzionalità quali la gerarchia, il parallelismo o l’ortogonalità e la trasmissione di eventi.

La funzionalità legata alla gerarchia consente un’ulteriore compartimentazione della progettazione e può ridurre il numero di linee di transizione richieste tra gli stati. Per creare una gerarchia all’interno delle macchine a stati è possibile introdurre gli stati genitore. Ad esempio, nello statechart della Figura 5, lo stato genitore di Baking (cottura) comprende gli stati secondari di Heating (riscaldamento) e Idle (standby), oltre al diagramma di stato associato.

Figura 5: statechart che mostra la gerarchia, modellato con Stateflow.

Figura 5. Statechart che mostra la gerarchia, modellato con Stateflow.

Le funzionalità di parallelismo o ortogonalità consentono a un unico statechart di includere più stati che operano in contemporanea. Ad esempio, nello statechart della Figura 6, Oven (forno) e Oven_Light (luce forno) possono essere intesi come due macchine a stati indipendenti che operano in contemporanea. Il diagramma rappresenta il sistema nel suo complesso in un unico grafico contenente due macchine a stati parallele.

Figura 6: statechart che mostra la gerarchia e il parallelismo, modellato con Stateflow.

Figura 6. Statechart che mostra la gerarchia e il parallelismo, modellato con Stateflow.

Le funzionalità di trasmissione di eventi ampliano le funzioni del sistema consentendo lo scambio di informazioni tra due macchine a stati o stati indipendenti. Nel caso precedente, le due macchine a stati erano indipendenti, in quanto il funzionamento della luce del forno non dipendeva dal sistema di riscaldamento del forno. Con la trasmissione di eventi, è possibile aggiungere una funzionalità che spenga la luce del forno al termine della cottura usando un semplice comando nella logica dello stato Oven (forno), come evidenziato nello statechart della Figura 7.

Figura 7: statechart che mostra la gerarchia, il parallelismo e la trasmissione di eventi, modellato con Stateflow.

Figura 7. Statechart che mostra la gerarchia, il parallelismo e la trasmissione di eventi, modellato con Stateflow.

Gli statechart con funzionalità di gerarchia, parallelismo e trasmissione di eventi sono utili per rappresentare funzioni di sistemi complessi senza diagrammi di stato caotici.

Diagrammi di stato e statechart con Stateflow

Stateflow® è un ambiente di programmazione grafico basato sulle macchine a stati finiti. Con Stateflow è possibile iniziare con semplici diagrammi di stato sulla base dei quali realizzare degli statechart per modellare la logica complessa di sistemi dinamici, tra cui le trasmissioni automatiche, i sistemi robotici, i telefoni cellulari e molto altro ancora. Applicazioni di questa logica complessa includono:

Se la logica creata serve a controllare un componente software, è possibile utilizzare le funzionalità di generazione automatica di codice di Simulink per convertire lo statechart in codice C, HDL o PLC per la distribuzione.

Per ulteriori informazioni sulla modellazione dei diagrammi di stato, comprese queste tecniche avanzate, fare riferimento a Stateflow e Simulink. L’esempio, Modellazione di un sistema di sicurezza, dimostra la gerarchia, il parallelismo e la trasmissione di eventi in Stateflow.


Riferimenti software


FAQ sul Diagramma di stato

Un diagramma di stato è una rappresentazione grafica del numero finito di stati di una macchina a stati, delle transizioni di stato e delle regole che governano tali transizioni. Utilizza riquadri per rappresentare stati o modalità operative, frecce per indicare le transizioni e testo sulle frecce per rappresentare le regole di transizione.

I diagrammi di stato rappresentano diverse modalità operative e le transizioni tra di esse in un sistema, mentre i diagrammi di flusso mostrano generalmente passaggi di processo sequenziali. I diagrammi di stato sono utilizzati come punto di partenza ad alto livello per la progettazione di software complessi, poiché la loro semplicità consente di comunicare chiaramente le diverse modalità operative.

Nelle macchine a stati di Moore, gli output dipendono solo dallo stato corrente e sono definiti come azioni di stato. Nelle macchine a stati di Mealy, gli output dipendono sia dallo stato sia dagli ingressi e sono definiti nelle transizioni.

I diagrammi di stato, noti anche come diagrammi di Harel (Harel charts), sono versioni avanzate dei diagrammi di stato che aggiungono funzionalità quali gerarchia, parallelismo (o ortogonalità) e broadcast di eventi per rappresentare dettagli di progettazione complessi in sistemi logici articolati.

Stateflow è un ambiente di programmazione grafica basato su macchine a stati finiti che consente di modellare logiche complesse in sistemi dinamici per applicazioni quali controllo di supervisione, gestione dei guasti, schedulazione delle attività, logica di interfaccia e protocolli di comunicazione.

Sì. I diagrammi di stato permettono la gerarchia tramite stati padre che contengono sottostati, contribuendo a organizzare la progettazione e a ridurre il numero di transizioni necessarie tra gli stati.

Il parallelismo, o ortogonalità, consente a un singolo diagramma di stato di includere più stati che operano simultaneamente, rappresentando l'intero sistema in un'unica rappresentazione grafica contenente due o più macchine a stati parallele.

La diffusione degli eventi consente lo scambio di informazioni tra due stati indipendenti o tra due macchine a stati. Quando un evento viene trasmesso (broadcast), può attivare transizioni, azioni o chiamate di funzione.

Sì. È possibile utilizzare le funzionalità di generazione automatica del codice di Simulink per convertire i diagrammi di stato in codice C, HDL o PLC per il deployment.


Vedere anche: Modellazione ad Eventi, Sistemi di controllo, logica di controllo, macchina a stati, sistemi di controllo, sistemi embedded, FDIR