Réutiliser la logique dans les diagrammes
Il est possible de réutiliser la logique dans les diagrammes Stateflow® en appelant des fonctions personnalisées dans les états ou les transitions. Les diagrammes Stateflow supportent les fonctions personnalisées suivantes :
Les fonctions graphiques contiennent un diagramme de flux composé de jonctions et de transitions.
Les fonctions Simulink® contiennent un sous-système Simulink.
Les fonctions MATLAB® contiennent du code MATLAB.
Dans cet exemple, vous allez créer une fonction MATLAB permettant au modèle d’un système de batterie rechargeable de gérer une puissance variable en entrée lorsqu’il est connecté à un chargeur.
Ouvrir le modèle
Le modèle sfGetStartedFunction représente la logique de contrôle d’un système de batterie rechargeable. Pour créer le modèle, suivez les instructions des étapes précédentes du tutoriel.

Double-cliquez sur le bloc Chart.

Le diagramme contient deux états parallèles qui représentent une batterie principale rechargeable et une batterie de secours non rechargeable. Chaque batterie contient des états enfant imbriqués qui représentent les modes de fonctionnement pour la charge, la décharge ou la veille.
Lorsque la batterie principale est vide, elle envoie un événement qui active le mode décharge de la batterie de secours. Lorsque la batterie principale commence à se recharger, elle active le mode veille de la batterie de secours.
Le diagramme utilise les données suivantes :
isCharging: donnée d’entrée qui indique si le système de batterie est connecté ou non à un chargeur. Cette donnée détermine l’état actif de la batterie principale.deviceDemand: donnée d’entrée qui représente la puissance demandée par l’équipement connecté, en watts.maxPower: donnée locale qui représente la puissance en sortie maximale de la batterie principale, en watts.sentPower: donnée de sortie qui représente la puissance fournie par la batterie principale à l’équipement connecté, en watts.receivedPower: donnée d’entrée qui représente la puissance fournie par le chargeur à la batterie principale, en watts.mainChargeetemergencyCharge: données locales qui représentent le niveau de charge de chaque batterie.
Créer une fonction MATLAB
À l’heure actuelle, le système de batterie ne se recharge pas plus ou moins rapidement si le chargeur fournit une puissance supérieure ou inférieure. Ajoutez une fonction MATLAB permettant à la batterie de recevoir une puissance variable en entrée avec une valeur maximale et minimale.
Pour créer cette fonction MATLAB, accédez à la palette et cliquez sur l’icône de fonction MATLAB
. Placez la fonction dans une section vide du canevas.L’éditeur vous invite à saisir un libellé de fonction. Celui-ci sert à spécifier les valeurs renvoyées, le nom et les entrées de la fonction MATLAB au format suivant :
[return_val1,return_val2,....] = function_name(input1,input2,...)Il n’est pas nécessaire d’utiliser de crochets dans le libellé si la fonction renvoie une seule valeur.
Saisissez un libellé de fonction ayant pour entrées la charge actuelle, la charge supplémentaire fournie par le chargeur et la charge maximale en entrée. Renvoyez la charge de batterie mise à jour en sortie.
charge=updateCharge(current,added,max)
Pour modifier la fonction MATLAB, double-cliquez sur n’importe quelle partie de celle-ci sous son libellé. L’éditeur de fonction s’ouvre et affiche l’en-tête suivant :
L’éditeur de fonction copie l’en-tête à partir du libellé de la fonction dans le diagramme. Si vous modifiez l’en-tête, le libellé de la fonction change en conséquence.function charge=updateCharge(current,added,max)
Dans l’éditeur de fonction, écrivez une fonction qui limite la vitesse de charge de la batterie entre une valeur maximale et
0.function charge=updateCharge(current,added,max) if added>max charge=current+max; elseif added<0 charge=current; else charge=current+added; end
Ajouter la fonction MATLAB aux actions d’état
Utilisez la fonction MATLAB dans les états FastCharge et SlowCharge.
Pour revenir dans l’éditeur Stateflow, accédez à la barre de l’explorateur et cliquez sur le bouton « Up to Parent »
.Dans l’état
FastCharge, modifiez l’actionduringpour utiliser la fonction. Pour la charge maximale en entrée, utilisez4, qui est la valeur que le diagramme ajoute actuellement àmainCharge.during:mainCharge=updateCharge(mainCharge,receivedPower,4);Dans l’état
SlowCharge, modifiez l’actionduringpour utiliser la fonction. Pour la charge maximale en entrée, utilisez1, qui est la valeur que le diagramme ajoute actuellement àmainCharge.during:mainCharge=updateCharge(mainCharge,receivedPower,1);
Simuler le modèle
Le modèle enregistre les valeurs suivantes dans le Simulation Data Inspector :
Puissance fournie par le chargeur au système de batterie. Cette valeur varie entre
-6et6.Niveau de charge de la batterie principale.
Nom du mode de charge actif de la batterie principale.
Simulez le modèle et utilisez le Simulation Data Inspector pour observer l’évolution de la valeur de mainCharge en cours de simulation.
Lorsque la batterie principale se recharge rapidement, le niveau de charge augmente et diminue en fonction de la puissance fournie, jusqu’à un maximum de 4 et un minimum de 0. Lorsque la batterie principale se recharge lentement, le niveau de charge augmente et diminue en fonction de la puissance fournie, jusqu’à un maximum de 1 et un minimum de 0.
