第十一章 C语言编写S函数方法.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 运行方式就可以理解文件的开发过程了,其中,系统函数和 特定的变量类型都可以在SimStruct 数据结构中找到。至此,基本的S 函数都可 以编写了。 在编写结束后,将S 函数源文件存储在MATLAB 路径下,打开MATLAB 命令 行窗口,选择当前路径为存储路径,运用MEX 命令编译C 源文件,如果成功则 在当前路径下生成一个后缀名为 mexw32 的文件(后缀名随系统环境不同而不 同,32 指32 位系统,如果是64 位系统则不同),如果使用的是 MATLAB 早期 版本,则生成的文件后缀名为dll,即动态链接库。两者等价,这里可以用dll 来 理解mexw32 文件的作用。 当S 函数编译写好之后,还不能在Simulink 中直接调用,因为缺少一个可视 化的模块。这时候打开 S

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档