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

3 次查看(过去 30 天)
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

采纳的回答

Kaustubha Govind
Kaustubha Govind 2013-8-30
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 个评论
Kaustubha Govind
Kaustubha Govind 2013-9-16
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!

请先登录,再进行评论。

更多回答(1 个)

Priyanka
Priyanka 2013-9-11
Hello
Can any one help me with this one please.
Thank you
Priyanka

类别

Help CenterFile Exchange 中查找有关 General Applications 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by