Contenu principal

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

  1. Créez un nouveau modèle Simulink.

  2. Ajoutez ces blocs à votre modèle :

    • Bloc Chart

    • Bloc Constant

    • Deux blocs Display

  3. Simulink model that contains a Stateflow chart, a constant block, and two display blocks.

  4. Enregistrez le modèle en tant que call_stats_function_stateflow.

Configurer le diagramme Stateflow

  1. Ouvrez le bloc Diagramme.

  2. Ajoutez deux fonctions MATLAB en utilisant l’icône Fonction MATLAB .

  3. Libellez les fonctions avec ces signatures :

    • meanout = meanstats(vals)

    • stdevout = stdevstats(vals)

      Stateflow chart with two MATLAB functions called meanstats and stdevstats.

  4. Ajoutez une transition par défaut à une jonction de terminaison avec cette action conditionnelle :

    {
    mean = meanstats(invals);
    stdev = stdevstats(invals);
    }

    Stateflow chart with a transition that calls the two MATLAB functions.

    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

  1. Ouvrez le volet Symbols.

  2. Définissez les types de données pour ces données en utilisant la colonne Type :

    • invals: Input Data

    • stdev: Output Data

    • mean: Output Data

    The data in the symbols pane.

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.

The Simulink model is connected to Stateflow.

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

The Display blocks show the results of simulation.

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

(Simulink)

Rubriques