Guy on Simulink

Simulink & Model-Based Design

New in R2019b: Subsystem Reference

Today I want to introduce my favorite new feature in MATLAB R2019b: Subsystem Reference

Let's see what is it, how it works, and when you should be using it.

Creating a Subsystem File

In R2019b, we are introducing a new type of block diagram. In addition to model files and library files, it is now possible to create subsystem files:

New menu, including Subsystem Reference

In the Current Folder window, you can differentiate models, subsystems and libraries by their icon and type:

Compare File Types

From the command-line, if the subsystem is open you can determine what type of block diagram it is using get_param:

File Types

If you need to determine which type of block diagram an slx-file is without opening it or even loading it in memory, you can also use Simulink.MDLInfo:

Block diagram Types

Referencing a Subsystem File

The first important thing to realize is that a subsystem file cannot be simulated by itself. If you want to simulate or generate code for the block diagram stored in a subsystem file, you need to reference it in a model.

To reference a subsystem file, you start with a Subsystem block. In R2019b, you will notice that the Subsystem block has a new tab named Subsystem Reference. For convenience, we also added to the Simulink Library a block named Subsystem Reference, which is simply a Subsystem block pre-configured to reference a subsystem file.

Here is an animation where I configure and edit a referenced subsystem. As you can see, entering the subsystem and editing it is as simple and easy as editing a standard subsystem.

Editing Subsystem Reference

Converting an Existing Subsystem

If you have an existing model and would like to convert existing subsystems to referenced subsystems, you can simply right-click on the existing subsystem to do the conversion.

Converting a Subsystem Reference

Instance Specific Context Awareness

In a way similar to library blocks, it is possible to use multiple instances of the same subsystem in a model, and each instance adapts to its context. The next image shows a model with 3 instances of the same subsystem, one receiving a complex scalar double, one receiving a matrix of 2x3 and the third instance receiving a vector of two integers.

Converting a Subsystem Reference

Masking

If you want multiple instances of a referenced subsystem to take different parameter values, you can create a mask for the subsystem. This is done from the Modeling tab:

Masking Subsystem Reference

This will allow you to pass different parameter values to different instances of the subsystem. The next image shows 3 instances of the same subsystem. The two first take different values for a Gain block, and the last one takes a vector of 2 as input.

Multiple instances of Subsystem Reference

When To Use Subsystem Reference?

Now the big question: When to use subsystem reference?

The official answer to this question is to read the documentation section Component-Based Modeling Guidelines. In this section of the documentation, you will find this flow chart:

Componentization guideline

Here is my condensed version of how I make this decision. To componentize a model, you need to choose between 3 technologies: libraries, model reference and subsystem reference:

  • Library: To create a blockset. A blockset is a collection of blocks, distributed to a large audience and rarely changes. To facilitate this use case, libraries provide features like forwarding tables and link management.
  • Model Reference: To create standalone components with a well-defined rigid interface. Model reference offers many powerful features like accelerator mode, Software-in-the-Loop, Processor-in-the-Loop and protection. If you plan to create large models, model reference will help you scale in a robust and efficient manner.
  • Subsystem Reference: The simplest way to save part of a model to a separate file. Sometimes I like to describe the subsystem reference as a library that would contain only one subsystem, and stripped down of all the features useful to manage a blockset that are not really needed if you simply want to save the content of a subsystem in a separate file.

We also put together this table that provides more details on the specifics of those three technologies.

Now it's your turn

As mentioned above, I strongly recommend that you go through the Component-Based Modeling Guidelines to see all the options available to componentize a model and their implications.

Give subsystem reference a try and let us know what you think in the comments below.

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.