Clear Filters
Clear Filters

Specifying the number of Output ports based on the input port values in the simulink S-function

3 views (last 30 days)
Hello
Is there any way to specify the number of output ports based on the input port values in Simulink. I tried something as below.
static void mdlInitializeSizes(SimStruct *S) {
ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);
if (!ssSetNumInputPorts(S, 1))
return; /*Setting the number of input ports*/
/* configure input on first port*/
ssSetInputPortWidth( S, 0, 1 );
ssSetInputPortDataType( S, 0, SS_INT8 );
ssSetInputPortRequiredContiguous(S, 0, true);
ssSetInputPortDirectFeedThrough(S, 0, 1);
int n , i =0;
int *number = ( int *)ssGetInputPortSignal( S, 0 );
int num = ( int ) *number;
if(num==45)
n = 1;
else
n =0;
/* configure output ports*/
if ( !ssSetNumOutputPorts( S, n ) )
return;
}
When I try to mex the above file, it compiles but then when I try to implement in the Simulink then the MATLAB crashes(an error report is generated and I need to close it). Can any one please help me with this.
Thank you
Priyanka

Accepted Answer

Kaustubha Govind
Kaustubha Govind on 30 Aug 2013
I think the file crashes because the input signal data is not available in mdlInitializeSizes, since this method is called very early during model initialization, before the model even starts executing. You can the documentation here to see what sequence each of the S-function methods is called in.
In any case, it is not possible to change the number of outputs of a block based on an input signal. You may however change the number based on a non-tunable parameter (whose value is available before simulation starts). Perhaps you can explain more about why you want to change the number of outputs during simulation? You cannot change the structure of the model during simulation, so you cannot connect the new outputs to any blocks at any rate.
  5 Comments
Kaustubha Govind
Kaustubha Govind on 16 Sep 2013
Perhaps you can always register the maximum number of outputs possible for your block, and for each output have another output indicate whether there is a valid output available at that port? I know it's not an elegant solution, but I can't think of anything else. Sorry!

Sign in to comment.

More Answers (1)

Priyanka
Priyanka on 11 Sep 2013
Hello
Can any one help me with this one please.
Thank you
Priyanka

Categories

Find more on General Applications 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!