A rate-based model is a model with explicitly scheduled subsystems. You can schedule a subsystem with a periodic execution rate by specifying the Sample time parameter for an Inport block connected to the Subsystem block, the Subsystem block, or a block within the Subsystem block where Sample time can be specified (for example, a Delay block).
To open a completed rate-based model, see ex_rate_based_model
.
Note
Using Continuous time blocks such as Integrator blocks are not allowed. Instead use discrete time equivalent blocks
Consider the following model with two atomic Subsystem blocks. Subsystem1 multiplies its input by 2 while Subsystem2 multiplies its input by 4.
Open the Inport 1 dialog box. On the Signal Attributes tab, set the
Sample time to 0.2
.
Open the Inport 2 dialog box. On the Signal Attributes tab, set the
Sample time to 0.4
.
If a rate-based model has multiple rates, single tasking is not allowed. Select the check box for the configuration parameter Treat each discrete rate as a separate task.
Selecting single-tasking versus multi-tasking and single-rate versus multi-rate controls entry points in the generated code.
Configuration Parameter | Explicitly Scheduled Rates | Generated Code Entry Points |
---|---|---|
Single-tasking | Single-rate Subsystem1 Subsystem2 | One entry-point function called periodically every 0.2 seconds void model_component_step(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; model_component_Y.Out2 = 4.0 * model_component_U.In2; } |
Single-tasking | Multi-rate Subsystem1 Subsystem2 | One entry-point function called periodically every 0.2 seconds, a schedule counter in the function determines which rates execute at which sample times. void model_component_step(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; if (model_component_M->Timing.TaskCounters.TID[1] == 0) { model_component_Y.Out2 = 4.0 * model_component_U.In2; } rate_scheduler(); } |
Multi-tasking | Single-rate Subsystem1 Subsystem2 | One entry-point function, the same code as single-tasking with a single-rate. Not a use case, but the code generates without an error |
Multi-tasking | Multi-rate Subsystem1 Subsystem2 | Two entry-point functions one called periodically every 0.2 seconds and the other called periodically every 0.4 seconds. Rates are executed using a prioritized preemptive multitasking scheme. Faster rates are assigned higher priorities and thus executed first. void model_component_step0(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; } void model_component_step1(void) { model_component_Y.Out2 = 4.0 * model_component_U.In2; } |