Intégrer des fonctions MATLAB dans les diagrammes Stateflow
Pour implémenter des algorithmes complexes dans votre diagramme Stateflow®, utilisez les fonctions MATLAB®. Les fonctions MATLAB vous permettent de combiner les fonctionnalités de MATLAB dans votre diagramme Stateflow. Pour plus d’informations sur la création de fonctions MATLAB, consultez Reuse MATLAB Code by Defining MATLAB Functions.
Types de fonction supportés
Les diagrammes Stateflow peuvent appeler ces types de fonction MATLAB :
Fonctions locales que vous définissez dans le corps de la fonction.
Fonctions graphiques, Simulink® et tables de vérité.
Fonctions MATLAB prédéfinies supportant la génération de code.
Fonctions extrinsèques pour l’exécution par simulation uniquement. Pour plus d’informations, veuillez consulter Call Extrinsic MATLAB Functions in Stateflow Charts.
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 ces blocs à votre modèle :
Bloc Chart
Bloc Constant
Deux blocs Display

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 Attribuer des valeurs à tous les éléments d’une matrice.
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
Pour simuler le modèle, connectez d’abord les blocs Simulink aux ports d’entrée et de sortie du diagramme.

Cliquez sur Run. Les nombres de moyenne et d’écart-type apparaissent dans la fenêtre du bloc Display.

Configuration requise pour la génération de code
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 Functions and Objects Supported for C/C++ Code Generation (MATLAB Coder).
Voir aussi
coder.extrinsic (Simulink)