MATLAB Answers

Level 2 C++ S-function not showing multiple input output ports

16 views (last 30 days)
Hello, I have a C++ Level 2 Sfunction that is compiling via Mex but when i bring it into simulink, it shows only one input port, and one output port. Not sure what i need to do here. Am i missing something?
#ifdef __cplusplus
extern "C" { // use the C fcn-call standard for all functions
#endif // defined within this scope
#define S_FUNCTION_LEVEL 2
...
#define NParam 207 // Total number of paramters
#define NInputs 205 // Number of input ports
#define NOutputs 52 // Total Number of output ports
... (some omitted #defines)
#include "simstruc.h"
... (some omitted #includes)
static void mdlInitializeSizes(SimStruct *S)
{
/* Number of expected parameters */
ssSetNumSFcnParams(S, NParam);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
/* Return if number of expected != number of actual parameters */
return;
}
/* Setup for input ports */
if (!ssSetNumInputPorts(S, NInputs)) return;
for (int i=0; i<NInputs; i++){ /* loop stuff ommited /*}
/* Setup for output ports */
if (!ssSetNumOutputPorts(S, NOutputs)) return;
for (int j=0; j<NOutputs; j++){ /* loop stuff ommited /*}
/* No continuous and discrete states */
ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);
ssSetNumSampleTimes(S, NSampleTimes);
ssSetNumRWork(S, NUMRWORK);
ssSetNumIWork(S, NUMIWORK);
ssSetNumPWork(S, NUMPWORK);
ssSetNumModes(S, NUMMODES);
ssSetNumNonsampledZCs(S, 0);
ssSetOptions(S, 0);
}
... (some other functions)
  1 Comment
adam honse
adam honse on 22 Nov 2017
An update, i deleted the simulink block and re-added the s-func, and now everytime i click ok or apply, after specifying the s-func, matlab totally crashes (*poof*).

Sign in to comment.

Accepted Answer

Mark McBroom
Mark McBroom on 27 Nov 2017
code looks OK. In your Simulink S-Function block, did you create a mask with 207 parameters and pass all 207 parameters in the "S-function parameters:" field?
  1 Comment
adam honse
adam honse on 27 Nov 2017
It finally updated after i added a missing file for a dll i was including in the s-func. It looks like it was killing the whole thing when it couldn't load the dll.

Sign in to comment.

More Answers (1)

mohammed Hanneef
mohammed Hanneef on 22 Nov 2018
I had similar problem but then realized one of the reason for this is the Sfunction file name provided in the S-function Name shall be written without an extension such as "mysfunction.c shall be written as mysfunction". when i did this it worked for me.
check it out

Community Treasure Hunt

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

Start Hunting!