Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Synchroniser des états parallèles par la diffusion des événements

Les événements locaux vous aident à coordonner des états parallèles en permettant à un état de déclencher une transition ou une action dans un autre état du même diagramme Stateflow®. Pour diffuser un événement d’un état vers un autre, utilisez l’opérateur send avec le nom de l’événement ainsi que le nom d’un état actif :

send(eventName,stateName)

Lorsque vous diffusez un événement, il prend effet dans l’état récepteur et dans tous les sous-états de la hiérarchie de cet état.

Modéliser un système de sécurité domestique

Cet exemple utilise des événements locaux pour concevoir un système de sécurité domestique.

Le système de sécurité comprend une alarme et trois capteurs anti-intrusion : un capteur de porte, un capteur de fenêtre et un capteur de mouvement. Après la détection d’une intrusion par le système, vous disposez d’un bref laps de temps pour désactiver l’alarme. Sinon, le système appelle la police.

Le diagramme modélise chaque capteur avec l’un des états parallèles suivants :

  • L’état parallèle Door modélise le capteur de porte. Le signal d’entrée D_mode choisit le mode Active ou Disabled pour ce capteur. Lorsque le capteur est actif, le signal d’entrée Door_sens indique une éventuelle intrusion.

  • L’état parallèle Win modélise le capteur de fenêtre. Le signal d’entrée W_mode choisit le mode Active ou Disabled pour ce capteur. Lorsque le capteur est actif, le signal d’entrée Win_sens indique une éventuelle intrusion.

  • L’état parallèle Motion modélise le capteur de mouvement. Le signal d’entrée M_mode choisit le mode Active ou Disabled pour ce capteur. Lorsque le capteur est actif, le signal d’entrée Mot_sens indique une éventuelle intrusion.

Pour atténuer l’effet des faux positifs intermittents, le capteur de mouvement intègre un anti-rebond de sorte que seul un signal de déclenchement positif prolongé produit une alerte. En revanche, les capteurs de porte et de fenêtre interprètent un seul signal de déclenchement positif comme une intrusion et émettent immédiatement une alerte.

Un quatrième état parallèle nommé Alarm modélise les modes de fonctionnement du système d’alarme. Le signal d’entrée Alarm_active choisit le mode On ou Off pour l’alarme. Si un capteur détecte une intrusion alors que le sous-système d’alarme est activé, il diffuse l’événement local Alert à l’état Alarm. Dans le sous-état On de l’état Alarm, l’événement déclenche une transition du sous-état Idle vers le sous-état Pending. Lorsque Pending devient actif, un avertissement sonore prévient les occupants de l’éventuelle intrusion. En cas d’alarme accidentelle, les occupants disposent d'un temps court pour désactiver le système de sécurité. En l’absence de désactivation dans le délai imparti, le système appelle la police avant de revenir au mode Idle.

Assurer la coordination avec d’autres blocs Simulink

Les diagrammes Stateflow peuvent également utiliser des événements pour communiquer avec d’autres blocs dans un modèle Simulink®.

Événements de sortie

Un événement de sortie est un événement qui se produit dans un diagramme Stateflow mais qui est visible dans des blocs Simulink extérieurs à celui-ci. Ce type d’événement permet à un diagramme d’informer les autres blocs d’un modèle, des événements qui s’y produisent. Dans cet exemple, les événements de sortie Sound et call_police dirigent des blocs externes qui gèrent l’avertissement sonore et l’appel à la police. Le diagramme diffuse ces événements lorsque l’événement local Alert déclenche la transition vers le sous-état Pending de l’état Alarm. Plus particulièrement, dans le sous-état Pending, l’action en entrée diffuse l’événement Sound. De la même manière, l’action conditionnelle de la transition de Pending vers Idle diffuse l’événement call_police. Dans chaque cas, l’action qui diffuse l’événement en sortie utilise l’opérateur send avec le nom de l’événement :

send(eventName)

Chaque événement en sortie est mappé sur un port de sortie sur le diagramme. Suivant la configuration, le signal correspondant peut commander un Triggered Subsystem (sous-système déclenché) ou un Function-Call Subsystem (sous-système d’appel de fonction). Pour configurer un événement en sortie :

  1. Dans l’onglet Modeling, sous Design Data, sélectionnez Symbols Pane et Property Inspector.

  2. Dans le volet Symbols, sélectionnez l’événement en sortie.

  3. Dans Property Inspector, définissez Trigger sur l’une des options suivantes :

  • Either edge : la diffusion de l’événement en sortie fait alterner le signal sortant entre zéro et un.

  • Function call : la diffusion de l’événement en sortie provoque un événement function-call (appel de fonction) Simulink.

Dans cet exemple, les événements en sortie utilisent des déclencheurs sur front pour activer deux sous-systèmes de verrouillage dans le modèle Simulink. Lorsque chaque verrou (latch) détecte un changement de valeur dans son signal d’entrée, il émet brièvement une valeur de un avant de revenir à une sortie de zéro.

Événements en entrée

Un événement en entrée est un événement qui se produit dans un bloc Simulink mais qui est visible dans un diagramme Stateflow. Ce type d’événement permet à d’autres blocs Simulink, y compris d’autres diagrammes Stateflow, d’informer un diagramme spécifique des événements qui se produisent en dehors de celui-ci. Dans cet exemple, l’événement en entrée sl_call contrôle la temporisation de l’anti-rebond du capteur de mouvement et le bref délai avant l’appel à la police. Dans chaque cas, l’événement se produit dans un appel à l’opérateur temporel after, ce qui déclenche, un certain nombre de fois, une transition après réception de l’événement par le diagramme.

Un bloc Simulink externe transmet un événement en entrée via un signal connecté au port de déclenchement du diagramme Stateflow. Suivant la configuration, un événement en entrée résulte d’une modification de la valeur du signal ou d’un appel de fonction d’un bloc Simulink. Pour configurer un événement en entrée :

  1. Dans l’onglet Modeling, sous Design Data, sélectionnez Symbols Pane et Property Inspector.

  2. Dans le volet Symbols, sélectionnez l’événement en entrée.

  3. Dans Property Inspector, définissez Trigger sur l’une des options suivantes :

  • Rising : le diagramme est activé lorsque le signal en entrée passe de zéro ou d’une valeur négative à une valeur positive.

  • Falling : le diagramme est activé lorsque le signal en entrée passe d’une valeur positive à zéro ou à une valeur négative.

  • Either : le diagramme est activé lorsque le signal en entrée passe par zéro pour devenir une valeur positive ou négative.

  • Function call : le diagramme est activé par un appel de fonction à partir d’un bloc Simulink.

Dans cet exemple, un bloc Simulink Function-Call Generator contrôle le timing du système de sécurité en déclenchant l’événement en entrée sl_call via des appels de fonction périodiques.

Explorer l’exemple

Dans cet exemple, le diagramme Stateflow possède des entrées provenant de plusieurs blocs Manual Switch et des sorties vers deux sous-systèmes de verrouillage qui se connectent à des blocs Display. Pendant la simulation, vous pouvez :

  • Activer les sous-systèmes d’alarme et de capteur et déclencher les détections d’intrusion en cliquant sur les blocs Switch.

  • Regarder l’animation du diagramme qui met en évidence les différents états actifs du diagramme.

  • Visualiser les signaux en sortie dans le bloc Scope et dans Simulation Data Inspector.

Par exemple, supposons que vous activez les sous-systèmes de l'alarme et des capteurs, vous désactivez les déclencheurs des capteurs et vous lancez la simulation. Pendant la simulation, vous exécutez les actions suivantes :

  1. Au pas de temps $t = 250$ secondes, vous déclenchez le capteur de porte. L’alarme commence à sonner (Sound = 1), donc vous désactivez immédiatement le système d’alarme. Vous désactivez le déclencheur du capteur de porte et remettez l’alarme en marche.

  2. Au pas de temps $t = 520$ secondes, vous déclenchez le capteur de fenêtre. L’alarme commence à sonner (Sound = 0). Cette fois, vous ne désactivez pas l’alarme. À environ $t = 600$, le système de sécurité appelle la police (call_police = 1). Les signaux Sound et call_police continuent à alterner entre zéro et un toutes les 80 secondes.

  3. Au pas de temps $t = 1400$ secondes, vous désactivez l’alarme. L’alternance entre les signaux Sound et call_police cesse.

Le Simulation Data Inspector affiche la réponse des signaux Sound et call_police à vos actions.

Voir aussi

Sujets associés