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 -cAuswä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ät | MATLAB als Aktionssprache | C als Aktionssprache |
|---|---|---|
Inkrement- und Dekrementoperationen | Das Diagramm korrigiert die Syntax automatisch zu MATLAB-Syntax. Zum Beispiel wird | Das Diagramm unterstützt die Operationen |
Zuweisungsoperationen | Das Diagramm korrigiert die Syntax automatisch zu MATLAB-Syntax. Zum Beispiel wird | Das Diagramm unterstützt die Operationen a += b, a –= b, a *= b und a /= b. Siehe Operationen für Stateflow-Daten. |
Vergleichsoperationen | a ~= b | Das 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 | Wird nur in Zustandsaktionen unterstützt. |
| Schleifenanweisungen | Sie können | 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ät | MATLAB als Aktionssprache | C als Aktionssprache |
|---|---|---|
Vektor- und Matrixindexierung | Eins-basierte Indizierung. Zum Beispiel | Nullbasierte Indizierung. Zum Beispiel |
Index-Begrenzungszeichen | Runde Klammern mit Kommas. Zum Beispiel | Eckige Klammern. Zum Beispiel |
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:
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 ( | Verwenden Sie doppelte ("...") oder einfache Anführungszeichen ('...') als Begrenzungszeichen. Siehe Manage Textual Information by Using Strings. |
Komplexe Daten | Verwenden Sie die komplexe Zahlendarstellung | Verwenden Sie den Operator |
Datentypvermehrung | Befolgt die MATLAB-Regeln für die Eingabe. Wenn Sie beispielsweise Daten des Typs | Beachtet die C-Typisierungsregeln. Wenn Sie beispielsweise Daten des Typs |
Erweiterte Funktionen und Codegenerierung
| Funktionalität | MATLAB als Aktionssprache | C als Aktionssprache |
|---|---|---|
Festkomma-Konstrukte:
| 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 | Verwenden Sie entweder die Typen-Umwandlungsfunktion in MATLAB oder die |
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 | Unterstützt. | Nicht unterstützt. |
Komplexe Daten | Verwenden Sie die komplexe Zahlendarstellung | Verwenden Sie den Operator |
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++unda--. Zum Beispiel wirda++ina = a+1geändert.Zuweisungsvorgänge wie
a += b,a –= b,a *= bunda /= b. Zum Beispiel wirda += bina = a+bgeändert.Evaluierungsvorgänge wie
a != bund!a. Zum Beispiel wirda != bina ~= bgeä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 MATLABKommentare 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).