Intégrer des fonctions MATLAB dans les diagrammes Stateflow
Les fonctions MATLAB® vous permettent d’implémenter des algorithmes complexes dans vos diagrammes Stateflow®. Vous pouvez utiliser des fonctions MATLAB pour :
Exprimer des calculs mathématiques, traiter des données ou analyser des statistiques.
Intégrer des algorithmes MATLAB établis dans votre machine à états.
Encapsuler la logique complexe pour que le design du diagramme soit plus propre.
Pour plus d’informations sur la création de fonctions MATLAB à utiliser dans les diagrammes Stateflow, consultez Reuse MATLAB Code by Defining MATLAB Functions.
Ajouter des fonctions MATLAB à un diagramme Stateflow
Dans cet exemple, vous construisez un modèle qui contient deux fonctions MATLAB puis vous utilisez ces fonctions pour calculer la moyenne et l’écart-type des données que vous saisissez dans le diagramme.
Configurer le modèle
Créez un nouveau modèle Simulink®.
Ajoutez un bloc Chart, un bloc Constant et deux blocs Display.
Définissez la valeur du bloc Constant sur [2 3 4 5].

Enregistrez le modèle en tant que
call_stats_function_stateflow.
Configurer le diagramme Stateflow
Ouvrez le bloc Diagramme.
Ajoutez deux fonctions MATLAB en utilisant l’icône Fonction MATLAB
.Libellez les fonctions avec ces signatures :
meanout = meanstats(vals)stdevout = stdevstats(vals)
Ajoutez une transition par défaut à une jonction de terminaison avec cette action conditionnelle :
{ mean = meanstats(invals); stdev = stdevstats(invals); }
Si les arguments d’une signature de fonction sont scalaires, vérifiez que les entrées et sorties des appels de fonction respectent les règles de l’expansion scalaire. Pour plus d’informations, veuillez consulter Affecter des valeurs à tous les éléments.
Définir des éléments de données
Ouvrez le volet Symbols.
Définissez les types de données pour ces données en utilisant la colonne Type :
invals: Input Datastdev: Output Datamean: Output Data

Programmer la fonction d’écart-type
Ouvrez la fonction stdevstats et ajoutez ce code :
function stdevout = stdevstats(vals) %#codegen % Calculate standard deviation len = length(vals); stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
La fonction sum calcule la valeur de stdevout. L’instruction de compilation %#codegen aide à détecter les violations de syntaxe et de sémantique au moment de la compilation dans les fonctions MATLAB supportées pour la génération de code.
Programmer la fonction de moyenne
Ouvrez la fonction meanstats et ajoutez ce code :
function meanout = meanstats(vals) %#codegen % Calculate statistical mean len = length(vals); meanout = avg(vals,len); % Plot results (simulation only) coder.extrinsic("plot"); plot(vals,"-+"); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
La fonction length supporte la génération de code et renvoie la longueur d’un vecteur. La fonction avg calcule la valeur de meanout. Vous définissez plot sur extrinsèque, parce qu’il n’est pas supporté pour la génération de code.
Simulation du modèle
Connectez les blocs Simulink aux ports d’entrée et de sortie du diagramme.

Cliquez sur Run. Les valeurs de moyenne et d’écart-type apparaissent dans les blocs Display.

Générer du code à partir de diagrammes utilisant des fonctions MATLAB
Pour générer du code, toutes les fonctions doivent supporter la génération de code. Si une fonction ne supporte pas la génération de code, vous pouvez utiliser coder.extrinsic (Simulink) pour la signaler comme étant une exception. Pour une liste de fonctions que MATLAB supporte pour la génération de code, consultez Fonctions et objets supportés pour la génération de code C/C++ (MATLAB Coder).
Voir aussi
coder.extrinsic (Simulink)