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 permettent aux états parallèles de se coordonner entre eux afin qu’un état puisse déclencher une action dans un autre état. Pour synchroniser des états parallèles dans le même diagramme Stateflow®, diffusez des événements directement d’un état à un autre. Pour plus d’informations sur les états parallèles, veuillez consulter Modéliser des sous-systèmes synchrones au moyen du parallélisme.

Diffusion d’événements locaux

Un événement local est un objet non graphique qui peut déclencher des transitions ou des actions dans un état parallèle d’un diagramme Stateflow. Lorsque vous diffusez un événement à un état, cet événement prend effet dans l’état récepteur et dans tous les sous-états de la hiérarchie de cet état. Pour diffuser un événement, utilisez l’opérateur send :

send(event_name,state_name)

event_name est le nom de l’événement à diffuser. state_name est un état actif pendant la diffusion.

Exemple de diffusion d’un événement

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 fenêtre, un capteur de porte 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.

Modéliser les sous-systèmes sous forme d’états parallèles

Le diagramme Security System modélise chaque sous-système avec un état parallèle distinct. Un signal d’entrée d’activation permet de choisir le mode On ou Off pour l’alarme, ou le mode Active ou Disabled pour chaque capteur. Chaque capteur, lorsqu’il est activé, surveille un signal d’entrée de déclenchement qui indique une éventuelle intrusion.

Sous-systèmeÉtatSignal d’activationSignal de déclenchement
Capteur de porteDoorD_modeDoor_sens
Capteur de fenêtreWinW_modeWin_sens
Capteur de mouvementMotionM_modeMot_sens
AlarmeAlarmAlarm_active 

Si un capteur détecte une intrusion alors que le sous-système d’alarme est activé, il diffuse un événement Alert avec la commande suivante :

send(Alert,Alarm)

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 alarme. Par contre, 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 alarme.

Dans le sous-système d’alarme, l’événement Alert entraîne un basculement du sous-état Idle vers le sous-état Pending. Lorsque cet état devient actif, une alerte sonore prévient les occupants d’une é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.

Se coordonner avec d'autres blocs Simulink

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

  • Les événements de sortie Sound et call_police dirigent des blocs externes qui gèrent l’alerte sonore et l’appel à la police. Les commandes de diffusion de ces événements se produisent dans l’état Alarm.On :

    • La commande de Sound est une action d’entrée dans le sous-état Pending.

    • La commande de call_police est exécutée comme une action lors du passage entre les sous-états Pending et Idle.

    Dans chaque cas, la commande d’émission de l’événement de sortie est le nom de l’événement.

  • L’événement d’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 entraîne une transition après réception par le diagramme de l’événement un certain nombre de fois.

Simulink model that simulates a security system.

Événements de sortie

Un événement de sortie se produit dans un diagramme Stateflow, mais il 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.

Chaque événement de sortie correspond à un port de sortie sur le côté droit du diagramme. Suivant sa configuration, le signal correspondant peut commander un sous-système déclenché ou un sous-système d’appel de fonction. Pour configurer un événement de 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.

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

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

    • Function call : la diffusion de l’événement de sortie provoque un événement function-call de Simulink.

Dans l’exemple sf_security, les événements de sortie Sound et call_police utilisent des déclencheurs périphériques pour activer deux sous-systèmes de verrouillage (latch) 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 d’entrée

Un événement d’entrée se produit dans un bloc Simulink, mais il est visible dans un diagramme Stateflow. Ce type d’événement permet à d’autres blocs Simulink, dont d’autres diagrammes Stateflow, d’informer un diagramme spécifique des événements qui se produisent en dehors de celui-ci.

Un bloc Simulink externe transmet un événement d’entrée via un signal connecté au port de déclenchement situé en haut du diagramme Stateflow. Suivant sa configuration, un événement d’entrée résulte d’une modification de la valeur du signal ou d’un appel de fonction (function-call) d’un bloc Simulink. Pour configurer un événement d’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.

  3. Dans Property Inspector, définissez le Trigger en choisissant une des options suivantes :

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

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

    • Either : le diagramme est activé lorsque le signal d’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 l’exemple sf_security, un bloc Simulink Function-Call Generator contrôle la temporisation du système de sécurité en déclenchant l’événement d’entrée sl_call via des appels de fonction périodiques.

Explorer l’exemple

Le diagramme du système de sécurité 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 de sortie dans le bloc Scope et dans le Simulation Data Inspector.

Pour ajuster la temporisation de la simulation, double-cliquez sur le bloc Function-Call Generator, puis modifiez le champ Sample time dans la boîte de dialogue. Par exemple, supposons que vous définissez le pas de temps sur 1 et que vous lancez la simulation avec tous les sous-systèmes activés et tous les déclencheurs de capteurs désactivés. 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 éteignez le déclencheur 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.

Simulation Data Inspector showing the output of the chart.

Sujets associés