Main Content

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

See Also

find_system