Matlab/Simulink:最小空模板 S-function
你可以将这个最小的空 S-function 用作开始编写自己 S-function 的模板。
此最小示例还包含一个 mdlStart() 模板。
记住,如果重命名文件,还需要相应地更新 S_FUNCTION_NAME #define。
nothing_sfunction.cpp
#define S_FUNCTION_NAME nothing_sfunction
#define S_FUNCTION_LEVEL 2
#include "simstruc.h"
// Function: mdlInitializeSizes ===============================================
// Abstract:
// 设置各种向量的大小。
static void mdlInitializeSizes(SimStruct *S)
{
// 在此处添加 ssSetNumInputPorts() 等
}
#define MDL_START
static void mdlStart(SimStruct *S)
{
// 可选地,在此处执行初始化任务
// 如果不需要,可以完全删除此函数和 #define MDL_START。
}
// Function: mdlInitializeSampleTimes =========================================
// Abstract:
// 初始化采样时间为 1ms (1kHz)
static void mdlInitializeSampleTimes(SimStruct *S)
{
// 有关此处添加内容的示例,参见 https://techoverflow.net/2024/10/20/matlab-level-2-s-function-example-sine-wave-continous-output/
}
// Function: mdlOutputs =======================================================
// Abstract:
// 基于仿真时间计算正弦波输出。
static void mdlOutputs(SimStruct *S, int_T tid)
{
// 有关此处添加内容的示例,参见 https://techoverflow.net/2024/10/20/matlab-level-2-s-function-example-sine-wave-continous-output/
}
// Function: mdlTerminate =====================================================
// Abstract:
// 此函数在仿真结束时调用,用于清理。
static void mdlTerminate(SimStruct *S)
{
// 本示例无需清理
}
// 必需的 S-function trailer
#ifdef MATLAB_MEX_FILE
#include "simulink.c" // MEX-file interface mechanism
#else
#include "cg_sfun.h" // Code generation interface
#endif编译命令:
build_nothing_sfunction.sh
mex -g nothing_sfunction.cpp CXXFLAGS="-std=gnu++17 -fPIC"建议使用 -std=gnu++17 或更新版本,但不是必需的。
Check out similar posts by category:
MATLAB/Simulink, C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow