Change/reset initial state values in a level 2 C-mex S-function
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marcus
el 21 de Jul. de 2012
Comentada: Sebastián Gómez Jorge
el 2 de Ag. de 2023
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 comentarios
Respuesta aceptada
Ryan G
el 24 de Jul. de 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 comentario
Pan Zhao
el 22 de Jun. de 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) .
Más respuestas (3)
Michael Walker
el 16 de Mayo de 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 comentarios
Pan Zhao
el 21 de Jun. de 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
el 2 de Ag. de 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
el 2 de Ag. de 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 comentarios
Ver también
Categorías
Más información sobre Simulink Functions en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!