Reinitialize States of Blocks in Subsystem
The Reinitialize Function block allows you set the state of all blocks in a referenced model or subsystem back to their initial condition, as well as to explicitly set block states or block parameters, at any time during model simulation. This example demonstrates the use of the Reinitialize Function block in a subsystem.
The model contains a subsystem with a reinitialize port. A Function-Call Generator block sends a function-call signal to the port at time step 5.
Inside the subsystem, two Discrete-Time Integrator blocks integrate the input signal and output the result. The blocks are identically configured, with the Initial condition set to 0.
The subsystem contains a Reinitialize Function block. Inside the Reinitialize Function block is a State Writer block that is configured to set the state of one of the two Discrete-Time Integrator blocks to 10.
The Reinitialize Function block executes only when the subsystem receives a reinitialize event, that is, when a function-call event is set to the reinitialize port of the subsystem. To expose a reinitialize port on the subsystem block, in the Subsystem block parameters dialog box, select Treat as atomic unit and then select Show subsystem reinitialize ports.
You can also use the Reinitialize Function block inside conditional subsystems. In such cases, you do not need to select Treat as atomic unit.
A port is displayed on the Subsystem block with the reinitialize icon and the label
reinit. This label
corresponds to the Event name specified in the Event
Listener block inside the Reinitialize Function block.
Sending a function-call event to the reinitialize port generates a subsystem reinitialize event, which has these effects:
For each block with a state in the subsystem, the state is set to the initial condition, as specified in the block parameters. In this example, the states of both Discrete-Time Integrator blocks are set to 0.
The contents of the Reinitialize Function block corresponding to the port are executed. In this example, the State Writer block sets the state of one of the Discrete-Time Integrator blocks to 10, overriding the value set in the previous step.
In addition to or instead of using State Writer blocks to set block states, you can configure a Reinitialize Function block to take other actions, such as setting a block parameter value with a Parameter Writer block or setting a data store value with a Data Store Write block.
In this example, a constant value of 5 is sent to both Discrete-Time Integrator blocks and integrated, and a function-call event is sent to the reinitialize port at time step 5, generating a subsystem reinitialize event. After you simulate the model, the Scope output shows that the first signal is reset to 10 and the second signal is reset to 0 at time step 5.