Simulink - Change continuous state value at a given time point

10 views (last 30 days)
Hello, I have a model with a Level-2 MATLAB S-Function simulating continuous states. At a given time point I want one of the continuous state values to increase by a given value. It is even not really important, that the value changes on exactly that time point.
I tried to solve it with a signal, that changes from 0 to the value at the time point and then used the Difference, or the Memory block to get the signal to only be the value at one timestep, otherwise 0. Then added the value to the continuous state in the s-function output. But with this method the value is somehow integrated and the increase of the continuous state much too high.
I am glad for any help.

Accepted Answer

Guy Rouleau
Guy Rouleau on 25 May 2012
If you want to generate a "jump" in your continuous state, you must reset the block. This can be done in many ways. For example placing your block in an Enabled subsystem and turning it off for one sample and then on again. That way you should be able to reset your state to a desired value, for example coming from an input port or any other computation.
  3 Comments
Jan-Ulrich Schad
Jan-Ulrich Schad on 1 Jun 2012
I tried it now and it works as I explained. One has to make sure the input signal to the enabled subsystem with the s-function has to have the value to change the continuous state one time step ahead of disabling the subsystem.
Christian
Christian on 2 Dec 2013
Hello, I am struggeling with a similar problem and the given solution is generally working in my model as well. Thank you very much for that.
However, it seems that after re-enabling the subsystem, the solver continues running with larger time steps than it did when the simulation initially started. This causes in some cases too large gradients and a "crash" of my simulation.
I have found out that there is the "ssSetSolverNeedsReset"-function for CS-functions to reset the solver. Is there something similar for Matlab S-functions?
Thanks for any help.

Sign in to comment.

More Answers (1)

Kaustubha Govind
Kaustubha Govind on 25 May 2012
I'm curious about why you chose to use continuous states instead of discrete states if you do not need the state to be integrated. See my answer here for a brief explanation of continuous and discrete states in Simulink.
  2 Comments
Jan-Ulrich Schad
Jan-Ulrich Schad on 25 May 2012
The continuous states are just usual continuous states. But the value that is added to one of the continuous states is "backpropagated?" by the solver. Since, when I use Euler instead of ode54, the value is added correctly.
Jan-Ulrich Schad
Jan-Ulrich Schad on 25 May 2012
The continuous states are integrated to answer your question.

Sign in to comment.

Categories

Find more on Simulink in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!