Main Content

Propagate Variant Conditions to Define Variant Regions with Variant Blocks

Variant condition propagation is the process whereby Simulink® determines which model components are active during simulation. This process evaluates the variant controls specified on the variant blocks and propagates the conditions of blocks using variant conditions. Variant conditions can propagate through signal lines, buses, and function calls to reach other blocks in the model. This process deactivates the model components associated with the inactive choices, and they are not included in the simulation. You can control the condition propagation to define the variant regions in the model. Simulink uses the variant activation time to determine when it chooses the active variant choice. For more information on variant activation time, see Activate Variant During Different Stages of Simulation and Code Generation Workflow.

Propagating the conditions of the blocks can:

  • Improve the accuracy of the model and avoid the manual computation of variant conditions. By propagating block conditions, you can ensure that each block is always in the correct state, and that the state is consistent across the entire model. This approach also makes it easier to modify and maintain your model over time, as you don't have to manually assign variant conditions to every dependent block. Instead, you can rely on the propagation mechanism to automatically manage the block states.

  • Reduce the computational load of your model and improve its performance. By using variant condition propagation, you can turn off the execution of blocks that are not currently active. Deactivating inactive components can help you manage the complexity of your model and make it easier to navigate.

Variant condition propagation

Visualize Propagated Variant Conditions in Variant Conditions Legend

You can use the Variant Conditions Legend to visualize the propagated variant conditions that activate each variant choice. Simulink annotates model components if there are variant conditions on them, and the Variant Conditions Legend displays the condition that corresponds to each annotation.

Consider this model containing multiple variant choices feeding into the Variant Source blocks. A specific variant condition activates each variant choice.

To view the Variant Conditions Legend, on the Debug tab, select Information Overlays > Variant Legend. If Variant Legend is not available, on the Debug tab, select Information Overlays > Variant Conditions. Alternatively, to view the Variant Condition Legend programmatically, use the variantLegend function in the MATLAB® Command Window.

Note

Variant Conditions Legend does not display the variant conditions for variant parameters. Use the Variant Parameters tab in the Variant Manager window to view the values and variant conditions for choices of variant parameters.

By default, the Variant Conditions Legend displays these fields:

  • Annotation — Annotations for the variant conditions on the blocks. The variant conditions are annotated as v:C, where v is the variant semantic indicator and C represents the variant condition index. You can click through the hyperlinked variant annotations to observe which parts of the model the variant condition corresponds to. For example, if you click v:1, the parts of the model that have the variant condition V == 1 are highlighted.

  • Simulation — Computed variant conditions on the blocks.

  • Workspace — Source of variant control variables in variant blocks. The variables can originate from a mask, a model, or a base workspace. All the variables used in a block must originate from a single source. If variables in a model come from different mask workspaces, they can share the same name, but their values must be different. To observe the source of the variables, click the hyperlinked workspaces. For more information, see Storage Locations for Variant Control Variables (Operands) in Variant Blocks.

    Note

    When you set the Variant activation time parameter to update diagram, the inactive choices are removed prior to the propagation of the signal attributes and are therefore not evaluated. As a result, the source of variables displayed for the inactive choices may be inaccurate.

To view the variant condition in the generated code, select Show generated code conditions.

When you pause on a block that has a variant condition, the tooltip displays the variant annotation and the related variant condition for the block. To view the variant condition annotation tooltip, you must select the Variant Condition option.

Variant condition annotations have these properties:

  • There are no annotations on unconditional blocks.

  • To reduce clutter, the legend displays only the final computed variant conditions. For example, if you enter a variant condition in a Variant Source block, that variant condition appears in the annotations only when you apply your changes.

  • The variant conditions in the legend are sorted alphabetically.

  • A variant condition is set to false if the blocks associated with that variant condition are never active.

    For example, the Inport4 block is connected to the Variant Source1 block, whose variant condition is V == 1. Variant Source1 is connected to the Variant Source2 block, which activates Variant Source1 only when V == 4. Therefore, Inport4 can only be active when V == 1 && V == 4, a condition that is always false.

  • The (default) variant condition is displayed as a negated condition. For example, the default choice of the Variant Source2 block Inport3 has a negated condition W ~= 1. During simulation, if none of the inputs to Variant Source2 is active, the default choice Inport3 becomes active. For more information of default choices, see Default Variant Choice.

Propagate Variant Conditions from Variant Blocks Upstream and Downstream

You can expand the variability control to any region of your model by automatically propagating variant conditions from variant blocks to other blocks upstream and downstream. Variant conditions can propagate through signal lines, buses, and function calls to reach blocks in a model affected by variant selection. For information on how variant conditions are constructed, see Assemble Variant Conditions Propagated from Variant Blocks.

Note

When variant control variables are defined within a mask or model workspace, the variant conditions that contain these variables are limited to the scope of that workspace and do not propagate beyond it. For more information, see Approaches to Control Active Variant Choice of a Variant Block Using Mask or Model Workspace.

This table lists the examples that explain how variant condition propagation works with different model components.

ExampleGoal
Propagate Variant Conditions to Define Variant Regions Outside Variant SubsystemsPropagate the states of the underlying blocks outside of the parent variant block.
Propagate Variant Conditions to Define Variant Regions Using Variant Source and Variant Sink BlocksPropagate the states of the variant blocks to all their connected blocks.
Variant Elements Within BusesReduce visual complexity by propagating variant conditions in composite signals.
Propagate Variant Conditions to Define Variant Regions in Virtual and Nonvirtual SubsystemsConditionally execute subsystem blocks using variant blocks.
Propagate Variant Conditions to Control Execution of Conditional SubsystemsConditionally provide input signals to conditional subsystems using variant blocks.
Propagate Variant Conditions to Enable or Disable Model or Subsystem References in HierarchyConditionally execute referenced models or subsystems using variant blocks.
Conditionally Execute Custom Initialize, Reinitialize, Reset, and Terminate RoutinesConditionally execute custom model initialize, reset, and terminate routines using variant blocks.
Conditionally Execute Simulink FunctionsConditionally execute Simulink functions (analogous to functions in a procedural programming language) using variant blocks.
Stop propagating variant conditions upstream and downstream.

Limitations

Signals from variant blocks to a Mux, Demux, or Vector Concatenate block must have the same variant condition.

Related Topics