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' }