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)
renvoietrue
sin
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 renvoiefalse
. 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éenneC
est devenuetrue
.
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
versOff
, la conditionafter(20,sec)
éteint la chaudière une fois qu’elle est allumée depuis 20 secondes.Lors de la transition de
Off
versOn
, la conditionafter(40,sec)[cold()]
allume la chaudière lorsque la fonction graphiquecold()
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
versOff
, la condition triviale éteint la chaudière lorsque la logique de transition interne de l’étatOn
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 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 et secondes, la chaudière est éteinte et le signal LED alterne entre 0 et 1 toutes les 5 secondes.
Entre et secondes, la chaudière est allumée et le signal LED alterne entre 0 et 2 toutes les secondes.
Entre et 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éfinissezTimer1
comme étant la durée pendant laquelle l’étatOn
est actif :
en,du,ex: Timer1 = elapsed(sec);
À l’état
Off
, définissezTimer2
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.