Hauptinhalt

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Integration von MATLAB-Funktionen in Stateflow-Diagrammen

Um komplexe Algorithmen in Ihrem Stateflow®-Diagramm zu implementieren, verwenden Sie MATLAB®-Funktionen. MATLAB-Funktionen ermöglichen es Ihnen, die mathematischen Fähigkeiten von MATLAB in Ihrem Stateflow-Diagramm zu kombinieren. Weitere Informationen zum Erstellen von MATLAB-Funktionen finden Sie unter Reuse MATLAB Code by Defining MATLAB Functions.

Unterstützte Funktionstypen

Stateflow-Diagramme können diese MATLAB-Funktionstypen aufrufen:

  • Lokale Funktionen, die Sie im Funktionskörper definieren.

  • Grafik-, Simulink®- und Wahrheitstabellenfunktionen.

  • Integrierte MATLAB-Funktionen, die die Code-Generierung unterstützen.

  • Extrinsische Funktionen für die Ausführung nur in der Simulation. Weitere Informationen finden Sie unter Call Extrinsic MATLAB Functions in Stateflow Charts.

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 Ihrem Modell diese Blöcke hinzu:

    • Chart-Block

    • Constant-Block

    • Zwei Display-Blöcke

  3. 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 einer Matrix.

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

Um das Modell zu simulieren, verbinden Sie zunächst 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 im Blockfenster Display angezeigt.

The Display blocks show the results of simulation.

Anforderungen an die Codegenerierung

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