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