Hauptinhalt

Integrieren von MATLAB-Funktionen in Stateflow-Diagramme

Sie können MATLAB®-Funktionen verwenden, um komplexe Algorithmen in Ihren Stateflow®-Diagrammen zu implementieren. Mithilfe von MATLAB-Funktionen können Sie:

  • Mathematische Berechnungen ausdrücken, Daten verarbeiten und Statistiken analysieren.

  • Bewährte MATLAB-Algorithmen in Ihre Zustandsmaschine integrieren.

  • Komplexe Logik kapseln, um das Diagrammdesign übersichtlicher zu gestalten.

Weitere Informationen zum Erstellen von MATLAB-Funktionen zur Verwendung in Stateflow-Diagrammen finden Sie unter Reuse MATLAB Code by Defining MATLAB Functions.

Hinzufügen von MATLAB-Funktionen zu einem Stateflow-Diagramm

In diesem Beispiel erstellen Sie ein Modell, das zwei MATLAB-Funktionen enthält, und verwenden diese Funktionen dann zur Berechnung des Mittelwerts und der Standardabweichung der Daten, die Sie in das Diagramm eingeben.

Einrichten des Modells

  1. Erstellen Sie ein neues Simulink®-Modell.

  2. Fügen Sie einen Chart-Block, einen Constant-Block und zwei Display-Blöcke hinzu.

  3. Setzen Sie den Wert des „Constant“-Blocks auf [2 3 4 5].

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

  4. Speichern Sie das Modell als call_stats_function_stateflow.

Konfigurieren des Stateflow-Diagramms

  1. Öffnen Sie den Diagramm-Block.

  2. Fügen Sie zwei MATLAB-Funktionen hinzu, indem Sie das Symbol verwenden.

  3. Beschriften Sie die Funktionen mit diesen Signaturen:

    • meanout = meanstats(vals)

    • stdevout = stdevstats(vals)

      Stateflow chart with two MATLAB functions called meanstats and stdevstats.

  4. Fügen Sie mit dieser Bedingungsaktion einen Standardübergang zu einer Endverbindung hinzu:

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

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

    Wenn die Argumente einer Funktionssignatur Skalare sind, überprüfen Sie, ob die Eingaben und Ausgaben der Funktionsaufrufe den Regeln der skalaren Erweiterung entsprechen. Weitere Informationen finden Sie unter Zuweisen von Werten zu allen Elementen.

Definieren von Datenelementen

  1. Öffnen Sie den Bereich Symbols.

  2. Legen Sie die Datentypen für diese Daten mithilfe der Spalte Type fest:

    • invals: Input Data

    • stdev: Output Data

    • mean: Output Data

    The data in the symbols pane.

Programmieren der Standardabweichungsfunktion

Öffnen Sie die stdevstats-Funktion und fügen Sie diesen Code hinzu:

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;

Die Funktion sum berechnet den Wert von stdevout. Die Kompilierungsrichtlinie %#codegen hilft bei der Erkennung von Syntax- und Semantikverstößen während der Kompilierung in MATLAB-Funktionen, die für die Codegenerierung unterstützt werden.

Programmieren der Mittelwertfunktion

Öffnen Sie die meanstats-Funktion und fügen Sie diesen Code hinzu:

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;

Die Funktion length unterstützt die Codegenerierung und gibt die Länge eines Vektors zurück. Die Funktion avg berechnet den Wert von meanout. Sie definieren plot als extrinsisch, da es für die Codegenerierung nicht unterstützt wird.

Simulieren des Modells

Verbinden Sie die Simulink-Blöcke mit den Eingabe- und Ausgabeports des Diagramms.

The Simulink model is connected to Stateflow.

Klicken Sie auf Run. Die Zahlen für Mittelwert und Standardabweichung werden in den Display-Blöcken angezeigt.

The Display blocks show the results of simulation.

Generieren von Code aus Diagrammen, die MATLAB-Funktionen verwenden

Um Code zu generieren, müssen alle Funktionen die Codegenerierung unterstützen. Wenn eine Funktion die Codegenerierung nicht unterstützt, können Sie sie mit coder.extrinsic (Simulink) als Ausnahme markieren. Eine Liste der Funktionen, die MATLAB für die Codegenerierung unterstützt, finden Sie unter Functions and Objects Supported for C/C++ Code Generation (MATLAB Coder).

Siehe auch

(Simulink)

Themen