C语言编辑s函数,C语言编写S函数方法C语言编写S函数方法.pdf

C语言编写S函数方法C语言编写S函数方法

S 函数(system function)是模块的核心,是完成功能实现的关键。S 函数的

编写可以使用多种程序语言,其中 M 语言是最常用的,同时也是最简单的。在

运用 M 语言进行 s 函数编写的时候,可以调用 MATLAB 提供的函数,简化了开

发过程。但是如果要与其他进程通讯或驱动外部硬件接口,则要调用 API 函数,

这样就需要用 C 语言来开发 S 函数。较 M 语言的开发,C 语言开发 S 函数更具有

灵活性,但是相对复杂一些。

C 语言写 S 函数,顾名思义,运用 C 语言语法,依照 S 函数格式要求,最后

在 MATLAB 中 MEX 命令编译,编译成功既得函数。

S 函数格式可简单看成:初始化、采样时间设定、系统输出、结束四个部分。

对应的函数分别为 mdlInitializeSizes()、mdlInitializeSampleTimes()、mdlOutputs()、

mdlTerminate()。这四个函数是一个 S 函数必不可少的,缺少任何一个在编译的

时候都无法通过,输出信息会提示哪个函数没有写。

一个最基本的 C 语言 S 函数模版如下:

#define S_FUNCTION_NAME name

#define S_FUNCTION_LEVEL 2

#include “simstruc.h”

Static void mdlInitializeSizes(SimStruct *S){}

Static void mdlInitializeSampleTimes(SimStruct *S){}

Static void mdlOutputs(SimStruct *S,int_T tid){}

Static 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 文件的编写方法这

里不再赘述。

除了上述必需的函数外,系统提供了其他可选用的函数,功能各异,例如

mdlStart()等。

只要理解了 Simulink 运行方式就可以理解文件的开发过程了,其中,系统函数和

特定的变量类型都可以在 SimS

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值