没有合适的资源?快使用搜索试试~ 我知道了~
首页matlab如何封装模块
matlab如何封装模块

matlab如何封装模块,子系统,MATLAB二次开发,GUI变成,仿真
资源详情
资源评论
资源推荐

Simulink 模块制作过程大体可以分为两步:s 函数的编写和模块封装。
S 函数(system funcon)是模块的核心,是完成功能实现的关键。S 函数的
编写可以使用多种程序语言,其中 M 语言是最常用的,同时也是最简单的。在
运用 M 语言进行 s 函数编写的时候,可以调用 MATLAB 提供的函数,简化了开
发过程。但是如果要与其他进程通讯或驱动外部硬件接口,则要调用 API 函数,
这样就需要用 C 语言来开发 S 函数。较 M 语言的开发,C 语言开发 S 函数更具
有灵活性,但是相对复杂一些。
下面讲解 C 语言 S 函数的开发方法:
C 语言写 S 函数,顾名思义,运用 C 语言语法,依照 S 函数格式要求,最后
在 MATLAB 中 MEX 命令编译,编译成功既得函数。
S 函数格式可简单看成:初始化、采样时间设定、系统输出、结束四个部分。
对应的函数分别为
mdlInializeSizes()、mdlInializeSampleTimes()、mdlOutputs()、mdlTerminate()。
这四个函数是一个 S 函数必不可少的,缺少任何一个在编译的时候都无法通过,
输出信息会提示哪个函数没有写。
一个最基本的 C 语言 S 函数模版如下:
#de$ne S_FUNCTION_NAME name
#de$ne S_FUNCTION_LEVEL 2
#include“simstruc.h”
Stac void mdlInializeSizes(SimStruct *S){}
Stac void mdlInializeSampleTimes(SimStruct *S){}
Stac void mdlOutputs(SimStruct *S,int_T d){}
Stac void mdlTerminate(SimStruct *S){}
#ifdef MATLAB_MEX_FILE
#include“Simulink.c”
#else
#include“cg_sfun.h”
#endif
S 函数的运行依托于 Simulink,Simulink 的运行是采用循环方式,计算各采
样时间点的系统状态得到的,由此可理解 S 函数,在初始化之后,S 函数也通过
循环完成输出状态计算。
结合上述格式,首先自定义 S 函数名称,然后定义 S 函数级别,这里写
2,1 级是老版本 Simulink 使用的,现已经不是用,之所以保留 1 级是为了兼容
原有的老程序,现在写的 S 函数都是 2 级的。接下来将需要的头文件包含进来,
这里必须包含 simstruc.h 文件,这里的 SimStruc 是 Simulink 提供的数据结构,S
函数中的输入输出等信息都包含在这个结构体中,同时,在编写 S 函数的时候
也要把使用到的 C 语言库中的头文件包含进来,所有的 C 语言库文件在这里都
可以使用。接下来即可按照格式顺序编写代码。最后要注意,如果用于仿真则
添加 Simulink.c 文件,如果用于 RTW 代码生成,则添加 cg_sfun.h 头文件。这里
的 RTW 代码生成是指非内嵌的 S 函数,如果要做一个内嵌的 S 函数则需要在 S
函数中添加 mdlRTW()函数,并额外编写 TLC 文件。其中,TLC 文件用于优化的 C
代码生成,mdlRTW()函数则把模块参数传递到生成的代码当中。具体 TLC 文件
的编写方法这里不再赘述。















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1