Main Content

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

Planifier les actions du diagramme en utilisant une logique temporelle

Pour définir le comportement d’un diagramme Stateflow en termes de durée de simulation, ajoutez des opérateurs de logique temporelle aux actions d’état et de transition du diagramme. Les opérateurs de logique temporelle sont des fonctions prédéfinies qui vous indiquent la durée pendant laquelle un état reste actif ou une condition booléenne reste vraie. La logique temporelle permet de contrôler la temporisation des éléments suivants :

  • Transitions entre les états

  • Appels de fonction

  • Modifications des valeurs de variable

Les opérateurs de logique temporelle en durée absolue les plus courants sont les suivants :

  • after : after(n,sec) renvoie true si n secondes de simulation se sont écoulées depuis l’activation de l’état contenant l’opérateur ou de l’état source de la transition contenant l’opérateur. Sinon, l’opérateur renvoie false. Cet opérateur supporte la logique temporelle événementielle et la logique temporelle en durée absolue en secondes (sec), en millisecondes (msec) et en microsecondes (usec).

  • elapsed : elapsed(sec) renvoie le nombre de secondes de simulation qui se sont écoulées depuis l’activation de l’état associé.

  • duration : duration(C) renvoie le nombre de secondes de simulation qui se sont écoulées depuis que la condition booléenne C est devenue true.

Modéliser un contrôleur de température bang-bang

Cet exemple utilise la logique temporelle pour modéliser un contrôleur bang-bang qui régule la température interne d’une chaudière.

L’exemple se compose d’un diagramme de flux Stateflow et d’un sous-système Simulink®. Le diagramme Bang-Bang Controller compare la température actuelle de la chaudière à un point de consigne de référence et détermine si la chaudière doit être allumée. Le sous-système Boiler Plant Model modélise la dynamique dans la chaudière en augmentant ou en diminuant sa température en fonction de l’état du contrôleur. Ensuite, le diagramme utilise la température de la chaudière pour l’étape suivante de la simulation.

Le diagramme Bang-Bang Controller utilise l’opérateur de logique temporelle after pour :

  • Régler la temporisation du cycle bang-bang lorsque la chaudière alterne entre activation et désactivation.

  • Contrôler une LED d’état qui clignote à des rythmes différents en fonction du mode de fonctionnement de la chaudière.

Les temporisateurs définissant le comportement des sous-systèmes de chaudière et de LED fonctionnent indépendamment les uns des autres sans bloquer ni perturber la simulation du contrôleur.

Temporisation du cycle bang-bang

Le diagramme Bang-Bang Controller contient deux sous-états qui représentent les deux modes de fonctionnement de la chaudière : On et Off. Le diagramme utilise les données de sortie de l’état actif boiler pour indiquer quel sous-état est actif.

Les conditions des transitions entre les sous-états On et Off définissent le comportement du contrôleur bang-bang :

  • Lors de la première transition de On vers Off, la condition after(20,sec) éteint la chaudière une fois qu’elle est allumée depuis 20 secondes.

  • Lors de la transition de Off vers On, la condition after(40,sec)[cold()] allume la chaudière lorsque la fonction graphique cold() indique que sa température est inférieure au point de consigne de référence depuis au moins 40 secondes.

  • Lors de la deuxième transition de On vers Off, la condition triviale éteint la chaudière lorsque la logique de transition interne de l’état On détermine que sa température est égale ou supérieure au point de consigne de référence.

Du fait de ces actions de transition, la temporisation du cycle bang-bang dépend de la température actuelle de la chaudière. Au début de la simulation, lorsque la chaudière est froide, le contrôleur reste 40 secondes dans l’état Off et 20 secondes à l’état On. Au bout de $t = 478$ secondes, la température de la chaudière atteint le point de consigne de référence. Dès lors, la chaudière ne doit compenser que la chaleur perdue à l’état Off. Le contrôleur reste ensuite 40 secondes dans l’état Off et 4 secondes à l’état On.

Temporisation de la LED d’état

L’état Off contient un sous-état Flash avec une transition en boucle automatique déclenchée par l’action after(5,sec). Du fait de cette transition, lorsque l’état Off est actif, le sous-état exécute son action entry et appelle la fonction graphique flash_LED toutes les 5 secondes. La fonction bascule la valeur du symbole de sortie LED entre 0 et 1.

L’état On appelle la fonction graphique flash_LED sous la forme d’une action d’état combinée entry, during. Lorsque l’état On est actif, cette action appelle la fonction à chaque pas de temps de la simulation pour faire basculer la valeur du symbole de sortie LED entre 0 et 2.

Par conséquent, la temporisation de la LED d’état dépend du mode de fonctionnement de la chaudière. Par exemple :

  • Entre $t = 0$ et $t = 40$ secondes, la chaudière est éteinte et le signal LED alterne entre 0 et 1 toutes les 5 secondes.

  • Entre $t = 40$ et $t = 60$ secondes, la chaudière est allumée et le signal LED alterne entre 0 et 2 toutes les secondes.

  • Entre $t = 60$ et $t = 100$ secondes, la chaudière est éteinte et le signal LED alterne entre 0 et 1 toutes les 5 secondes.

Explorer l’exemple

Utilisez une logique temporelle supplémentaire pour étudier comment la temporisation du cycle bang-bang évolue lorsque la température de la chaudière s’approche du point de consigne de référence.

1. Saisissez de nouvelles actions d’état qui appellent les opérateurs elapsed et duration :

  • À l’état On, définissez Timer1 comme étant la durée pendant laquelle l’état On est actif :

  en,du,ex: Timer1 = elapsed(sec);
  • À l’état Off, définissez Timer2 comme étant la durée pendant laquelle la température de la chaudière est égale ou supérieure au point de consigne de référence :

  en,du,ex: Timer2 = duration(temp>=reference);

2. Dans le volet Symbols, cliquez sur Resolve Undefined Symbols. L’éditeur Stateflow résout les symboles Timer1 et Timer2 en tant que données de sortie.

3. Activez l'activité de log de Timer1 et Timer2. Dans le volet Symbols, sélectionnez chaque symbole. Puis, dans Property Inspector, sous Logging, sélectionnez Log signal data.

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 boiler et Timer1 dans le même ensemble d’axes. Le tracé montre que :

  • La phase On du cycle bang-bang dure généralement 20 secondes lorsque la chaudière est froide et 4 secondes lorsqu’elle est chaude.

  • La première fois que la chaudière atteint la température de référence, le cycle est interrompu prématurément et le contrôleur reste à l’état On pendant 18 secondes seulement.

  • Lorsque la chaudière est chaude, le premier cycle est légèrement plus court que les cycles ultérieurs, car le contrôleur reste à l’état On pendant 3 secondes seulement.

7. Dans le Simulation Data Inspector, affichez les signaux boiler et Timer2 dans le même ensemble d’axes. Le tracé montre que :

  • Une fois que la chaudière est chaude, 9 secondes lui sont généralement nécessaire pour refroidir lors de la phase Off du cycle bang-bang.

  • La première fois que la chaudière atteint la température de référence, il lui faut 19 secondes pour refroidir, soit plus de deux fois plus de temps que pour les autres cycles.

Le cycle plus court et le temps de refroidissement plus long sont une conséquence de la hiérarchie des sous-états de l’état On. Lorsque la chaudière atteint la température de référence pour la première fois, la transition de HIGH vers NORM maintient le contrôleur actif pendant un pas de temps supplémentaire, si bien que la chaudière chauffe plus que la normale. Lors des cycles ultérieurs, la phase On commence avec un sous-état NORM actif du fait de la jonction d’historisation. Le contrôleur s’éteint alors immédiatement une fois que la chaudière a atteint la température de référence, ce qui entraîne son refroidissement.

Sujets associés