如何把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

#define S_FUNCTION_LEVEL 2

#include "simstruc.h"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值