如何把S函数转化成C语⾔形式,通过S-Function集成C代码进⾏
仿真.pdf
通过S-Function 集成C 代码进⾏仿真
by :吴少风
1. 概述
S-Function 是Simulink 提供的⼀个模块。利⽤S-Function 可以整合⽤ 代码,在Simulink
下进⾏仿真以及⽣成代码。⽤户代码可以⽤ MATLAB 、C/C++、Fortran 编写,但嵌⼊式软
件⼏乎都⽤C 语⾔编写,因此本⽂仅介绍⽤C 语⾔实现S-Function 模块。
Simulink 为S-Function 模块实现了主⼲⾻架和分配数据结构,通过回调⽅式 (Callback
Method )留下⽤户编程接⼝ (API )。S-Function 的使⽤,就是按⾃⼰的需要填写指定的回调
函数。然后通过mex 命令编译成动态链接⽂件,在 S-Function 模块中填⼊名称和参数,就
可进⾏仿真了。
⽤户可以⽤S-Function 实现如下应⽤:
创建⼀个全新的通⽤模块;
添加硬件设备的驱动模块;
集成已有C 代码进⾏仿真;
实现⽤数学公式描述的系统;
使⽤图形动画 (MATLAB 提供⼀个单摆⽰例penddemo )。
2. S-Function 模块的实现机理
S-Function 模块作为⼀个对象,具有⾃⼰的属性和动作,也就是定义了⾃⼰的数据和实
现了⾃⼰的处理流程,但是具体细节由⽤户按需要指定。S-Function 就像出租车,⽤户就像
乘客,乘客告诉出租车需要去哪⾥,出租车就会载你到⽬的地。
2.1. 数据结构
每个S-Function 模块都有⼀个⾃⼰的SimStruct 数据结构,该数据结构存储输⼊输出端
⼝、状态变量、参数等,通过传⼊该结构指针参数,供回调函数使⽤。头⽂件simstruc.h 中
定义了SimStruct 数据结构,以及访问该结构的宏函数。
2.2. 处理流程
处理流程如图 1、图 2 所⽰。图中显⽰了所有回调函数的调⽤顺序,以及函数名称。
必须实现有:mdlInitializeSizes 、mdlInitializeSampleTimes、mdlOutputs 、mdlTerminate 四个
回调函数。
图 1 Model Initialization
图 2 Simulation Loop
3. 使⽤⽅法
⽤ C 代码完成 S-Function 模块共有三种途径:⼀,通过模板,⼿⼯填写回调函数源⽂
件,再编译⽣成可执⾏⽂件;⼆,通过S-Function Buider 模块,在图形界⾯上配置参数后点Build ⽣成C 源代码⽂件和动态可执⾏⽂件;三,通过Legacy Code Tool,⽤命令⾏配置参数和⽣成⽂件。这三种⽅法各有优缺点:⼿写⽅式需要对S-Function ⾮常熟悉,⽐较⿇烦,但是实现最全⾯,限制最少;图形界⾯简化了对S-Function 的实现,但限制更多;命令⾏⽅式实现最⽅便,但限制最多。⽤图形界⾯和命令⾏实现简单的S-Function 模块⽐较⽅便。3.1. ⼿⼯填写⽅式
⾸先介绍最全⾯的⼿⼯⽅式,这样可以对S-Function 有进⼀步的认识。下⾯给出⼀个例
⼦,将该段内容保存为timestwo.c ⽂件。
#define S_FUNCTION_NAME timestwo自定义函数怎么用c语言
#define S_FUNCTION_LEVEL 2
#include "simstruc.h"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论