为什么S-Function只执行mdlInitializeSizes()并且不执行mdlOutputs(),mdlStart()等?

时间:2017-02-28 22:20:48

标签: matlab simulink s-function

#define S_FUNCTION_NAME myfunction_sFun

#define S_FUNCTION_LEVEL 2

#define MDL_INITIAL_SIZES

#define MDL_INITIALIZE_SAMPLE_TIMES

#include“tmwtypes.h”

#include“simstruc_types.h”

#include“mex.h”

#include“simstruc.h”

void mdlInitializeSizes(SimStruct * S)

{

ssPrintf("Initialize\n");

  //My code has been removed from here

ssPrintf("End Initialize\n");

}

void mdlInitializeSampleTimes(SimStruct * S)

{

ssPrintf("Sample Times\n");

}

#define MDL_OUTPUTS

#ifdef MDL_OUTPUTS

void mdlOutputs(SimStruct * S,int_T tid)

{

ssPrintf("Outputs\n");

}

#ENDIF

#define MDL_START

#ifdef MDL_START

void mdlStart(SimStruct * S)

{

ssPrintf("Start\n");

}

#ENDIF

void mdlTerminate(SimStruct * S){}

/ =============================

  • 必需的S-function预告片*

    ============================= /

#ifdef MATLAB_MEX_FILE / *此文件是否编译为MEX文件? * /

#include“simulink.c”/ * MEX文件接口机制* /

的#else

#include“cg_sfun.h”/ *代码生成注册功能* /

#ENDIF

1 个答案:

答案 0 :(得分:1)

mdlStartmdlOutputs是只在某些情况下才会被调用的选项方法。例如,mdlOutputs只有在定义了任何输出时才会被调用 - 在您的情况下没有。 (我对mdlStart没有被调用感到有些惊讶。)

请参阅文档Simulink Engine Interaction with C S-Functions,了解哪些方法是可选的,以及它们的调用顺序。