2017-02-28 65 views
-1

的#define S_FUNCTION_NAME myfunction_sFun爲什麼S函數只執行mdlInitializeSizes()並且不執行mdlOutputs(),mdlStart()等?

的#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」

空隙mdlInitializeSizes(SimStruct * S)

{

ssPrintf("Initialize\n"); 

    //My code has been removed from here 

ssPrintf("End Initialize\n"); 

}

空隙mdlInitializeSampleTimes(SimStruct * S)

{

ssPrintf("Sample Times\n"); 

}

的#define MDL_OUTPUTS

的#ifdef MDL_OUTPUTS

空隙mdlOutputs(SimStruct * S,int_T TID)

{

ssPrintf("Outputs\n"); 

}

#ENDIF

的#define MDL_START

的#ifdef MDL_START

空隙mdlStart(SimStruct * S)

{

ssPrintf("Start\n"); 

}

#ENDIF

空隙mdlTerminate(SimStruct * S){}

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

  • 必需的S-功能拖車*

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

的#ifdef MATLAB_MEX_FILE/*這是文件被編譯爲MEX文件? */

的#include 「simulink.c」/ * MEX-文件接口機制*/

的#else

的#include 「cg_sfun.h」/ *代碼生成登記功能*/

#endif

+0

當我運行我的s函數(無論是在MATLAB中還是通過simulink圖)時,我只能看到「初始化」和「結束初始化」輸出。 S函數從不執行其他mdl *函數。有誰知道這可能是爲什麼?我還通過將MATLAB過程附加到Visual Studio和調試來驗證這一點 - 每個函數中除mdlInitializeSizes之外的斷點都未到達。 –

+0

您的問題與代碼格式有問題。你的評論也應該是問題本身的一部分。 – sm4

回答

1

mdlStartmdlOutputs是隻在某些情況下才被調用的選項方法。例如,如果定義了任何輸出,則僅調用mdlOutputs - 在您的情況下沒有定義輸出。 (我有點驚訝mdlStart沒有被調用。)

請參閱文檔Simulink Engine Interaction with C S-Functions哪些方法是可選的,以及它們的調用順序。

+0

感謝您的答覆菲爾。我刪除了一些我已經發布的代碼,但是我的mdlInitializeSizes()爲我的s函數定義了輸出(我相信這就是你正在談論的)。我會查看文檔,看看是否找到突出的東西 - 當我解決此問題時會回到這裏。 –