Operationen für Stateflow-Daten
Stateflow®-Diagramme in Simulink®-Modellen weisen als eine ihrer Eigenschaften eine Aktionssprache auf, die die Operationen definiert, die Sie für Zustands- und Übergangsaktionen verwenden können. Die Sprach-Eigenschaften sind:
MATLAB® als Aktionssprache.
C als Aktionssprache.
Stateflow-Diagramme unterstützen Standard-Programmieroperationen wie Addition, Vergleich und Zuweisung. Welche Operationen verfügbar sind, hängt von der Aktionssprache Ihres Diagramms ab.
Beide Aktionssprachen unterstützen grundlegende Arithmetik (
+,-,*) und Vergleiche (>,<,==).Die Aktionssprache C unterstützt zusätzliche Operationen wie bitweise Operatoren (
&,|).Die Aktionssprache MATLAB verwendet Funktionen für einige Operationen, die C mit Operatoren durchführt.
Alle Operationen funktionieren mit Stateflow-Datentypen wie Ganzzahlen, Gleitkommazahlen und booleschen Werten. Weitere Informationen finden Sie unter Unterschiede zwischen MATLAB und C als Aktionssprache-Syntax.
Arithmetische Operationen
Verwenden Sie arithmetische Operationen, um Berechnungen mit Sensorwerten, Steuersignalen und Systemparametern durchzuführen.
| Operation | Priorität | Beschreibung | Beispiel |
|---|---|---|---|
| 0 | Exponent | voltage_squared = voltage ^ 2 |
| 1 | Multiplikation | power = voltage * current |
| 1 | Division | efficiency = output_power / input_power |
| 2 | Addition | total_force = applied_force + friction_force |
| 2 | Subtraktion | error = setpoint - measured_value |
Vergleichsoperationen
Verwenden Sie Vergleichsoperationen, um Bedingungen und Schwellenwerte in der Steuerlogik auszuwerten.
| Operation | Priorität | Beschreibung | Beispiel |
|---|---|---|---|
| 4 | Größer als | wenn (Temperatur > max_temp) |
| 4 | Kleiner als | wenn (Druck < min_pressure) |
| 4 | Größer gleich | wenn (Geschwindigkeit >= target_speed) |
| 4 | Kleiner gleich | wenn (Spannung <= safety_limit) |
| 5 | Gleich | wenn (Modus == CALIBRATION) |
| 5 | Ungleich (MATLAB) | wenn (Status ~= READY) |
| 5 | Ungleich (C) | wenn (Status != READY) |
Logische Operationen
Verwenden Sie logische Operationen, um mehrere Bedingungen zu kombinieren.
| Operation | Priorität | Aktionssprache MATLAB | Aktionssprache C |
|---|---|---|---|
&& | 9 | Logisches AND. | Logisches AND. |
| 10 | Logisches OR. | Logisches OR. |
| 5 | Logisches NOT | Logisches NOT |
| 5 | Nicht unterstützt | Logisches NOT |
Zuweisungsoperationen
Weisen Sie mithilfe des =-Operators den Variablen Werte zu:
sensor_reading = adc_value; control_output = pid_result;
Bei Diagrammen, die C als Aktionssprache verwenden, können Sie diese zusammengesetzten Zuweisungsoperatoren verwenden.
| Operation | Äquivalent | Beispiel |
|---|---|---|
a += b |
|
|
|
|
|
|
|
|
|
|
|
Inkrement und Dekrement
Bei Diagrammen, die C als Aktionssprache verwenden, können Sie Ihre Datenwerte mithilfe von ++ und –- erhöhen bzw. verringern. Beispiel:
counter++; // Equivalent to counter = counter + 1 sample_index--; // Equivalent to sample_index = sample_index - 1
Typen-Umwandlungsoperationen
In jedem Stateflow-Diagramm können MATLAB-Typ-Funktionen verwendet werden.
pressure_int = int16(pressure_reading); voltage_single = single(voltage_measurement);
Die Verwendung der cast-Funktion ist je nach Aktionssprache unterschiedlich.
Verwenden Sie in Diagrammen, die MATLAB als Aktionssprache verwenden, Folgendes:
result = cast(sensor_value, "int32"); scaled_value = cast(raw_data, "like", reference_signal);
Verwenden Sie in Diagrammen, die C als Aktionssprache verwenden, Folgendes:
result = cast(sensor_value, int32); scaled_value = cast(raw_data, type(reference_signal));
Typecast-Operationen
Um einen Wert eines Typs in einen anderen Typ umzuwandeln, verwenden Sie Typecast-Operationen. Sie können Daten als expliziten Typ oder den Typ einer anderen Variable darstellen.
Darstellen als expliziter Datentyp
Um einen numerischen Ausdruck als einen expliziten Datentyp darzustellen, verwenden Sie eine dieser Typumwandlungs-Funktionen: double, single, int8, int16, int32, int64, uint8, uint16, uint32, uint64 und boolean. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenlose 16-Bit-Ganzzahl dargestellt und der Wert den Daten y zugewiesen:
y = uint16(x+3);
Bei Diagrammen, die MATLAB als Aktionssprache verwenden, können Sie alternativ die cast-Funktion verwenden und "double", "single", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" oder "logical" als Eingangsargument festlegen. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenlose 16-Bit-Ganzzahl dargestellt und der Wert y zugewiesen:
y = cast(x+3,"uint16");Um einen Ausdruck als Festkommatyp darzustellen, wird bei Diagrammen, die MATLAB als Aktionssprache verwenden, das Aufrufen der fi (Fixed-Point Designer)-Funktion unterstützt. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenbehaftete Festkommazahl mit einer Wortlänge von acht Bit und einer Bruchlänge von drei Bit dargestellt:
y = fi(x+3,1,8,3);
Rufen Sie bei Diagrammen, die C als Aktionssprache verwenden, die cast-Funktion mit einem fixdt (Simulink)-Ausdruck als Argument auf. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenbehaftete Festkommazahl mit einer Wortlänge von acht Bit und einer Bruchlänge von drei Bit dargestellt:
y = cast(x+3,fixdt(1,8,3));
Darstellen eines Typs auf Basis anderer Daten
Um die Typdarstellung zu vereinfachen, können Sie den Typ des numerischen Ausdrucks in denselben Typ wie andere Stateflow-Daten umwandeln.
Verwenden Sie bei Diagrammen, die MATLAB als Aktionssprache verwenden, die cast-Funktion mit dem Schlüsselwort "like". Dieser Ausdruck wandelt beispielsweise den Wert von x+3 in denselben Typ wie den der Daten z um und weist den Wert y zu:
y = cast(x+3,"like",z);Bei Diagrammen, die C als Aktionssprache verwenden, gibt der type-Operator den Typ von bestehenden Stateflow-Daten zurück. Verwenden Sie diesen Rückgabewert anstatt eines expliziten Typs in einer cast-Operation. Dieser Ausdruck wandelt beispielsweise den Wert von x+3 in denselben Typ wie den der Daten z um und weist den Wert y zu:
y = cast(x+3,type(z));
Bitweise Operationen
In dieser Tabelle werden die Interpretationen aller bitweiser Operationen in Stateflow-Diagrammen gemäß ihrer Priorität dargestellt (0 = höchste Priorität, 10 = niedrigste Priorität). Bitweise Operationen sind linksassoziativ. Bei jedem Ausdruck werden also Operatoren mit derselben Priorität von links nach rechts evaluiert. Die Reihenfolge der Evaluierung ist bei anderen Operationen nicht spezifiziert. Bei dieser Zuweisung
A = f() > g();
f() und g() nicht spezifiziert. Für besser vorhersagbare Ergebnisse ist es gute Programmierpraxis, Ausdrücke, die von der Reihenfolge der Evaluierung abhängen, auf mehrere Ausdrücke aufzuteilen.
Operation | Priorität | MATLAB als Aktionssprache | C als Aktionssprache |
|---|---|---|---|
| 6 | Logisches AND. Verwenden Sie bei bitweisem AND die |
Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations. |
| 7 | Nicht unterstützt. Verwenden Sie für bitweises XOR die | Bitweises XOR (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations. |
| 8 | Logisches OR. Verwenden Sie für bitweises OR die |
Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations. |
Bitweise Operationen
In dieser Tabelle wird die Interpretation aller bitweisen Operationen in Stateflow-Diagrammen zusammengefasst, die C als Aktionssprache verwenden.
Operation | Beschreibung |
|---|---|
a & b | Bitweises AND. |
a | b | Bitweises OR. |
a ^ b | Bitweises XOR. |
~a | Bitweises NOT. |
| Verschiebt a um b Bits nach rechts. |
| Verschiebt a um b Bits nach links. |
Außer Bitverschiebungs-Operationen a >> b und a << b müssen Sie alle bitweisen Operationen aktivieren, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Enable C-bit operations.
Bitweise Operationen werden an Ganzzahlen auf Binärebene ausgeführt. Nicht ganzzahlige Operanden werden zunächst als Ganzzahlen dargestellt. Ganzzahl-Operanden befolgen die C Promotionsregeln, um den Zwischenwert des Ergebnisses zu ermitteln. Dieser Zwischenwert wird daraufhin als der Typ dargestellt, den Sie für das Ergebnis der Operation angeben.
Hinweis
Bitweise Operationen werden bei Diagrammen, die MATLAB als Aktionssprache verwenden, nicht unterstützt. Verwenden Sie stattdessen die Funktionen bitand, bitor, bitxor, bitnot oder bitshift.
Bitweise Operationen und Ganzzahl-Überläufe
Die zur Zuweisung des Zwischenwerts verwendete implizite Darstellung einer bitweisen Operation kann zu einem Überlauf führen. Um die rechtesten Bits des Ergebnisses zu bewahren und unerwartetes Verhalten zu vermeiden, deaktivieren Sie die Diagrammeigenschaft Saturate on Integer Overflows.
Zum Beispiel berechnen beide Diagramme in diesem Modell die bitweise Operation y = ~u. Die Diagramme berechnen den Zwischenwert dieser Operation anhand der Ziel-Ganzzahlgröße 32 Bit; die ersten 24 Bits in diesem Wert sind daher alle 1. Wenn die Diagramme den Zwischenwert y zuweisen, verursacht die Darstellung als uint8 einen Ganzzahl-Überlauf. Der Ausgang der Diagramme hängt davon ab, wie das Diagramm Ganzzahl-Überläufe verarbeitet.
Ist Saturate on Integer Overflow aktiviert, sättigt das Diagramm das Ergebnis der bitweisen Operation und gibt den Wert null aus.
Ist Saturate on Integer Overflow deaktiviert, bricht das Diagramm das Ergebnis der bitweisen Operation um und gibt die acht rechtesten Bits aus.

Pointer- und Adressen-Operationen
In dieser Tabelle wird die Interpretation der Pointer- und Adressen-Operationen in Stateflow-Diagrammen, die C als Aktionssprache verwenden, zusammengefasst.
Operation | Beschreibung |
|---|---|
| Adressen-Operation. Verwenden Sie diese mit benutzerdefiniertem Code und Stateflow-Variablen. |
| Pointer-Operation. Verwenden Sie diese nur mit benutzerdefinierten Code-Variablen. |
Das Modell sf_bus_demo enthält beispielsweise eine benutzerdefinierte C Funktion, die Pointer als Argumente akzeptiert. Wenn das Diagramm die benutzerdefinierte Code-Funktion aufruft, verwendet es die &-Operation, um die Stateflow-Daten nach Adresse zu übergeben. Weitere Informationen finden Sie unter Integrate Custom Structures in Stateflow Charts.
Pointer- und Adressen-Operationen werden bei Diagrammen, die MATLAB als Aktionssprache verwenden, nicht unterstützt. Pointer auf Strukturen sollten nur im schreibgeschützten Modus verwendet werden und sind nur während dem Aufruf, bei dem sie übergeben werden, gültig.