Use find_system
with Built-In MatchFilter
Options for Variant Blocks
This example compares the pre-compile and post-compile time results when using the find_system
function with the built-in MatchFilter functions. These filters help to find variant blocks that are active in simulation or part of the generated code:
Simulink.match.activeVariants
Simulink.match.codeCompileVariants
Open the model sldemo_variant_subsystems
.
model="sldemo_variant_subsystems";
open_system(model);
Before Model Compilation
Using the built-in match filters before compiling the model returns all blocks in the model, irrespective of their variant activeness.
find_system(model,MatchFilter=@Simulink.match.activeVariants)
ans = 26x1 cell
{'sldemo_variant_subsystems' }
{'sldemo_variant_subsystems/Controller' }
{'sldemo_variant_subsystems/Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Discrete...' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'}
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Out1' }
{'sldemo_variant_subsystems/More Info' }
{'sldemo_variant_subsystems/Scope' }
{'sldemo_variant_subsystems/sine1' }
{'sldemo_variant_subsystems/sine2' }
{'sldemo_variant_subsystems/sine3' }
{'sldemo_variant_subsystems/Out1' }
find_system(model,MatchFilter=@Simulink.match.codeCompileVariants)
ans = 26x1 cell
{'sldemo_variant_subsystems' }
{'sldemo_variant_subsystems/Controller' }
{'sldemo_variant_subsystems/Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Discrete...' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'}
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Out1' }
{'sldemo_variant_subsystems/More Info' }
{'sldemo_variant_subsystems/Scope' }
{'sldemo_variant_subsystems/sine1' }
{'sldemo_variant_subsystems/sine2' }
{'sldemo_variant_subsystems/sine3' }
{'sldemo_variant_subsystems/Out1' }
After Model Compilation
Compile the model.
set_param(model,"SimulationCommand","update");
Using the Simulink.match.activeVariants
filter returns the blocks that are active in simulation.
find_system(model,MatchFilter=@Simulink.match.activeVariants)
ans = 19x1 cell
{'sldemo_variant_subsystems' }
{'sldemo_variant_subsystems/Controller' }
{'sldemo_variant_subsystems/Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'}
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Out1' }
{'sldemo_variant_subsystems/More Info' }
{'sldemo_variant_subsystems/Scope' }
{'sldemo_variant_subsystems/sine1' }
{'sldemo_variant_subsystems/sine2' }
{'sldemo_variant_subsystems/sine3' }
{'sldemo_variant_subsystems/Out1' }
Using the Simulink.match.codeCompileVariants
filter returns the blocks that are part of the generated C code.
sldemo_variant_subsystems([],[],[],"compileForCodegen"); sldemo_variant_subsystems([],[],[],"term"); find_system("sldemo_variant_subsystems",MatchFilter=@Simulink.match.codeCompileVariants)
ans = 19x1 cell
{'sldemo_variant_subsystems' }
{'sldemo_variant_subsystems/Controller' }
{'sldemo_variant_subsystems/Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'}
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Out1' }
{'sldemo_variant_subsystems/More Info' }
{'sldemo_variant_subsystems/Scope' }
{'sldemo_variant_subsystems/sine1' }
{'sldemo_variant_subsystems/sine2' }
{'sldemo_variant_subsystems/sine3' }
{'sldemo_variant_subsystems/Out1' }
Find All Blocks Irrespective of Block Activeness
Use the Simulink.match.allVariants()
filter to find all blocks irrespective of whether the block is active or inactive due to variants.
find_system(model,MatchFilter=@Simulink.match.allVariants)
ans = 26x1 cell
{'sldemo_variant_subsystems' }
{'sldemo_variant_subsystems/Controller' }
{'sldemo_variant_subsystems/Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Linear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Discrete...' }
{'sldemo_variant_subsystems/Controller/Linear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'}
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' }
{'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' }
{'sldemo_variant_subsystems/Controller/Out1' }
{'sldemo_variant_subsystems/More Info' }
{'sldemo_variant_subsystems/Scope' }
{'sldemo_variant_subsystems/sine1' }
{'sldemo_variant_subsystems/sine2' }
{'sldemo_variant_subsystems/sine3' }
{'sldemo_variant_subsystems/Out1' }