Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Sincronizzazione degli stati paralleli tramite la trasmissione di eventi

Gli eventi locali consentono di coordinare gli stati paralleli, permettendo quindi a uno stato di attivare una transizione o un'azione in un altro stato dello stesso grafico Stateflow®. Per trasmettere un evento da uno stato a un altro, utilizzare l'operatore send con il nome dell'evento e il nome di uno stato attivo:

send(eventName,stateName)

Quando si trasmette un evento, l'evento ha effetto sullo stato ricevente e su tutti i gli stati secondari nella gerarchia di quel dato stato.

Modellazione di un sistema di sicurezza domestica

Questo esempio utilizza gli eventi locali come parte della progettazione di un sistema di sicurezza domestica.

Il sistema di sicurezza è composto da un allarme e da tre sensori antiintrusione: un sensore per le porte, un sensore per le finestre e un rilevatore di movimento. Dopo che il sistema rileva un'intrusione, si ha a disposizione un breve lasso di tempo per disattivare l'allarme. In caso contrario, il sistema esegue una chiamata alle forze dell’ordine.

Il grafico modella ciascun sensore utilizzando uno di questi stati paralleli:

  • Lo stato parallelo Door modella il sensore della porta. Il segnale di input D_mode seleziona la modalità Active o Disabled per questo sensore. Quando il sensore è attivo, il segnale di input Door_sens indica una possibile intrusione.

  • Lo stato parallelo Win modella il sensore della finestra. Il segnale di input W_mode seleziona la modalità Active o Disabled per questo sensore. Quando il sensore è attivo, il segnale di input Win_sens indica una possibile intrusione.

  • Lo stato parallelo Motion modella il rilevatore di movimento. Il segnale di input M_mode seleziona la modalità Active o Disabled per questo sensore. Quando il sensore è attivo, il segnale di input Mot_sens indica una possibile intrusione.

Per ridurre l'effetto dei falsi positivi sporadici, il rilevatore di movimento incorpora un progetto di debouncing, in modo che solo un segnale di attivazione positivo prolungato produca un'allerta. I sensori di porte e finestre, invece, interpretano un singolo segnale di attivazione positivo come un'intrusione ed emettono un'allerta immediata.

Un quarto stato parallelo chiamato Alarm modella le modalità operative del sistema di allarme. Il segnale di input Alarm_active seleziona la modalità On o Off per l'allarme. Se un sensore rileva un'intrusione mentre il sottosistema di allarme è attivo, il sensore trasmette un evento locale Alert allo stato Alarm. Nello stato secondario On dello stato Alarm, l'evento attiva la transizione dallo stato secondario Idle allo stato secondario Pending. Quando Pending si attiva, un segnale acustico avverte gli abitanti della casa della possibile intrusione. In caso di allarme accidentale, gli abitanti della casa hanno poco tempo a disposizione per disattivare il sistema di sicurezza. Se l'allarme non viene disattivato entro questo dato periodo di tempo, il sistema esegue una chiamata alle forze dell'ordine per chiedere aiuto, prima di tornare in modalità Idle.

Coordinamento con altri blocchi Simulink

I grafici Stateflow possono anche utilizzare gli eventi per comunicare con altri blocchi in un modello di Simulink®.

Eventi di output

Un evento di output è un evento che si verifica in un grafico Stateflow ma è visibile nei blocchi Simulink esterni al grafico. Questo tipo di evento consente a un grafico di notificare ad altri blocchi di un modello gli eventi che si verificano nel grafico. In questo esempio, gli eventi di output Sound e call_police guidano i blocchi esterni che gestiscono il suono dell'allarme e la chiamata alle forze dell'ordine. Il grafico trasmette questi eventi quando l'evento locale Alert attiva la transizione allo stato secondario Pending dello stato Alarm. In particolare, nello stato secondario Pending, l'azione entry trasmette l'evento Sound. Allo stesso modo, l'azione di condizione sulla transizione da Pending a Idle trasmette l'evento call_police. In ogni caso, l'azione che trasmette l'evento di output utilizza l'operatore send con il nome dell'evento:

send(eventName)

Ogni evento di output corrisponde a una porta di output del grafico. In base alla configurazione, il segnale corrispondente può controllare un sottosistema ad attivazione o un sottosistema di chiamata di funzione. Per configurare un evento di output:

  1. Nella scheda Modeling (Modellazione), sotto Design Data (Dati di progettazione), selezionare Symbols Pane (Riquadro dei simboli) e Property Inspector (Controllo delle proprietà).

  2. Nel riquadro Symbols (Simboli), selezionare l'evento di output.

  3. Nel Property Inspector (Controllo delle proprietà), impostare Trigger su una di queste opzioni:

  • Either edge: la trasmissione dell'evento di output determina l'alternanza tra zero e uno del segnale in uscita.

  • Function call: la trasmissione dell'evento di output determina un evento di chiamata di funzione di Simulink.

In questo esempio, gli eventi di output utilizzano gli edge trigger per attivare una coppia di sottosistemi latch nel modello di Simulink. Quando ciascun latch rileva un cambiamento di valore nel proprio segnale di input, emette brevemente un valore pari a uno prima di tornare a un output pari a zero.

Eventi di input

Un evento di input è un evento che si verifica in un blocco Simulink ma è visibile in un grafico Stateflow. Questo tipo di evento consente ad altri blocchi Simulink, compresi altri grafici Stateflow, di notificare a un grafico specifico gli eventi che si verificano al di fuori di esso. In questo esempio, l'evento di input sl_call controlla la temporizzazione del debouncer del rilevatore di movimento e il breve ritardo prima dell'invio della chiamata alle forze dell'ordine. In ciascuna istanza, l'evento si verifica all'interno di una chiamata all'operatore temporale after, che attiva una transizione dopo che il grafico riceve l'evento un certo numero di volte.

Un blocco esterno di Simulink invia un evento di input attraverso un segnale collegato alla porta di attivazione del grafico Stateflow. In base alla configurazione, un evento di input deriva da una variazione del valore del segnale o da una chiamata di funzione da un blocco Simulink. Per configurare un evento di input:

  1. Nella scheda Modeling (Modellazione), sotto Design Data (Dati di progettazione), selezionare Symbols Pane (Riquadro dei simboli) e Property Inspector (Controllo delle proprietà).

  2. Nel riquadro Symbols (Simboli), selezionare l'evento di input.

  3. Nel Property Inspector (Controllo delle proprietà), impostare Trigger su una di queste opzioni:

  • Rising: il grafico si attiva quando il segnale di input passa da zero o da un valore negativo a un valore positivo.

  • Falling: il grafico si attiva quando il segnale di input passa da un valore positivo a zero o a un valore negativo.

  • Either: il grafico si attiva quando il segnale di input attraversa lo zero mentre cambia in entrambe le direzioni.

  • Chiamata di Function: il grafico si attiva tramite una chiamata di funzione da un blocco Simulink.

In questo esempio, un blocco Simulink Function-Call Generator controlla la tempistica del sistema di sicurezza attivando l'evento di input sl_call attraverso chiamate di funzione periodiche.

Analisi dell'esempio

In questo esempio, il grafico Stateflow presenta input da diversi blocchi Manual Switch e output verso una coppia di sottosistemi latch che si collegano ai blocchi Display. Durante la simulazione, è possibile:

  • Abilitare i sottosistemi di allarme e dei sensori e attivare i rilevamenti di intrusione facendo clic sui blocchi Switch.

  • Guardare l'animazione del grafico che evidenzia i vari stati attivi del grafico.

  • Visualizzare i segnali di output nel blocco Scope e nel Simulation Data Inspector (Controllo dei dati di simulazione).

Ad esempio, si supponga di attivare i sottosistemi di allarme e dei sensori, di disattivare gli attivatori del sensore e di avviare la simulazione. Durante la simulazione, eseguire le seguenti azioni:

  1. Al tempo $t = 250$ secondi, si attiva il sensore delle porte. L'allarme inizia a suonare (Sound = 1), quindi il sistema di allarme viene disattivato immediatamente. Disattivare l'attivazione del sensore della porta e riattivare l'allarme.

  2. Al tempo $t = 520$ secondi, si attiva il sensore delle finestre e l'allarme inizia a suonare (Sound = 0). Questa volta l'allarme non viene disattivato. Intorno al tempo $t = 600$, il sistema di sicurezza esegue una chiamata alle forze dell’ordine (call_police = 1). I segnali Sound e call_police continuano a passare da zero a uno ogni 80 secondi.

  3. Al tempo $t = 1400$ secondi, l'allarme viene disattivato. I segnali Sound e call_police cessano di alternarsi.

In Simulation Data Inspector (Controllo dei dati di simulazione) viene visualizzata la risposta dei segnali Sound e call_police alle azioni eseguite.

Vedi anche

Argomenti complementari