Borrar filtros
Borrar filtros

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

3 visualizaciones (últimos 30 días)
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

Respuesta aceptada

Kaustubha Govind
Kaustubha Govind el 30 de Ag. de 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 comentarios
Kaustubha Govind
Kaustubha Govind el 16 de Sept. de 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!

Iniciar sesión para comentar.

Más respuestas (1)

Priyanka
Priyanka el 11 de Sept. de 2013
Hello
Can any one help me with this one please.
Thank you
Priyanka

Categorías

Más información sobre General Applications en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by