If
Sélectionner l’exécution du sous-système en utilisant une logique semblable à l’instruction if-else
Bibliothèques :
Simulink /
Ports & Subsystems
Description
Le bloc If, ainsi que les blocs If Action Subsystem qui contiennent un bloc Action Port, implémente la logique if-else pour contrôler l’exécution des sous-systèmes. Pour un exemple qui utilise le bloc If, consultez Select Subsystem Execution.

Exemples
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.
Blocs If-Then-Else
Cet exemple illustre l'effet de l'introduction d'une onde sinusoïdale dans les blocs If Action Subsystem. Il a pour but de souligner la similitude entre le bloc du sous-système If Action et le bloc Enabled Subsystem.
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).
Limitations
Remarque
Les limitations répertoriées dans cette section s’appliquent uniquement aux versions R2025b et antérieures.
Le bloc If possède les limitations suivantes :
Il ne supporte pas les paramètres réglables. Les valeurs d’une expression
ifouelseifne peuvent pas être réglées pendant une simulation en mode normal ou accélérateur, ni pendant l’exécution de code généré.Pour implémenter des expressions if-else, réglez l’expression hors du bloc If. Par exemple, utilisez le bloc Relational Operator pour évaluer l’expression hors du bloc If ou ajoutez le paramètre réglable comme entrée au bloc If.
Il ne supporte pas les classes de stockage personnalisées. Consultez la rubrique Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder).
Les expressions if et elseif ne peuvent pas accepter certains opérateurs tels que
+,-,*et/.
Ports
Entrée
Pour les versions R2026a et ultérieures, vous pouvez modifier les étiquettes des ports d’entrée en fonction des expressions logiques utilisées dans le bloc. Pour modifier l’étiquette de port, passez le curseur sur le texte par défaut u1,u2,...,un et modifiez le texte.

Pour les versions R2025b ou antérieures, le bloc accepte uniquement l’étiquette de port d’entrée par défaut u1,u2,...,un. Les entrées u1,u2,...,un doivent avoir le même type de données. Les entrées ne peuvent pas être d’un type défini par l’utilisateur tel qu’un type énuméré.
Le bloc If ne supporte pas directement les types de données à virgule fixe. Cependant, vous pouvez utiliser le bloc Compare To Constant pour contourner cette limitation. Consultez la rubrique Select Subsystem Execution.
Types de données : single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean
Sortie(s)
Les sorties des ports if, else et elseif sont des signaux d’action pour les blocs If Action Subsystem.
Paramètres
1Spécifiez un port d’entrée.
- entier
Spécifiez le nombre de ports d’entrée. Les ports de bloc sont étiquetés avec un caractère
'u'suivi d’un nombre,1,2,...,n, oùnest égal au nombre d’entrées que vous spécifiez.
Utilisation programmatique
Paramètre de bloc : NumInputs |
| Type : vecteur de caractères |
Valeurs : '1' | entier entre guillemets |
Par défaut : '1' |
Quand le port if et toutes les expressions de port elseif sont false, le port else envoie un signal d’action pour exécuter le bloc If Action Subsystem relié.
- on
Affichez le port else.
- off
Masquez le port else.
Utilisation programmatique
Paramètre de bloc : ShowElse |
| Type : vecteur de caractères |
Valeurs : 'on' | 'off' |
Par défaut : 'on' |
Contrôlez la détection des passages par zéro.
- on
Détectez les passages par zéro.
- off
Ne détectez pas les passages par zéro.
Utilisation programmatique
Paramètre de bloc : ZeroCross |
| Type : vecteur de caractères |
Valeurs : 'on' | 'off' |
Par défaut : 'on' |
Depuis R2025a
Sélectionnez ce paramètre pour que seules les instructions if-else soient incluses dans le code généré à partir d’un bloc If .
- on
Seules les instructions if-else sont incluses dans le code généré. Cette option empêche l’inclusion d’instructions switch-case dans le code généré.
- off
Lorsque ce paramètre est défini à « off », le code généré à partir d’un bloc If peut contenir des instructions switch-case effectuant les mêmes opérations que le bloc If.
Utilisation programmatique
Pour définir la valeur du paramètre du bloc de manière programmatique, utilisez la fonction set_param.
Paramètre de bloc : EnsureIfElseCode |
| Type : vecteur de caractères |
Valeurs : 'on' | 'off' |
Par défaut : 'off' |
Le bloc If Action Subsystem relié au port if s’exécute quand l’expression if associée est évaluée à true.
u1 > 0Spécifiez l’envoi d’un signal d’action sur le port de sortie quand l’entrée
u1est supérieure à0.
Expression logique (depuis R2026a)
Utilisez diverses expressions logiques, y compris des expressions utilisant :
Des paramètres réglables.
Des expressions MATLAB® générales comme
x1 > x2 + 5.Des objets de données comme
Simulink.ParameteretSimulink.Signalavec des classes de stockage personnalisées. Pour plus d’informations, consultez Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Un type de données à virgule fixe.
Un type de données énumérées.
Des tableaux de structures MATLAB.
Des expressions contenant :
Des fonctions arithmétiques :
ceil,floor,absetsign.Des fonctions trigonométriques :
sin,cos,tan,asin,acos,atan,atan2,sinh,coshettanh.Des fonctions exponentielles, logarithmiques et racines :
log,log10,expetsqrt.
Expression logique (R2025b et versions antérieures)
Remarque
À partir de la version R2025a, pour modifier l’expression if par défaut (u1 > 0), utilisez le tableau Expressions. Pour une expression complexe comprenant plusieurs entrées et opérateurs, sélectionnez l’expression if et modifiez-la dans la zone Expression editor.
Pour les versions antérieures à la version R2025a, ce paramètre figure en tant que If expressions dans la boîte de dialogue du bloc. Vous pouvez spécifier des expressions logiques avec ce paramètre.
Cependant, dans toutes les versions de Simulink®, cette expression apparaît sur le bloc If adjacent au port de sortie if.
L’expression ne peut inclure que les opérateurs <, <=, ==, ~=, >, >=, &, |, ~, () et unary-minus. Les opérateurs tels que +, -, *, / et ^ ne sont pas autorisés. L’expression ne doit pas contenir d’expressions de type de données, par exemple int8(6), et ne doit pas faire référence à des variables d’espace de travail dont le type de données est différent de double ou de single.
Utilisation programmatique
Paramètre de bloc : IfExpression |
| Type : vecteur de caractères |
Valeurs : 'u1 > 0' | expression logique entre guillemets |
Par défaut : 'u1 > 0' |
Le bloc If Action Subsystem relié à un port elseif s’exécute quand l’expression elseif associée est évaluée à true et que toutes les expressions if et elseif sont fausses.
- vide
Expressions logiques non spécifiées.
Liste des expressions logiques (depuis R2026a)
Utilisez diverses expressions logiques qui n’étaient pas supportées auparavant, y compris des expressions utilisant :
Des paramètres réglables.
Des expressions MATLAB générales comme
x1 > x2 + 5.Des objets de données comme
Simulink.ParameteretSimulink.Signalavec des classes de stockage personnalisées. Pour plus d’informations, consultez Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Un type de données à virgule fixe.
Un type de données énumérées.
Des tableaux de structures MATLAB.
Des expressions contenant :
Des fonctions arithmétiques :
ceil,floor,absetsign.Des fonctions trigonométriques :
sin,cos,tan,asin,acos,atan,atan2,sinh,coshettanh.Des fonctions exponentielles, logarithmiques et racines :
log,log10,expetsqrt.
Expressions logiques (R2025b et versions antérieures)
Remarque
À partir de la version R2025a, pour ajouter et modifier des expressions elseif, utilisez le tableau Expressions. Utilisez les boutons d’action à gauche du tableau pour ajouter, supprimer et déplacer des expressions. Le tableau vous permet de rédiger chaque expression elseif séparément plutôt que sous forme de liste séparée par des virgules. Vous pouvez ainsi organiser les expressions selon vos exigences de modélisation. Pour une expression complexe comprenant plusieurs entrées et opérateurs, sélectionnez la ligne qui contient l’expression elseif en question et modifiez-la dans la zone Expression editor.
Pour les versions antérieures à la version R2025a, ce paramètre figure en tant que Else expressions dans la boîte de dialogue du bloc. Dans ces versions, spécifiez une liste d’expressions logiques séparées par des virgules.
Cependant, dans toutes les versions de Simulink, les expressions apparaissent sur le bloc If sous le port if et au-dessus du port else quand vous cochez la case Show else condition.
Les expressions ne peuvent inclure que les opérateurs <, <=, ==, ~=, >, >=, &, |, ~, () et unary-minus. Les opérateurs tels que +, -, *, / et ^ ne sont pas autorisés. Les expressions ne doivent pas contenir d’expressions de type de données, par exemple int8(6), et ne doivent pas faire référence à des variables d’espace de travail dont le type de données est différent de double ou de single.
Utilisation programmatique
Paramètre de bloc : ElseIfExpressions |
| Type : vecteur de caractères |
Valeurs : '' | liste d’expressions logiques séparées par des virgules et placées entre guillemets |
Par défaut : '' |
Caractéristiques des blocs
Types de données |
|
Traversée directe |
|
Signaux multidimensionnels |
|
Signaux de taille variable |
|
Détection des passages à zéro |
|
En savoir plus
Les blocs If qui entraînent l’exécution d’un bloc If Action Subsystem reçoivent la couverture des conditions, des décisions et des conditions/décisions modifiées (MCDC). De plus :
La condition
ifet chaque conditionelseif, si elles existent, reçoivent la couverture des décisions.Toute condition
ifouelseifqui contient une expression logique avec plusieurs conditions, telle queu1 && u2, reçoit également la couverture des conditions et MCDC pour chaque condition de l’expression.La condition
elsene reçoit pas directement de couverture. Le cas faux de la conditionifou de la dernière conditionelseif, s’il existe, est le cas vrai de la conditionelse, et vice versa. La couverture complète du reste du bloc If implique par conséquent la couverture complète de la conditionelse.
Simulink Coverage™ indique le nombre total de pas de temps où chaque condition if et elseif est évaluée comme vraie et comme fausse. Si la condition if ou elseif est évaluée au moins une fois comme vraie et au moins une fois comme fausse, la couverture des décisions est de 100 %. Si aucune condition if ou elseif n’est vraie, ou si aucune condition if ou elseif n’est fausse, la couverture des décisions est de 50 %. Si la condition if ou elseif précédente n’est fausse à aucun pas de temps, une condition elseif peut avoir une couverture des décisions de 0 %.
Étant donné que le bloc If compare ses signaux d’entrée, si vous sélectionnez la mesure de couverture Relational Boundary, le bloc If reçoit la couverture des limites relationnelles. Pour plus d’informations, consultez Relational Boundary Coverage (Simulink Coverage).
Le rapport de couverture affiche l’expression évaluée par Simulink Coverage et indique le nombre de pas de temps où l’expression est vraie et fausse. Prenons l’exemple d’un bloc If qui évalue si l’entrée est différente de zéro. Le rapport de couverture affiche if(u1 ~= 0) en tant que décision.

Capacités étendues
Génération de code C/C++
Générez du code C et C++ avec Simulink® Coder™.
HDL Coder™ fournit des options de configuration supplémentaires qui influent sur l’implémentation HDL et la logique synthétisée.
Ce bloc a une architecture HDL par défaut.
| ConstrainedOutputPipeline | Nombre de registres à placer aux sorties en déplaçant les retards au sein de votre design. Le pipelining distribué ne redistribue pas ces registres. La valeur par défaut est |
| InputPipeline | Nombre d’étapes de pipelines d’entrée à insérer dans le code généré. Le pipelining distribué et le pipelining de sortie sous contrainte peuvent déplacer ces registres. La valeur par défaut est |
| OutputPipeline | Nombre d’étapes de pipelines de sortie à insérer dans le code généré. Le pipelining distribué et le pipelining de sortie sous contrainte peuvent déplacer ces registres. La valeur par défaut est |
| SynthesisAttributes | Spécifie les attributs de synthèse des blocs et des signaux de sortie des blocs du modèle. Le code HDL généré contient ces attributs. Pour plus d’informations, consultez SynthesisAttributes (HDL Coder). |
Historique des versions
Introduit avant R2006aUtilisez la propriété de bloc HDL SynthesisAttributes pour spécifier les attributs de synthèse du bloc et de ses signaux de sortie. HDL Coder inclut ces attributs dans le code HDL généré.
À partir de la version R2026a, le bloc vous permet de :
Personnaliser l’étiquette du port d’entrée du bloc If selon vos exigences de modélisation. Auparavant, vous pouviez seulement utiliser les noms par défaut tels que
u1,u2, etc. pour l’étiquette du port d’entrée.Utiliser diverses expressions logiques qui n’étaient pas supportées auparavant pour les conditions if et elseif. Pour plus d’informations sur la liste des expressions, consultez le paramètre if.
La boîte de dialogue des blocs a été modifiée pour vous permettre de spécifier les expressions logiques dans un tableau. Vous n’avez plus besoin de spécifier les expressions elseif dans une liste séparée par des virgules. Ce changement rend le déroulement logique plus facile à visualiser et à analyser dans son ensemble. Le tableau contient de nouveaux boutons d’action permettant d’ajouter, de supprimer et de déplacer des expressions if-else vers le haut et vers le bas. Ces boutons vous aident à organiser les expressions selon vos exigences de modélisation. De plus, la nouvelle zone d’édition d’expression vous permet de modifier les expressions complexes.
Le code généré contient des expressions if-else. Ce changement empêche l’inclusion d’instructions switch-case et améliore la lisibilité du code généré.
Voir aussi
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.
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)


