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
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
.
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.
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.
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.
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.
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.
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.
Esempi e consigli pratici
Riferimenti software
Vedere anche: control logic, state machine, control systems, embedded systems, fdir