Main Content

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

Surveiller l’activité des diagrammes en utilisant les données d'état actif

Si votre diagramme Stateflow® comprend des données corrélées à la hiérarchie du diagramme, vous pouvez simplifier votre design en utilisant les données d’état actif. L’activation des données d’état actif vous permet de :

  • Éviter les mises à jour manuelles des données reflétant l’activité du diagramme.

  • Enregistrer et surveiller l’activité du diagramme dans le Simulation Data Inspector.

  • Utiliser les données d’activité du diagramme pour contrôler d’autres sous-systèmes.

  • Exporter les données d’activité du diagramme vers d’autres blocs Simulink.

Par exemple, dans ce modèle de feu de circulation, l’état actif détermine la valeur du signal de sortie color. Vous pouvez simplifier le design du diagramme en activant les données d’état actif. Dans ce cas, le diagramme Stateflow peut indiquer la couleur du feu de circulation en suivant l’activité de l’état. Ainsi, vous n’avez pas besoin de mettre explicitement à jour la valeur de color.

Pour activer les données d’état actif, sélectionnez un état à surveiller. Puis, dans Property Inspector :

1. Sélectionnez Create output for monitoring.

2. Sélectionnez l’un des types d’activité suivants :

  • Self activity : valeur booléenne indiquant si l’état est actif

  • Child activity : valeur énumérée indiquant quel sous-état (child) est actif

  • Leaf state activity : valeur énumérée indiquant quel état feuille (leaf) est actif

3. Saisissez le nom pour le symbole des données d'état actif dans Data name.

4. Si vous le souhaitez, pour Child activity ou Leaf state activity, saisissez le nom d’énumération du type des données d’état actif dans Enum name.

Par défaut, les diagrammes Stateflow rapportent l’activité de l’état en tant que données de sortie pour le modèle Simulink. Pour modifier la portée du symbole des données d'état actif en données locales, utilisez le volet Symbols.

Modéliser un contrôleur de feux de circulation

Cet exemple utilise les données d’état actif pour modéliser le système de contrôle de deux feux de circulation.

Dans le diagramme Traffic Controller, deux sous-diagrammes parallèles gèrent la logique de contrôle des feux de circulation. Ces sous-diagrammes possèdent une hiérarchie identique composée de trois sous-états (child) : Red, Yellow et Green. Les données de sortie Light1 et Light2 correspondent aux sous-états (child) actifs dans les sous-diagrammes. Ces signaux :

  • Déterminent la phase des feux de circulation animés.

  • Contribuent au nombre de voitures qui attendent à chaque feu.

  • Dirigent un sous-système Safety Assertion qui vérifie que les deux feux de circulation ne sont jamais verts en même temps.

Pour afficher les sous-diagrammes dans le diagramme Traffic Controller, cliquez sur la flèche située dans le coin inférieur gauche du diagramme.

Chaque contrôleur de trafic alterne par les sous-états (child), de Red vers Green, puis vers Yellow avant de revenir à Red. Chaque état correspond à une phase du cycle des feux de circulation. Les signaux de sortie Light1 et Light2 indiquent l’état actif à n'importe quel moment donné.

Feu rouge

Le cycle des feux de circulation commence lorsque l’état Red devient actif. Après un bref délai, le contrôleur vérifie si des véhicules attendent au carrefour. S’il détecte au moins un véhicule ou si une délai déterminé est passé, alors le contrôleur demande un feu vert en définissant greenLightRequest à true. Une fois la demande passée, le contrôleur reste dans l’état Red pendant un bref laps de temps jusqu’à ce qu’il détecte que l’autre feu de circulation est rouge. Le contrôleur bascule ensuite sur Green.

Feu vert

Lorsque l’état Green devient actif, le contrôleur annule la demande de feu vert en définissant greenLightRequest à false. Le contrôleur définit greenLightLocked à true pour empêcher l’autre feu de passer au vert. Après un bref délai, le contrôleur vérifie si l’autre contrôleur a demandé un feu vert. S’il reçoit une demande ou si un délai déterminé est passé, alors le contrôleur bascule sur l’état Yellow.

Feu orange

Lorsque l’état Yellow devient inactif, le contrôleur définit greenLightLocked à « false », ce qui indique que l’autre feu de circulation peut passer au vert en toute sécurité. Le contrôleur maintient l’état Yellow pendant une durée déterminée avant de basculer sur l’état Red. Le cycle des feux de circulation recommence.

Temporisation des feux de circulation

Plusieurs paramètres définissent la temporisation du cycle des feux de circulation. Pour modifier la temporisation des feux de circulation, double-cliquez sur le diagramme Traffic Controller et saisissez de nouvelles valeurs pour les paramètres suivants dans la boîte de dialogue :

  • REDDELAY : délai avant que le contrôleur ne vérifie la présence de véhicules au carrefour. Cette valeur correspond également au délai minimal avant que le feu de circulation ne puisse passer au vert après la demande de feu vert du contrôleur. La valeur par défaut est de 6 secondes.

  • MAXREDDELAY : délai maximal pendant lequel le contrôleur vérifie la présence de véhicules avant de demander un feu vert. La valeur par défaut est de 360 secondes.

  • GREENDELAY : délai maximal pendant lequel le feu de circulation reste vert. La valeur par défaut est de 180 secondes.

  • MINGREENDELAY : délai minimal pendant lequel le feu de circulation reste vert. La valeur par défaut est de 120 secondes.

  • YELLOWDELAY : délai pendant lequel le feu de circulation reste orange. La valeur par défaut est de 15 secondes.

Explorer l’exemple

  1. Ouvrez le diagramme en cliquant sur la flèche située dans le coin inférieur gauche.

  2. Dans le volet Symbols, sélectionnez greenLightRequested. Puis, dans Property Inspector, sous Logging, sélectionnez Log signal data.

  3. Répétez l’étape précédente pour greenLightLocked, Light1 et Light2.

  4. Dans l’onglet Simulation, cliquez sur Run.

  5. Dans l’onglet Simulation, sous Review Results, cliquez sur Data Inspector.

  6. Dans le Simulation Data Inspector, affichez les signaux enregistrés sur des axes séparés. Les signaux booléens greenLightRequested et greenLightLocked apparaissent sous forme de valeurs numériques de zéro ou un. Les signaux d’activité de l’état Light1 et Light2 sont des données énumérées avec les valeurs Green, Yellow, Red et None.

Pour suivre l’activité du diagramme pendant la simulation, vous pouvez utiliser les boutons de zoom et les curseurs dans le Simulation Data Inspector. Par exemple, voici les moments clés des 300 premières secondes de la simulation :

  • $t = 0$ : au début de la simulation, les deux feux de circulation sont rouges. Light1 et Light2 sont à Red, greenLightRequested est à false et greenLightLocked est à false.

  • $t = 6$ : au bout de 6 secondes, soit la valeur par défaut de REDDELAY, des véhicules attendent dans les deux rues. En conséquence, les deux feux de circulation demandent un passage au vert. Light1 et Light2 sont toujours à Red, greenLightRequested est à true et greenLightLocked est à false.

  • $t = 12$ : au bout de 6 secondes supplémentaires, soit la valeur par défaut de REDDELAY, le feu 1 devient vert, annule la demande de feu vert et définit greenLightLocked à true. Ensuite, le feu 2 demande un passage au vert. Light1 est à Green, Light2 est à Red, greenLightRequested passe à false puis à true, et greenLightLocked est à true.

  • $t = 132$ : au bout de 120 secondes, soit la valeur par défaut de MINGREENDELAY, le feu 1 passe à l’orange. Light1 est à Yellow, Light2 est à Red, greenLightRequested est à true et greenLightLocked est à true.

  • $t = 147$ : au bout de 15 secondes, soit la valeur par défaut de YELLOWDELAY, le feu 1 passe au rouge et définit greenLightLocked à false. Ensuite, le feu 2 passe au vert, annule la demande de feu vert et définit greenLightLocked à true. Light1 est à Red, Light2 est à Green, greenLightRequested est à false et greenLightLocked passe à false puis à true.

  • $t = 153$ : au bout de 6 secondes, soit la valeur par défaut de REDDELAY, le feu 1 demande un passage au vert. Light1 est à Red, Light2 est à Green, greenLightRequested est à true et greenLightLocked est à true.

  • $t = 267$ : après avoir été vert pendant 120 secondes, soit la valeur par défaut de MINGREENDELAY, le feu 2 passe à l’orange. Light1 est à Red, Light2 est à Yellow, greenLightRequested est à true et greenLightLocked est à true.

  • $t = 282$ : au bout de 15 secondes, soit la valeur par défaut de YELLOWDELAY, le feu 2 passe au rouge et définit greenLightLocked à false. Ensuite, le feu 1 passe au vert, annule la demande de feu vert et définit greenLightLocked à true. Light1 est à Green, Light2 est à Red, greenLightRequested est à false et greenLightLocked passe à false puis à true.

  • $t = 288$ : au bout de 6 secondes, soit la valeur par défaut de REDDELAY, le feu 2 demande un passage au vert. Light1 est à Green, Light2 est à Red, greenLightRequested est à true et greenLightLocked est à true.

Le cycle se répète jusqu’à la fin de la simulation au bout de $t = 1000$ secondes.

Sujets associés