Filter löschen
Filter löschen

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

3 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Kaustubha Govind
Kaustubha Govind am 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 Kommentare
Kaustubha Govind
Kaustubha Govind am 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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

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

Kategorien

Mehr zu General Applications finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by