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

10 ビュー (過去 30 日間)
adam honse
adam honse 2017 年 11 月 21 日
回答済み: mohammed Hanneef 2018 年 11 月 22 日
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 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 */
/* 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 件のコメント
adam honse
adam honse 2017 年 11 月 22 日
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*).



Mark McBroom
Mark McBroom 2017 年 11 月 27 日
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 件のコメント
adam honse
adam honse 2017 年 11 月 27 日
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.


その他の回答 (1 件)

mohammed Hanneef
mohammed Hanneef 2018 年 11 月 22 日
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!

Translated by