Create Variant Controls Programmatically
Create and Export Variant Controls
Create control variables, define variant conditions, and export control variables.
Create control variables in the base workspace or a data dictionary.
FUEL=2; EMIS=1;
Use the control variables to define the control condition using a
Simulink.VariantExpression
object.LinearController=Simulink.Variant('FUEL==2 && EMIS==1');
Note
Before each simulation, define
Simulink.VariantExpression
objects representing the variant conditions.If you saved the variables in the base workspace, select the control variables to export in the workspace. Right-click and click Save As to specify the name of a MAT-file.
Reuse Variant Conditions
If you want to reuse common variant conditions across models, specify variant
control conditions using Simulink.VariantExpression
objects.
Reuse Simulink.VariantExpression
objects to change the model
hierarchy dynamically to reflect variant conditions by changing the values of the
control variables that define the condition expression.
The example Simulink.VariantExpression Objects for Variant Condition Reuse of Variant Blocks shows the use
of Simulink.Variant
objects to define variant control
conditions.
Note
You must use Simulink.VariantExpression
objects to define
variant control conditions for AUTOSAR workflows.
Enumerated Types as Variant Controls
Use enumerated types to give meaningful names to integers used as variant control values.
In the MATLAB® Editor, define the classes that map enumerated values to meaningful names.
classdef sldemo_mrv_CONTROLLER_TYPE < Simulink.IntEnumType enumeration NONLINEAR (1) SECOND_ORDER (2) end end
classdef sldemo_mrv_BUILD_TYPE < Simulink.IntEnumType enumeration PROTOTYPE (1) PRODUCTION (2) end end
Define
Simulink.VariantExpression
objects for these classes in the base workspace.VE_NONLINEAR_CONTROLLER = Simulink.VariantExpression... ('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.NONLINEAR') VE_SECOND_ORDER_CONTROLLER =Simulink.VariantExpression... ('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER') VE_PROTOTYPE =Simulink.VariantExpression... ('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE') VE_PRODUCTION =Simulink.VariantExpression... ('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PRODUCTION')
Using enumerated types simplifies the generated code because it contains the names of the values rather than integers.
Related Examples
- Compile Code Conditionally for Variations of Component Represented Using Variant Block (Simulink Coder)
- Create and Activate Variant Configurations