#include "cg_sfun.h" /* Code generation registration function */
#endif
3.2 编译编译 S-Function
要将此 S-function 结合到Simulink 中,在MATLAB 命令行输入下面的命令
>> mex timestwo_sf.c
mex命令将timestwo_sf.c进行编译和链接。生成一个mex可执行文件(timestwo_sf.mexw32)供Simulink使用。
MEX从字面上是MATLAB EXecuteable两个单词的缩写。
.MEX文件是由C语言(或者Fortran语言)编写的源代码,经过MATLAB编译器处理而生成的二级制文件。它是可以
被MATLAB解释器自动装载并执行的动态链接程序,类似于Windows下的dll文件。MEX文件的后缀名按32位/64位分别为
.mexw32/.mexw64。
MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB要求配置接口组件和相关工具,二是要有C语言
或Fortran语言的编译器。
Matlab中的配置使用如下命令按照提示进行:
>> mex –setup
3.3 运行运行 S-Function
Mex文件生成之后,S-Function模块就可以正常运行。Example1_timestwo.slx仿真结果运行如下:
3.4 C MEX S-Function模板模板
创建C MEX S-Function有多种方法,最简单的方法是使用S-Function Builder自动生成S-function。但是这种方法只能生成
几种简单的S-function,例如它生成的S-function的输入或输出端口的信号宽度只能为1,而且不能处理除了double以外的其它
类型数据。
另一种方法是根据“C S-Function模板”来创建。Simulink 提供了实现一个C MEX S-function 的架构文件,这里称之为模
板。它是专门为用户编写的用于指导用户编写自己的S-function。该模板包含了实现回调函数的框架结构,并加以注释说
明用法。该模板文件名为sfuntmpl_basic.c,存放在MATLAB 根目录下的simulink/src 目录中,它适合于编写普通
用途的S-function 程序。另外一个模板包含了所有有效的程序(并有更详细的注释),存放在相同目录下,文件名
为sfuntmpl_doc.c.
4、、范例:有效值计算范例:有效值计算CBB的仿真实现的仿真实现
上一节中的范例(Example1_timestwo.slx)作为一个最小仿真系统介绍了构成C MEX S-Function的基本架构:
定义与包含定义与包含
回调函数的编写回调函数的编写
Simulink(或者(或者Real-time Workshop)接口)接口
本节,通过建立一个有效值计算CBB的仿真模型,来介绍如何利用s-function调用外部c代码,并且分步骤地从无到有
建立一个C MEX S-function,最后对其编译和仿真运行。
Step1:根据仿真需求,搭建仿真模型(如下图)。同时,确定:根据仿真需求,搭建仿真模型(如下图)。同时,确定s-function模块模块 IO端口的数量、数据类型、数据端口的数量、数据类型、数据
宽度等属性宽度等属性。
图4.1 有效值计算CBB仿真模型
Step2:确定:确定s-function的名字和类型的名字和类型;
在S函数源代码中配置S函数名字,如下:
#define S_FUNCTION_NAME rms_compute_sf
将S函数源代码的名字命名为:rms_compute_sf.c
同时在s函数模块对话框中输入对应的名字如下:
以上三处的名字必须完全一致。
确定s-function类型为level-2类型,如下:
评论0
最新资源