Contenu principal

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

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

  2. Ajoutez un bloc Chart, un bloc Constant et deux blocs Display.

  3. Définissez la valeur du bloc Constant sur [2 3 4 5].

    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 Affecter des valeurs à tous les éléments.

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

Connectez les blocs Simulink aux ports d’entrée et de sortie du diagramme.

The Simulink model is connected to Stateflow.

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

The Display blocks show the results of simulation.

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

(Simulink)

Rubriques