Change/reset initial state values in a level 2 C-mex S-function
19 views (last 30 days)
Show older comments
Hi all! I'm creating a simulation with level 2 c-mex s-function, and I need to change some state values, when some conditions are verified. How can I do that? I read about the enabled subsystem, but I don't know how it works, and also I don't know if there is something faster that do the same thing.
Can you help me?
Thanks in advance!
0 Comments
Accepted Answer
Ryan G
on 24 Jul 2012
If you wrote or have the c-code for the s-function you can simply add another input and write a conditional to reset the data when that condition is verified.
1 Comment
Pan Zhao
on 22 Jun 2017
I was wondering whether this way really works. I tried this method and met the same problem Michael met (see the answer from Michael below and my comment under that) .
More Answers (3)
Michael Walker
on 16 May 2014
I have a similar problem, but the evaluation of the variable that triggers the reset is done inside the S-function itself. The problem I'm having is that I can't figure out how to actually reset a continuous state value. Although Simulink seems to let me change the value of variables I fetch with ssGetContStates(S), then next time those state values are needed (again invoking ssGetContStates(S)) they've reverted back to an integrated value of the original initial condition. How do I get this to work?
2 Comments
Pan Zhao
on 21 Jun 2017
I have the same problem. Although we can set the ContStates in a S function, they revert to the integrated value of the original initial condition one sampling interval after the setting. Was wondering how we can really reset the states.
Sebastián Gómez Jorge
on 2 Aug 2023
Same problem and there seems to be no solution. I tired reseting the cont states using the pointer provided by ssGetContStates, but it does not work. The recommended soulution of using an ensabled subsystem is no good, because I want to change the value of only one continuous state when a certain condition happens inside the sfunction. Very frustrating.
Kaustubha Govind
on 2 Aug 2012
You can either follow Ryan's suggestion or put your S-function inside an enabled subsystem with "Output when disabled" set to "reset" - this will call your mdlInitializeConditions method every time the subsystem is disabled.
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!