Diagramma di stato

Comunicazione chiara di progettazioni software complesse in una forma grafica semplificata

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.

Vedere anche: control logic, state machine, control systems, embedded systems