What about a Resettable Subsystem?
UPDATE: Since R2015a, a resettable block is now shipping with Simulink... yeah!
------------------- original post --------------------
I often write about new features in Simulink. Today I take a different route and write about a feature that I would like to see in Simulink.
Please leave a comment below if you have similar needs and use cases.
In various applications I work on, I often end up needing to reset the states of multiple blocks at the same time. Some blocks like Integrator and Delay have reset ports which I can use for this purpose. However other blocks like State-Space, Transfer Function or Unit Delay do not.
Blocks with Reset Ports
If blocks have reset ports, I can arrange my diagram to reset all those blocks at the same time:
This gives me the behavior I need, but if I have many blocks that need to be reset, this is a lot of routing. Also, there are multiple blocks that have states, but do not have an optional reset port.
What I am really dreaming of is a subsystem with a control port like the Enabled Subsystem, without the need to disable for one step to reset the states. With an Enabled Subsystem the control signal resets the states when it is re-enabled.
When simulating the model, we can see that this is not ideal because the system is disabled during one step:
Function-Call subsystem and Stateflow
Using Stateflow it is possible to reset the states in a subsystem without disabling it for one step.
To make that happen, we need to place the blocks inside a Function-Call Subsystem. We can then drive the subsystem with a Stateflow Chart. In the chart, bind an output event to a state and exit this state to trigger the reset of the states in the Function-Call Subsystem:
Note, this solution will not work for blocks with continuous states like Transfer Function, State-Space, etc.
Now it's your turn
Do you see the need in your applications for a subsystem where the states of all the blocks inside would reset from a rising edge on a control port? Let us know by leaving a comment here.
댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.