文档详情

matlab中的sfunction的用法(C语言).pdf

发布:2017-05-24约7.25千字共7页下载文档
文本预览下载声明
matlab 中的sfunction 的用法(C 语言) 已有 1148 次阅读 2010-7-9 11:38 |个人分类:学习笔记 |系统分类:科研笔记 | 关键词:matlab,sfunction,C 创建一个有 1 输入(2 维),2 输出(1 维),3个参数,还有全局变量的 s-function。 1.新建sfunction 的 C 语言文件 打开 simulink,点击User-Defined Functions里面的 S-Function Examples。这个里面有多个语言版本的模板,有C,C++,Ada, Fortran和M语言的版本,其实都大同小异,只要了解几个函数就很容易使用了。 选择C语言的版本:从S-function模块中选择C-file S-functions里面的 Basic C-MEX template。打开后,另存为自己的模块名字,如test.c。 下面我们来分析代码: #define S_FUNCTION_NAME test//这里把文件名sfuntmpl_basic修改为 test #define S_FUNCTION_LEVEL 2 #include simstruc.h //程序里面要用到的头文件在这里引用,如“math.h”等。 float global_var; //定义全局变量 static void mdlInitializeSizes(SimStruct *S) { //这个函数用来设置输入、输出和参数的。 ssSetNumSFcnParams(S, 3); /*设置参数个数,这里为3 */ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; } ssSetNumContStates(S, 0);//设置连续状态的个数,缺省为0; ssSetNumDiscStates(S, 0);//设置离散状态的个数,缺省为0; if (!ssSetNumInputPorts(S, 1)) return;//设置输入变量的个 数,这里为1 ssSetInputPortWidth(S, 0, 2); //设置输入变量0的维数为2 ssSetInputPortRequiredContiguous(S, 0, true); //设置input0的访问 方式,true就是临近访问,这样指针的增量后就可以直接访问下个input端口 了。 ssSetInputPortDirectFeedThrough(S, 0, 1);// 设置输入端口的信号是否 mdlOutputs函数中使用,这儿设置为true。 if (!ssSetNumOutputPorts(S, 2)) return;//设置输出变量的个 数 ssSetOutputPortWidth(S, 0, 1);//设置输出变量0的维数为1维 ssSetOutputPortWidth(S, 1, 1);//设置输出变量1的维数为1维 ssSetNumSampleTimes(S, 1); //设置采样时间,此处为1s。 ssSetNumRWork(S, 0);//不管 ssSetNumIWork(S, 0); ssSetNumPWork(S, 0); ssSetNumModes(S, 0); ssSetNumNonsampledZCs(S, 0); ssSetOptions(S, 0); //下面可以写全局变量的初始化程序 global_var=1; } static void mdlInitializeSampleTimes(SimStruct *S)//暂时不管 { ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME); ssSetOffsetTime(S, 0, 0.0); } #define MDL_INITIALIZE_CONDITIONS /* Change t
显示全部
相似文档