Hauptinhalt

Unterschiede zwischen MATLAB und C als Aktionssprache-Syntax

Stateflow®-Diagramme in Simulink®-Modellen haben eine Aktionsspracheigenschaft, die die Syntax für Zustands- und Übergangsaktionen definiert. Das Symbol in der linken unteren Ecke des Diagramms zeigt die Aktionssprache für das Diagramm an:

  • MATLAB® ist die Aktionssprache.

  • C ist die Aktionssprache.

Die von Ihnen gewählte Aktionssprache wirkt sich darauf aus, wie Sie Zustands- und Übergangsaktionen schreiben, welche Operationen verfügbar sind und wie Ihre Diagramme Code generieren.

MATLAB ist die Standard-Aktionssprache für neue Stateflow-Diagramme. Um ein Diagramm zu erstellen, das C als Aktionssprache verwendet, geben Sie Folgendes ein:

sfnew -c

Auswählen einer Aktionssprache

Verwenden Sie MATLAB als Aktionssprache für:

  • Prototyping und schnelle Entwicklung, bei der Sie Algorithmen und Logik schnell iterieren müssen.

  • Matrix- und Vektoroperationen, bei denen Ihre Diagramme ausgiebig Arrays und komplexe mathematische Operationen nutzen.

  • MATLAB-Integration, bei der Sie bestehende MATLAB-Funktionen und -Toolboxen nutzen möchten.

Verwenden Sie C als Aktionssprache für:

  • Leistungskritische Anwendungen, bei denen Sie für Echtzeitsysteme eine maximale Ausführungsgeschwindigkeit benötigen.

  • Eingebettete Ziele und Codegenerierung für ressourcenbeschränkte Hardware.

  • Anwendungen mit deterministischem Verhalten, bei denen Sie eine vorhersehbare Zeit- und Speichernutzung benötigen.

Unterschiede zwischen den Aktionssprachen

Die Aktionssprachen MATLAB und C unterscheiden sich in der Syntax, den unterstützten Operationen und dem Verhalten bei der Codegenerierung. In diesen Tabellen sind die wichtigsten Unterschiede zwischen den beiden Aktionssprachen aufgeführt.

Grundlegende Operationen

FunktionalitätMATLAB als AktionsspracheC als Aktionssprache

Inkrement- und Dekrementoperationen

Das Diagramm korrigiert die Syntax automatisch zu MATLAB-Syntax. Zum Beispiel wird a++ zu a = a+1 korrigiert.

Das Diagramm unterstützt die Operationen a++ und a--. Siehe Operationen für Stateflow-Daten.

Zuweisungsoperationen

Das Diagramm korrigiert die Syntax automatisch zu MATLAB-Syntax. Zum Beispiel wird a += b zu a = a+b korrigiert.

Das Diagramm unterstützt die Operationen a += b, a –= b, a *= b und a /= b. Siehe Operationen für Stateflow-Daten.

Vergleichsoperationen

a ~= bDas Diagramm unterstützt die Operationen a != b und !a. Siehe Operationen für Stateflow-Daten.

Kommentarzeichen

Autokorrektur auf %.Das Diagramm unterstützt die Operatoren // und /* */. Siehe Operationen für Stateflow-Daten.
Bedingte Anweisungen

Sie können if-, for- und while-Anweisungen in Zustandsaktionen verwenden. Siehe Schleifen und bedingte Anweisungen.

Wird nur in Zustandsaktionen unterstützt.

Schleifenanweisungen

Sie können if-, for- und while-Anweisungen in Zustandsaktionen verwenden. Siehe Schleifen und bedingte Anweisungen.

Schleifenanweisungen werden nicht unterstützt. Verwenden Sie für bedingte und zyklische Muster stattdessen grafische Funktionen. Siehe Reuse Logic Patterns by Defining Graphical Functions.

Indizierung und Datenverarbeitung

FunktionalitätMATLAB als AktionsspracheC als Aktionssprache

Vektor- und Matrixindexierung

Eins-basierte Indizierung. Zum Beispiel A(1,2). Siehe Operationen für Vektoren und Matrizen in Stateflow.

Nullbasierte Indizierung. Zum Beispiel A[0][1]. Siehe Operationen für Vektoren und Matrizen in Stateflow.

Index-Begrenzungszeichen

Runde Klammern mit Kommas. Zum Beispiel A(1,2). Siehe Operationen für Vektoren und Matrizen in Stateflow.

Eckige Klammern. Zum Beispiel A[0][1]. Siehe Operationen für Vektoren und Matrizen in Stateflow.

Daten mit variabler Größe

Sie können Diagrammdaten variabler Größe in Zustands- und Übergangsaktionen ändern. Weitere Informationen finden Sie unter Variable-Size Data in Charts That Use MATLAB as the Action Language.

Sie können Diagrammdaten variabler Größe mithilfe der folgenden Optionen ändern:

  • MATLAB-Funktionen

  • Simulink-Funktionen

  • Truth-Tabellen, die MATLAB als Aktionssprache verwenden

Alle Berechnungen mit Daten variabler Größe müssen innerhalb dieser Funktionen erfolgen und nicht direkt in Zuständen oder Übergängen. Weitere Informationen finden Sie unter Variable-Size Data in Charts That Use C as the Action Language.

Skalare Expansion

Nicht unterstützt.

Unterstützt. Siehe Zuweisen von Werten zu allen Elementen.
String-Begrenzungszeichen

Verwenden Sie doppelte Anführungszeichen ("...") als Begrenzungszeichen. Siehe Manage Textual Information by Using Strings.

Verwenden Sie doppelte ("...") oder einfache Anführungszeichen ('...') als Begrenzungszeichen. Siehe Manage Textual Information by Using Strings.

Komplexe Daten

Verwenden Sie die komplexe Zahlendarstellung a + bi oder den Operator complex. Siehe Operations for Complex Data in Stateflow.

Verwenden Sie den Operator complex. Die Darstellung komplexer Zahlen wird nicht unterstützt. Siehe Operations for Complex Data in Stateflow.

Datentypvermehrung

Befolgt die MATLAB-Regeln für die Eingabe. Wenn Sie beispielsweise Daten des Typs double zu Daten des Typs int32 hinzufügen, erhalten Sie Daten des Typs int32.

Beachtet die C-Typisierungsregeln. Wenn Sie beispielsweise Daten des Typs double zu Daten des Typs int32 hinzufügen, erhalten Sie Daten des Typs double.

Erweiterte Funktionen und Codegenerierung

FunktionalitätMATLAB als AktionsspracheC als Aktionssprache

Festkomma-Konstrukte:

  • Der spezielle Zuweisungsoperator :=

  • Kontextabhängige Konstanten wie 4.3C

Nicht unterstützt.

Unterstützt. Siehe Override Fixed-Point Promotion in C Charts und Fixed-Point Context-Sensitive Constants.

Explizite Typumwandlungsoperationen

Verwenden Sie entweder die Typen-Umwandlungsfunktion in MATLAB oder die cast-Funktion. Der Operator type wird nicht unterstützt. Siehe Typecast-Operationen.

Verwenden Sie entweder die Typen-Umwandlungsfunktion in MATLAB oder die cast-Funktion mit dem type-Operator. Siehe Typecast-Operationen.

Punktnotation zur Angabe von Zuständen, lokalen Daten, Nachrichten und lokalen Ereignissen innerhalb von MATLAB-Funktionen

Unterstützt. Siehe Identify Data by Using Dot Notation.

Nicht unterstützt.

Strukturparameter

Einstellbare und nicht einstellbare Parameter werden unterstützt.

Es werden nur einstellbare Parameter unterstützt.

Verwendung des globalen fimath-Objekts

Unterstützt.

Nicht unterstützt.

Komplexe Daten

Verwenden Sie die komplexe Zahlendarstellung a + bi oder den Operator complex. Siehe Operations for Complex Data in Stateflow.

Verwenden Sie den Operator complex. Die Darstellung komplexer Zahlen wird nicht unterstützt. Siehe Operations for Complex Data in Stateflow.

Automatische Korrektur bei Verwendung von MATLAB als Aktionssprache

Stateflow-Diagramme, die MATLAB als Aktionssprache verwenden, korrigieren automatisch diese C-Konstrukte auf MATLAB-Syntax:

  • Inkrement- und Dekrementoperationen wie a++ und a--. Zum Beispiel wird a++ in a = a+1 geändert.

  • Zuweisungsvorgänge wie a += b, a –= b, a *= b und a /= b. Zum Beispiel wird a += b in a = a+b geändert.

  • Evaluierungsvorgänge wie a != b und !a. Zum Beispiel wird a != b in a ~= b geändert.

  • Kommentarzeichen // und /* */ werden in % geändert.

Um diese Einstellung zu deaktivieren, verwenden Sie die Funktion sfpref:

sfpref(EnableLabelAutoCorrectionForMAL=false);

Richtlinien für die Verwendung von MATLAB als Aktionssprache

Befolgen Sie diese Richtlinien bei der Codierung in Diagrammen, die MATLAB als Aktionssprache verwenden.

Verwendung der Eins-basierten Indexierung für Vektoren und Matrizen

Die Eins-basierte Indexierung entspricht der MATLAB-Syntax. Weitere Informationen finden Sie unter Indizierungsnotation.

Verwenden runder Klammern anstelle von eckigen Klammern, um in Vektoren und Matrizen zu indizieren

Diese Aussage ist gültig:

a(2,5) = 0;

Diese Aussage ist ungültig:

a[2][5] = 0;

Weitere Informationen finden Sie unter Indizierungsnotation.

Verwenden des MATLAB-Formats für Kommentare

Nutzen Sie % bei der Angabe von Kommentaren in Zuständen und Übergängen, damit sie mit MATLAB übereinstimmen. Zum Beispiel ist der folgende Kommentar gültig:

% This is a valid comment in the style of MATLAB

Kommentare im C-Stil, wie // und /* */, werden automatisch in % korrigiert.

Einschließen von Übergangsmaßnahmen in Klammern

Diese Übergangskennzeichnung enthält eine gültige Übergangsmaßnahme:

E [x > 0] / {x = x+1;}

Diese Übergangskennzeichnung ist falsch, wird aber automatisch in die gültige Syntax korrigiert.

E [x > 0] / x = x+1;

Verwenden Sie keine Kontrollflusslogik in Bedingungsaktionen und Übergangsaktionen

Die Ablaufsteuerungslogik (wie if, switch, for und while-Anweisungen) wird nur in Zustandsaktionen unterstützt. Die Verwendung der Ablaufsteuerungslogik in Bedingungsaktionen oder Übergangsaktionen führt zu einem Syntaxfehler.

Deklarieren Sie keine globalen oder persistenten Variablen in Zustandsaktionen

Die Schlüsselwörter global und persistent werden in Zustandsaktionen nicht unterstützt.

Zuweisen eines Anfangswerts zu lokalen und Ausgabedaten

Wenn MATLAB als Aktionssprache verwendet wird, führen Daten, die ohne einen Anfangswert gelesen werden, zu einem Fehler.

Schließen Sie Typpräfixes für Kennungen von Aufzählungswerten ein

Die Kennung TrafficColors.Red ist gültig, Red jedoch nicht.

Verwenden Sie zum Generieren von Code aus Ihrem Modell MATLAB-Sprachfunktionen, die für die Codegenerierung unterstützt werden.

Andernfalls verwenden Sie coder.extrinsic, um nicht unterstützte Funktionen aufzurufen, wodurch die gewünschte Funktionalität für die Simulation bereitgestellt wird, jedoch nicht im generierten Code. Eine Liste der unterstützten Features und Funktionen finden Sie unter Sprache, Funktion und Objektunterstützung (Simulink).

Siehe auch

Themen