【问题标题】:Why does S-Function only execute mdlInitializeSizes() and does not execute mdlOutputs(), mdlStart() etc?为什么S-Function只执行mdlInitializeSizes(),不执行mdlOutputs()、mdlStart()等?
【发布时间】:2023-03-14 02:45:01
【问题描述】:

#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

【问题讨论】:

  • 当我运行我的 s-function(在 MATLAB 中或通过 simulink 图)时,我只看到“Initialize”和“End Initialize”输出。 s 函数从不执行其他 mdl* 函数。有谁知道为什么会这样?我还通过将 MATLAB 进程附加到 Visual Studio 并调试来验证了这一点 - 除了 mdlInitializeSizes 之外的每个函数中的断点都没有到达。
  • 您的问题与代码格式有关。您的评论也应该是问题本身的一部分。
  • 你尝试编译你的代码吗?在这种情况下,有时您应该查看 tlc 文件(如果存在的话)。可能有一些函数被遗漏了,因此它们不会被调用。

标签: matlab simulink s-function


【解决方案1】:

mdlStartmdlOutputs 是仅在特定情况下才调用的选项方法。例如,mdlOutputs 只有在定义了任何输出时才会被调用——在你的情况下没有。 (我有点惊讶mdlStart 没有被调用。)

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

【讨论】:

  • 感谢菲尔的回复。我删除了一些我为了发布而拥有的代码,但我的 mdlInitializeSizes() 为我的 s-function 定义了输出(我相信这就是你在说的)。我会查看文档,看看我是否发现任何突出的东西 - 当/如果我解决了这个问题时,我会回到这里。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多