If
Seleccione la ejecución del subsistema usando una lógica similar a la instrucción if-else
Bibliotecas:
Simulink /
Ports & Subsystems
Descripción
El bloque If, junto con los bloques If Action Subsystem que contienen un bloque Action Port, implementa la lógica if-else para controlar la ejecución de un subsistema. Para ver un ejemplo que usa el bloque If, consulte Select Subsystem Execution.

Ejemplos
Semántica de los subsistemas de Simulink
Este conjunto de ejemplos muestra diferentes tipos de subsistemas de Simulink® y qué semántica se usa al simular estos subsistemas. Cada ejemplo proporciona una descripción del modelo y las sutilezas que rigen cómo se ejecuta el modelo.
Bloques If-Then-Else
En este ejemplo se muestra el efecto de introducir una onda sinusoidal en bloques If Action Subsystem. Se ha diseñado para ilustrar la similitud entre el bloque If Action Subsystem y el bloque 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).
Limitaciones
Nota
Las limitaciones que se enumeran en esta sección solo se aplican a las versiones R2025b y anteriores.
El bloque If tiene las siguientes limitaciones:
No admite parámetros ajustables. Los valores para una expresión
ifoelseifno pueden ajustarse durante una simulación en modo normal, modo Accelerator, o mientras se ejecuta código generado.Para implementar expresiones ajustables if-else, ajuste la expresión fuera del bloque If. Por ejemplo, use el bloque Relational Operator para evaluar la expresión fuera del bloque If o añada los parámetros ajustables como una entrada al bloque If.
No se admiten clases de almacenamiento personalizadas. Consulte Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder).
Las expresiones if y elseif no aceptan los operadores
+,-,*y/.
Puertos
Entrada
Para las versiones R2026a y posteriores, puede modificar las etiquetas de puerto de entrada de acuerdo con las expresiones lógicas usadas dentro del bloque. Para editar la etiqueta del puerto, coloque el cursor sobre el texto predeterminado, u1,u2,...,un, y cambie el texto.

Para la versión R2025b o anteriores, el bloque solo admite la etiqueta de puerto de entrada predeterminada u1,u2,...,un. Las entradas u1,u2,...,un deben tener el mismo tipo de datos. Las entradas no pueden ser de cualquier tipo de usuario definido, como un tipo enumerado.
El bloque If no admite tipos de datos de punto fijo directamente. Sin embargo, puede utilizar el bloque Compare To Constant para resolver esta limitación. Consulte Select Subsystem Execution.
Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean
Salida
Las salidas de los puertos if, else y elseif son señales de acción para los bloques If Action Subsystem.
Parámetros
1Especifique un puerto de entrada.
- entero
Especifique el número de puertos de entrada. Los puertos de bloques están etiquetados con un carácter
'u'seguido de un número,1,2,...,n, dondenes igual al número de entradas que especifique.
Uso programático
Parámetro de bloque: NumInputs |
| Tipo: vector de caracteres |
Valores: '1' | entero entre comillas |
Predeterminado: '1' |
Cuando el puerto if y todas las expresiones de puerto elseif son false, el puerto else envía una señal de acción para ejecutar el bloque adjunto If Action Subsystem.
- activado
Muestra el puerto else.
- desactivado
Oculta el puerto else.
Uso programático
Parámetro de bloque: ShowElse |
| Tipo: vector de caracteres |
Valores: 'on' | 'off' |
Predeterminado: 'on' |
Control de detección de cruces por cero.
- activado
Detecta cruces por cero.
- desactivado
No detecta cruces por cero.
Uso programático
Parámetro de bloque: ZeroCross |
| Tipo: vector de caracteres |
Valores: 'on' | 'off' |
Predeterminado: 'on' |
Desde R2025a
Seleccione este parámetro para garantizar que solo las instrucciones if-else se incluyan en el código generado a partir de un bloque If .
- activado
Solo las instrucciones if-else se incluyen en el código generado. Esta opción evita que se incluyan instrucciones switch-case en el código generado.
- desactivado
Cuando este parámetro está desactivado, el código generado a partir de un bloque If puede contener instrucciones switch-case, que realizan las mismas operaciones que el bloque If.
Uso programático
Para establecer el valor del parámetro de bloque de forma programática, use la función set_param.
Parámetro de bloque: EnsureIfElseCode |
| Tipo: vector de caracteres |
Valores: 'on' | 'off' |
Predeterminado: 'off' |
El bloque If Action Subsystem adjunto al puerto if se ejecuta cuando la expresión if asociada se evalúa como true.
u1 > 0Especifíquela enviando una señal de acción en el puerto de salida cuando la entrada
u1sea mayor que0.
Expresión lógica (desde la versión R2026a)
Utilice diversas expresiones lógicas, incluyendo expresiones que usen:
Parámetros ajustables.
Expresiones generales de MATLAB®, como
x1 > x2 + 5.Objetos de datos como
Simulink.ParameterySimulink.Signalcon clases de almacenamiento personalizadas. Para obtener más información, consulte Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Tipo de datos de punto fijo.
Tipo de datos enumerado.
Arreglos de estructuras de MATLAB.
Expresiones con:
Funciones aritméticas:
ceil,floor,absysign.Funciones trigonométricas:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshytanh.Funciones exponenciales, logarítmicas y de raíz:
log,log10,expysqrt.
Expresión lógica (versión R2025b y anteriores)
Nota
A partir de la versión R2025a, utilice la tabla Expressions para evitar la expresión if predeterminada (u1 > 0). Para obtener una expresión compleja con múltiples entradas y operadores, seleccione la expresión if y edítela en el cuadro Expression editor.
Para versiones anteriores a R2025a, este parámetro aparece como If expressions en el cuadro de diálogo del bloque. Puede especificar expresiones lógicas con este parámetro.
No obstante, en todas las versiones de Simulink®, esta expresión aparece en el bloque If adyacente al puerto de salida if.
La expresión solo puede incluir los operadores <, <=, ==, ~=, >, >=, &, |, ~, () y unary-minus. Los operadores +, -, *, / o ^ no están permitidos. La expresión no puede contener expresiones de tipo de datos, como int8(6), y no debe hacer referencia a variables de áreas de trabajo cuyo tipo de datos es distinto de double o single.
Uso programático
Parámetro de bloque: IfExpression |
| Tipo: vector de caracteres |
Valores: 'u1 > 0' | expresión lógica entre comillas |
Predeterminado: 'u1 > 0' |
El bloque If Action Subsystem adjunto a un puerto elseif se ejecuta cuando la expresión elseif asociada se evalúa como true y el resto de expresiones if y elseif son falsas.
- vacío
Expresiones lógicas no especificadas.
Lista de expresiones lógicas (desde R2026a)
Utilice una gama de expresiones lógicas que no se admitían anteriormente incluyendo expresiones que usen:
Parámetros ajustables.
Expresiones generales de MATLAB, como
x1 > x2 + 5.Objetos de datos como
Simulink.ParameterySimulink.Signalcon clases de almacenamiento personalizadas. Para obtener más información, consulte Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Tipo de datos de punto fijo.
Tipo de datos enumerado.
Arreglos de estructuras de MATLAB.
Expresiones con:
Funciones aritméticas:
ceil,floor,absysign.Funciones trigonométricas:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshytanh.Funciones exponenciales, logarítmicas y de raíz:
log,log10,expysqrt.
Expresiones lógicas (versión R2025b y anteriores)
Nota
A partir de la versión R2025a, para añadir y editar expresiones elseif, utilice la tabla Expressions. Use los botones de acción a la izquierda de la tabla para añadir, eliminar y mover las expresiones. La tabla permite escribir cada expresión elseif por separado en lugar de en una lista separada por comas y organizar las expresiones según los requisitos de modelado. Para obtener una expresión compleja con múltiples entradas y operadores, seleccione la fila que contiene esa expresión elseif y edítela en el cuadro Expression editor.
Para versiones anteriores a R2025a, este parámetro aparece como Else expressions en el cuadro de diálogo del bloque. En esas versiones, especifique una lista de expresiones lógicas separadas por comas.
No obstante, en todas las versiones de Simulink, las expresiones aparecen en el bloque If debajo del puerto if y por encima del puerto else cuando selecciona la casilla Show else condition.
Las expresiones solo pueden incluir los operadores <, <=, ==, ~=, >, >=, &, |, ~, () y unary-minus. Los operadores +, -, *, / o ^ no están permitidos. Las expresiones no deben contener expresiones de tipo de datos, como int8(6), y no deben hacer referencia a variables de áreas de trabajo cuyo tipo de datos es distinto de double o single.
Uso programático
Parámetro de bloque: ElseIfExpressions |
| Tipo: vector de caracteres |
Valores: '' | lista de expresiones lógicas separadas por comas entre comillas |
Predeterminado: '' |
Características del bloque
Tipos de datos |
|
Paso directo |
|
Señales multidimensionales |
|
Señales de tamaño variable |
|
Detección de cruce por cero |
|
Más acerca de
Los bloques If que provocan que un bloque If Action Subsystem se ejecute reciben cobertura de condiciones, decisiones y MCDC, y:
La condición
if, y cada condiciónelseif, si existen, reciben cobertura de decisiones.Cualquier condición
ifoelseifque contenga una expresión lógica con múltiples condiciones, comou1 && u2, también recibe cobertura de MCDC y condiciones para cada condición de la expresión.La condición
elseno recibe cobertura directamente. El caso falso de la condiciónifo la última condiciónelseif, si existe, es el caso verdadero de la condiciónelsey viceversa. Por lo tanto, la cobertura completa del resto del bloque If implica una cobertura completa de la condiciónelse.
Simulink Coverage™ proporciona información sobre el número total de pasos de tiempo que cada condición if y elseif se evalúa como verdadera y falsa. Si la condición if o elseif se evalúa como verdadera al menos una vez y se evalúa como falsa al menos una vez, la cobertura de decisiones es del 100%. Si ninguna condición if o elseif es verdadera, o si ninguna condición if o elseif es falsa, la cobertura de decisiones es del 50%. Si la condición if o elseif previa no es falsa en ningun paso de tiempo, una condición elseif puede tener una cobertura de decisiones del 0%.
Dado que el bloque If compara sus señales de entrada, si selecciona la métrica de cobertura Relational Boundary, el bloque If recibe cobertura de límites relacionales. Para obtener más información, consulte Relational Boundary Coverage (Simulink Coverage).
El informe de cobertura muestra la expresión que Simulink Coverage evalúa y proporciona información sobre el número de pasos de tiempo que la expresión es verdadera y falsa. Por ejemplo, considere un caso en el que un bloque If evalúa si la entrada no es igual a cero; el informe de cobertura muestra if(u1 ~= 0) como decisión.

Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante Simulink® Coder™.
HDL Coder™ proporciona opciones de configuración adicionales que afectan a la implementación de HDL y la lógica sintetizada.
Este bloque tiene una sola arquitectura de HDL predeterminada.
| ConstrainedOutputPipeline | Número de registros que se debe colocar en las salidas desplazando los retardos existentes en el diseño. La canalización distribuida no redistribuye estos registros. El valor predeterminado es |
| InputPipeline | Número de fases de canalización de entrada que desea insertar en el código generado. La canalización distribuida y la canalización de salida restringida pueden mover estos registros. El valor predeterminado es |
| OutputPipeline | Número de fases de canalización de salida que desea insertar en el código generado. La canalización distribuida y la canalización de salida restringida pueden mover estos registros. El valor predeterminado es |
| SynthesisAttributes | Especifica los atributos de síntesis para los bloques y las señales de salida del bloque del modelo. El código generado en HDL contiene estos atributos. Para obtener más información, consulte SynthesisAttributes (HDL Coder). |
Historial de versiones
Introducido antes de R2006aUtilice la propiedad SynthesisAttributes del bloque HDL para especificar los atributos de síntesis para el bloque y sus señales de salida. HDL Coder incluye estos atributos en el código generado en HDL.
A partir de la versión R2026a, el bloque permite:
Adaptar la etiqueta del puerto de entrada del bloque If a sus requisitos de modelado. En el pasado, solo se podían utilizar nombres predeterminados, como
u1,u2, y así sucesivamente para la etiqueta del puerto de entrada.Utilice una gama de expresiones lógicas que no se admitían anteriormente para las condiciones if y elseif. Para obtener más información sobre la lista de expresiones, consulte if.
El cuadro de diálogo de bloque actualizado permite especificar expresiones lógicas en una tabla. Ya no es necesario especificar las expresiones elseif en una lista separada por comas. Este cambio hace que el flujo lógico en su conjunto sea más fácil de visualizar y analizar. La tabla también contiene nuevos botones de acción que permiten añadir, eliminar y mover expresiones if-else hacia arriba y abajo. Estos botones ayudan a organizar las expresiones según los requisitos de modelado. Además, el nuevo cuadro de edición de expresiones permite editar expresiones complejas.
El código generado contiene expresiones if-else. Este cambio evita que se incluyan instrucciones switch-case y mejora la legibilidad del código generado.
Consulte también
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.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- 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)


