S-Function: Inital Value as Output

2 Ansichten (letzte 30 Tage)
Christoph
Christoph am 24 Mär. 2013
Hi at all,
I got a littel problem while using S-Function, written in C. At the beginning of the simualtion I compute some initial values. I want to pass out one of them on an output port during the mdlOutput Routine. For that reason I use the
ssGetSimStatus
function an compare the result with the following expression:
SIMSTATUS_INITIALIZING
As the result the output port is Zero for all time, which is actually not the expected one. Changing the expression to
SIMSTAUTS_RUNNING
leads to the correct behavior, even during the initializing. (I figured this out with the help of fprintf function).
Does anybody know a way to set an output port to a specified value once at the initializing?
To help you understand my current implementation and problem, I post a snippet of my code, placed in the mdlOutput function:
// Set Schedule Value of the Rolling Force
ssGetSimStatus(S, &SimStatus);
if (SimStatus == SIMSTATUS_INITIALIZING)
{ Output[0] = DWorkVec[0];
#ifdef __EchoMode__
fprintf(LogFile, "\tSet Schedule Value of the Rolling Force\n");
#endif
}
Thanks in advance, CN

Akzeptierte Antwort

Kaustubha Govind
Kaustubha Govind am 27 Mär. 2013
mdlOutputs is indeed executed only during model execution, so ssGetSimStatus should always return SIMSTATUS_RUNNING. I think the status is SIMSTATUS_INITIALIZING in mdlInitializeConditions, so you need to initialize your DWork vector there and then use the DWork vector value in mdlOutputs.

Weitere Antworten (1)

Christoph
Christoph am 28 Mär. 2013
Thanks for your support Kaustubha,
I initailized my DWorkVector the right way in the mdlInitializeConditions function. I only want to reuse this vector to keep the number of DWork vectors snall. But if there is no other way I have to use another DWork vector or a vector with more dimensions.

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by