I have an s-function implemented in c where I wish to specify the initial output of certain ports to non-zero values. I have been using the mdlInitializeConditions function to inititalize the output. However, when generating the code with the rsim.tlc target, I notice in the MdlInitialize() function, my s-function mdlInitializeConditions is called first and then the output ports are initialized to zero. Is there a way to specify that I have already initialized my s-function outputs and I don't need Simulink to do it for me?
The way I have gotten around this is by specifying the configuration parameter "UnderspecifiedInitializationDetection" to classic mode instead of simplified mode. I would really like to use the newer simplified mode.
To set your output to an initial value at t=0, you can create a work vector that has an initial value, say 1 (ssSetIWorkValue(S, 0, 1)).
Then in 'mdlOutputs' you can use an if condition (if(ssGetIWorkValue(S, 0) == 1)) to set the initial value of the output to the desired value.
Finally, you can change the value of the work vector in 'mdlUpdate' in such a way that the condition in 'mdlOutput' is not met. This ensures that the initial value is set only once.
You can try to follow the steps given in the link provided below: