If
Auswahl der Subsystem-Ausführung mithilfe von if-else-Ausdrücken ähnlicher Logik
Bibliotheken:
Simulink /
Ports & Subsystems
Beschreibung
Der If-Block und die If Action Subsystem-Blöcke, die einen Action Port-Block umfassen, implementieren eine If-Else-Logik zur Steuerung der Ausführung von Subsystemen. Ein Beispiel, bei dem der If-Block zum Einsatz kommt, finden Sie unter Select Subsystem Execution.

Beispiele
Simulink Subsystem Semantics
This set of examples shows different types of Simulink® Subsystems and what semantics are used when simulating these subsystems. Each example provides a description of the model and the subtleties governing how the model is executed.
If-Then-Else-Blöcke
In diesem Beispiel sind die Auswirkungen der Eingabe einer Sinuswelle in If Action Subsystem-Blöcke dargestellt. Dies soll die Ähnlichkeit zwischen dem If-Action-Subsystem-Block und dem Enabled Subsystem-Block veranschaulichen.
Modeling Clutch Lock-Up Using If Blocks
Use If/Else subsystems to build a clutch model. An 'If' subsystem models the clutch dynamics in the locked position while an 'Else' subsystem models the unlocked position. One or the other is enabled using the 'If' block. The dot-dashed lines from the 'If' block denote control signals, which are used to enable If/Else (or other conditional) subsystems. Checking any of the boxes on the GUI produces a plot of any of the selected variables (versus time).
Einschränkungen
Hinweis
Die in diesem Abschnitt aufgeführten Einschränkungen gelten nur für die Version R2025b und frühere Versionen.
Der If-Block weist die folgenden Einschränkungen auf:
Es werden keine abstimmbaren Parameter unterstützt. Werte für einen
if- oderelseif-Ausdruck können während einer Simulation im normalen Modus oder Accelerator-Modus oder bei der Ausführung von generiertem Code nicht verändert werden.Um abstimmbare If-Else-Ausdrücke zu implementieren, verändern Sie den Ausdruck außerhalb des If-Blocks. Sie können beispielsweise den Relational Operator-Block verwenden, um den Ausdruck außerhalb des If-Blocks zu evaluieren oder den abstimmbaren Parameter als Eingang zum If-Block hinzufügen.
Es werden keine benutzerdefinierten Speicherklassen unterstützt. Siehe Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder).
Die if-Ausdrücke und elseif-Ausdrücke können bestimmte Operatoren wie
+,-,*und/nicht akzeptieren.
Ports
Eingabe
In Version R2026a und späteren Versionen können Sie die Beschriftungen der Eingabeports entsprechend den logischen Ausdrücken, die innerhalb des Blocks verwendet werden, ändern. Um die Beschriftung eines Eingabeports zu bearbeiten, fahren Sie mit dem Cursor über den Standardtext, u1,u2,...,un, und ändern Sie den Text.

In Version R2025b und früheren Versionen lässt der Block nur die Standard-Beschriftung für Eingabeports, u1,u2,...,un, zu. Die Eingänge u1,u2,...,un müssen denselben Datentyp aufweisen. Die Eingänge können keinen benutzerdefinierten Typ aufweisen, wie etwa einen Enumerationstyp.
Der If-Block unterstützt Festkomma-Datentypen nicht direkt. Sie können diese Einschränkung jedoch mithilfe des Blocks Compare To Constant umgehen. Siehe Select Subsystem Execution.
Datentypen: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean
Ausgabe
Ausgänge von den if-, else- und elseif-Ports sind Aktionssignale für If Action Subsystem-Blöcke.
Parameter
1Geben Sie einen Eingangsport an.
- Integer
Geben Sie die Anzahl der Eingangsports an. Block-Ports sind mit einem
'u'-Zeichen gefolgt von einer Zahl,1,2,...,n, beschriftet, wobeinder Anzahl angegebener Eingänge entspricht.
Programmatische Verwendung
Blockparameter: NumInputs |
| Typ: Zeichenvektor |
Werte: '1' | Integer in Anführungszeichen |
Standardwert: '1' |
Wenn der if-Port und alle elseif-Port-Ausdrücke false sind, sendet der else-Port ein Aktionssignal, um den verbundenen If Action Subsystem-Block auszuführen.
- ein
Zeigt den else-Port an.
- aus
Verbirgt den else-Port.
Programmatische Verwendung
Blockparameter: ShowElse |
| Typ: Zeichenvektor |
Werte: 'on' | 'off' |
Standardwert: 'on' |
Regelt die Detektion von Nulldurchgängen.
- ein
Nulldurchgänge erkennen.
- aus
Nulldurchgänge nicht erkennen.
Programmatische Verwendung
Blockparameter: ZeroCross |
| Typ: Zeichenvektor |
Werte: 'on' | 'off' |
Standard: 'on' |
Seit R2025a
Wählen Sie diesen Parameter aus, um sicherzustellen, dass nur if-else-Anweisungen in dem aus einem If -Block generierten Code enthalten sind.
- ein
Im generierten Code sind nur if-else-Anweisungen enthalten. Diese Option verhindert die Aufnahme von switch-case-Anweisungen in den generierten Code.
- aus
Wenn dieser Parameter deaktiviert ist, kann der von einem If-Block generierte Code switch-case-Anweisungen enthalten, die dieselben Vorgänge wie der If-Block ausführen.
Programmatische Verwendung
Um den Wert des Blockparameters programmatisch festzulegen, verwenden Sie die Funktion set_param.
Blockparameter: EnsureIfElseCode |
| Typ: Zeichenvektor |
Werte: 'on' | 'off' |
Standard: 'off' |
Der If Action Subsystem-Block, der an den if-Port angehängt ist, wird ausgeführt, wenn der zugehörige if-Ausdruck zu true ausgewertet wird.
u1 > 0Legen Sie fest, dass ein Aktionssignal an den Ausgangsport gesendet wird, wenn der Eingang
u1größer als0ist.
Logischer Ausdruck (ab R2026a)
Verwenden Sie eine Reihe logischer Ausdrücke, darunter Ausdrücke, die Folgendes verwenden:
Anpassbare Parameter.
Allgemeine MATLAB®-Ausdrücke, z. B.
x1 > x2 + 5.Datenobjekte wie
Simulink.ParameterundSimulink.Signalmit benutzerdefinierten Speicherklassen. Weitere Informationen finden Sie unter Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Festkomma-Datentyp.
Aufzählungsdatentyp.
MATLAB-Struktur-Arrays.
Ausdrücke mit:
Arithmetischen Funktionen:
ceil,floor,absundsign.Trigonometrischen Funktionen:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshundtanh.Exponential-, Logarithmus- und Wurzelfunktionen:
log,log10,expundsqrt.
Logischer Ausdruck (R2025b und früher)
Hinweis
Verwenden Sie ab R2025a die Expressions-Tabelle, um den if-Standardausdruck (u1 > 0) zu bearbeiten. Wählen Sie für einen komplexen Ausdruck mit mehreren Eingaben und Operatoren den if -Ausdruck aus und bearbeiten Sie ihn im Feld Expression editor.
Bei Versionen vor R2025a wird dieser Parameter im Block-Dialogfeld als If expressions angezeigt. Mit diesem Parameter können Sie logische Ausdrücke angeben.
In allen Simulink®-Versionen erscheint dieser Ausdruck jedoch auf dem If-Block neben dem if-Ausgabeport.
Der Ausdruck darf nur die Operatoren <, <=, ==, ~=, >, >=, &, |, ~, () und unary-minus enthalten. Operatoren wie +, -, *, / und ^ sind nicht zulässig. Der Ausdruck darf keine Datentypausdrücke enthalten, z. B. int8(6), und darf nicht auf Workspace-Variabeln verweisen, deren Datentyp nicht double oder single ist.
Programmatische Verwendung
Blockparameter: IfExpression |
| Typ: Zeichenvektor |
Werte: 'u1 > 0' | Logischer Ausdruck in Anführungszeichen |
Standardwert: 'u1 > 0' |
Der If Action Subsystem-Block, der an einen elseif-Port angehängt ist, wird ausgeführt, wenn der zugehörige elseif-Ausdruck zu true ausgewertet wird und alle anderen if- und elseif-Ausdrücke false sind.
- leer
Logische Ausdrücke nicht angegeben.
Liste der logischen Ausdrücke (ab R2026a)
Verwenden Sie eine Reihe logischer Ausdrücke, die bisher nicht unterstützt wurden, darunter Ausdrücke, die Folgendes verwenden:
Anpassbare Parameter.
Allgemeine MATLAB-Ausdrücke, z. B.
x1 > x2 + 5.Datenobjekte wie
Simulink.ParameterundSimulink.Signalmit benutzerdefinierten Speicherklassen. Weitere Informationen finden Sie unter Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Festkomma-Datentyp.
Aufzählungsdatentyp.
MATLAB-Struktur-Arrays.
Ausdrücke mit:
Arithmetischen Funktionen:
ceil,floor,absundsign.Trigonometrischen Funktionen:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshundtanh.Exponential-, Logarithmus- und Wurzelfunktionen:
log,log10,expundsqrt.
Logische Ausdrücke (R2025b und früher)
Hinweis
Verwenden Sie ab R2025a die Expressions-Tabelle, um elseif-Ausdrücke hinzuzufügen und zu bearbeiten. Verwenden Sie die Aktionsschaltflächen links neben der Tabelle, um Ausdrücke hinzuzufügen, zu löschen und zu verschieben. In der Tabelle können Sie jeden elseif-Ausdruck einzeln schreiben, anstatt in einer durch Kommas getrennten Liste, und die Ausdrücke gemäß Ihren Modellierungsanforderungen organisieren. Für einen komplexen Ausdruck mit mehreren Eingaben und Operatoren wählen Sie die Zeile mit dem elseif-Ausdruck aus und bearbeiten Sie ihn im Expression editor-Feld.
Bei Versionen vor R2025a wird dieser Parameter im Block-Dialogfeld als Else expressions angezeigt. Geben Sie in diesen Versionen eine Liste logischer Ausdrücke an, die durch Kommas getrennt sind.
In allen Simulink-Versionen erscheinen die Ausdrücke jedoch auf dem If-Block unter dem if-Port und über dem else-Port, wenn Sie das Kontrollkästchen Show else condition aktivieren.
Ausdrücke können nur die Operatoren <, <=, ==, ~=, >, >=, &, |, ~, () und unary-minus enthalten. Operatoren wie +, -, *, / und ^ sind nicht zulässig. Die Ausdrücke dürfen keine Datentypausdrücke enthalten, z. B. int8(6), und darf nicht auf Workspace-Variabeln verweisen, deren Datentyp nicht double oder single ist.
Programmatische Verwendung
Blockparameter: ElseIfExpressions |
| Typ: Zeichenvektor |
Werte: '' | Liste der durch Kommas getrennten logischen Ausdrücke in Anführungszeichen |
Standardwert: '' |
Blockeigenschaften
Datentypen |
|
Direct Feedthrough |
|
Mehrdimensionale Signale |
|
Signale mit variabler Größe |
|
Erkennung von Nulldurchgängen |
|
Mehr über
Für If-Blöcke, die zur Ausführung eines If Action Subsystem-Blocks führen, wird eine Bedingungs-, Entscheidungs- und MCDC-Abdeckung erzeugt, und:
Für die
if-Bedingung und jede eventuell vorhandeneelseif-Bedingung wird eine Entscheidungsabdeckung erzeugt.Bei jeder
if- oderelseif-Bedingung, die einen logischen Ausdruck mit mehreren Bedingungen enthält, z. B.u1 && u2, wird ebenfalls für jede Bedingung des Ausdrucks eine MCDC- und Bedingungsabdeckung erzeugt.Für die
else-Bedingung wird keine direkte Abdeckung erzeugt. Der FALSE-Fall derif-Bedingung oder der letzten eventuell vorhandenenelseif-Bedingung ist der TRUE-Fall derelse-Bedingung und umgekehrt. Daher bedeutet eine vollständige Abdeckung des Restes des If-Blocks die vollständige Abdeckung derelse-Bedingung.
Simulink Coverage™ meldet die Gesamtzahl der Zeitschritte, die jede if- und elseif-Bedingung als wahr bzw. falsch auswertet. Wenn die if- oder elseif-Bedingung mindestens einmal als wahr und mindestens einmal als falsch ausgewertet wird, beträgt die Entscheidungsabdeckung 100 %. Wenn entweder keine der if- oder elseif-Bedingungen wahr oder keine der if- oder elseif-Bedingungen falsch sind, beträgt die Entscheidungsabdeckung 50 %. Wenn die vorherige if- oder elseif-Bedingung für jeden beliebigen Zeitschritt nicht falsch ist, kann eine elseif-Bedingung eine Entscheidungsabdeckung von 0 % aufweisen.
Da der If-Block seine Eingangssignale vergleicht, erhält der If-Block eine relationale Grenzabdeckung, wenn Sie die Abdeckungsmetrik Relational Boundary auswählen. Weitere Informationen finden Sie unter Relational Boundary Coverage (Simulink Coverage).
Der Abdeckungsbericht zeigt den Ausdruck an, der von Simulink Coverage ausgewertet wird, und meldet die Anzahl der Zeitschritte, für die der Ausdruck wahr bzw. falsch ist. Nehmen wir zum Beispiel einen Fall, in dem ein If-Block auswertet, ob die Eingabe ungleich null ist. Der Abdeckungsbericht zeigt dann if(u1 ~= 0) als Entscheidung an.

Erweiterte Fähigkeiten
C/C++ Codegenerierung
Generieren von C und C++ Code mit Simulink® Coder™.
HDL Coder™ bietet weitere Konfigurationsoptionen, die sich auf die HDL-Implementierung und synthetisierte Logik auswirken.
Dieser Block weist eine Standard-HDL-Architektur auf.
| ConstrainedOutputPipeline | Anzahl Register, die durch Verschiebung bestehender Verzögerungen im Design an den Ausgängen platziert werden sollen. Bei verteiltem Pipelining werden diese Register nicht neu verteilt. Der Standardwert ist |
| InputPipeline | Anzahl der Eingangs-Pipeline-Phasen, die in den generierten Code eingefügt werden sollen. Verteiltes Pipelining und beschränktes Ausgangs-Pipelining kann diese Register verschieben. Der Standardwert ist |
| OutputPipeline | Anzahl der Ausgangs-Pipeline-Phasen, die in den generierten Code eingefügt werden sollen. Verteiltes Pipelining und beschränktes Ausgangs-Pipelining kann diese Register verschieben. Der Standardwert ist |
| SynthesisAttributes | Legt die Syntheseattribute für die Blöcke und Block-Ausgangssignale im Modell fest. Der generierte HDL-Code enthält diese Attribute. Weitere Informationen finden Sie unter SynthesisAttributes (HDL Coder). |
Versionsverlauf
Eingeführt vor R2006aAnhand der HDL-Block-Eigenschaft SynthesisAttributes können Sie die Syntheseattribute für den Block und seine Ausgangssignale festlegen. HDL Coder nimmt diese Attribute in den generierten HDL-Code auf.
Ab R2026a ermöglicht Ihnen der Block Folgendes:
Sie können die Eingangsport-Beschriftung des If-Blocks entsprechend Ihren Modellierungsanforderungen anpassen. Bisher konnten zur Eingangsport-Beschriftung nur Standardnamen wie
u1,u2usw. verwendet werden.Sie können eine Reihe logischer Ausdrücke verwenden, die bisher für die if- und elseif-Bedingungen nicht unterstützt wurden. Weitere Informationen über die Liste der Ausdrücke finden Sie unter dem Parameter if.
Im aktualisierten Blockdialogfeld können Sie die logischen Ausdrücke in einer Tabelle angeben. Sie müssen die elseif-Ausdrücke nicht mehr in einer durch Kommas getrennten Liste angeben. Durch diese Änderung lässt sich der logische Gesamtablauf leichter visualisieren und analysieren. Die Tabelle enthält außerdem neue Aktionsschaltflächen, mit denen Sie if-else-Ausdrücke hinzufügen, löschen und nach oben und unten verschieben können. Diese Schaltflächen helfen Ihnen, die Ausdrücke gemäß Ihren Modellierungsanforderungen zu organisieren. Außerdem können Sie mit dem neuen Ausdruckseditor komplexe Ausdrücke bearbeiten.
Der generierte Code enthält if-else-Ausdrücke. Diese Änderung verhindert die Einbeziehung von switch-case-Anweisungen und verbessert die Lesbarkeit des generierten Codes.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Website auswählen
Wählen Sie eine Website aus, um übersetzte Inhalte (sofern verfügbar) sowie lokale Veranstaltungen und Angebote anzuzeigen. Auf der Grundlage Ihres Standorts empfehlen wir Ihnen die folgende Auswahl: .
Sie können auch eine Website aus der folgenden Liste auswählen:
So erhalten Sie die bestmögliche Leistung auf der Website
Wählen Sie für die bestmögliche Website-Leistung die Website für China (auf Chinesisch oder Englisch). Andere landesspezifische Websites von MathWorks sind für Besuche von Ihrem Standort aus nicht optimiert.
Amerika
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)


