Simulink®
基 于 模 型 与 基 于 系 统 的 设 计
n 建模
n 仿真
n 实现
S-Function 的编写
Version 5
目录
S-FUNCTION 概述 .................................................................................................................................... 1
什么是 S-FUNCTION................................................................................................................................ 2
在模型中使用 S-FUNCTION.................................................................................................................... 3
向 S-Function 传递参数..................................................................................................................... 3
何时使用 S-Function.......................................................................................................................... 4
S-FUNCTION 的工作原理........................................................................................................................ 5
Simulink 块的数学关系...................................................................................................................... 5
仿真过程.............................................................................................................................................. 5
S-Function 回调程序.......................................................................................................................... 6
S-FUNCTION 的实现................................................................................................................................ 8
M-文件的 S-Function......................................................................................................................... 8
MEX 文件的 S-function ..................................................................................................................... 8
MEX 文件与 M-文件的 S-function 比较........................................................................................... 9
S-FUNCTION 的概念.............................................................................................................................. 10
直接馈通............................................................................................................................................ 10
动态维矩阵........................................................................................................................................ 10
设置采样时间和偏移量.....................................................................................................................11
S-FUNCTION 范例.................................................................................................................................. 14
M 文件 S-function 范例.................................................................................................................... 15
C S-Function 范例............................................................................................................................ 16
Fortran S-Function 范例.................................................................................................................. 18
C++ S-Function 范例....................................................................................................................... 18
Ada S-Function 范例 ....................................................................................................................... 18
编写 M S-FUNCTION.............................................................................................................................. 19
概述........................................................................................................................................................ 20
S-Function 参数................................................................................................................................ 20
S-Function 的输出............................................................................................................................ 20
定义 S-FUNCTION 块特性..................................................................................................................... 22
处理 S-FUNCTION 参数......................................................................................................................... 22
M 文件的 S-FUNCTION 范例................................................................................................................. 23
范例 1——简单的 M 文件 S-Function ........................................................................................... 23
范例 2——连续状态 S-Function .................................................................................................... 25
范例 3——离散状态 S-Function .................................................................................................... 27
范例 4——混合系统 S-Function .................................................................................................... 28
范例 5——变步长 S-Function ........................................................................................................ 31
i
使用 C 语言编写 S-FUNCTION ............................................................................................................. 33
概述........................................................................................................................................................ 34
创建 C MEX S-Function.................................................................................................................. 35
自动生成 S-FUNCTION.......................................................................................................................... 36
配置生成的 S-Function.................................................................................................................... 37
S-Function Builder 如何生成 S-Function...................................................................................... 37
设置 include 路径 ............................................................................................................................. 37
S-FUNCTION BUILDER 的对话窗........................................................................................................... 39
Initialization 选卡.............................................................................................................................. 39
Data Properties 选卡 ....................................................................................................................... 40
Libraries 选卡.................................................................................................................................... 42
Outputs 选卡..................................................................................................................................... 43
Continuous Derivatives 选卡.......................................................................................................... 45
Discrete Update 选卡 ...................................................................................................................... 46
Build Info 选卡 .................................................................................................................................. 47
一个基本的 C MEX S-FUNCTION 范例 ............................................................................................... 48
定义与包含........................................................................................................................................ 49
回调函数的实现................................................................................................................................ 50
Simulink/Real-Time Workshop 接口 ............................................................................................. 51
Building Timestwo 范例................................................................................................................... 51
C S-FUNCTION 模板.............................................................................................................................. 52
S-Function 源文件必需的内容........................................................................................................ 52
SimStruct........................................................................................................................................... 53
编译 C S-Function............................................................................................................................ 53
SIMULINK 如何与 C S-FUNCTION 相互作用 ........................................................................................ 54
进程层面............................................................................................................................................ 54
数据层面............................................................................................................................................ 56
编写回调函数........................................................................................................................................ 59
将 LEVEL 1 C MEX S-FUNCTION 转换到 LEVEL 2 .............................................................................. 60
创建 C++ S-FUNCTION.......................................................................................................................... 63
创建 ADA S-FUNCTION......................................................................................................................... 64
创建 FORTRAN S-FUNCTION.............................................................................................................. 65
实现块特性................................................................................................................................................ 67
对话框参数............................................................................................................................................ 68
ii
可调参数............................................................................................................................................ 68
运行参数................................................................................................................................................ 70
创建运行参数.................................................................................................................................... 70
更新运行参数.................................................................................................................................... 71
创建输入和输出端口............................................................................................................................ 72
创建输入端口.................................................................................................................................... 72
创建输出端口.................................................................................................................................... 73
输入的标量扩展................................................................................................................................ 74
掩码多端口 S-Function.................................................................................................................... 75
自定义数据类型.................................................................................................................................... 76
采样时间................................................................................................................................................ 77
基于块的采样时间............................................................................................................................ 77
指定基于端口的采样时间................................................................................................................ 79
基于块与基于端口的混合采样时间 ................................................................................................ 81
多速率 S-Function 块....................................................................................................................... 82
多速率 S-Function 块的同步........................................................................................................... 83
工作向量................................................................................................................................................ 84
工作向量与过零检测........................................................................................................................ 85
包括指针工作向量的范例................................................................................................................ 85
内存分配............................................................................................................................................ 86
FUNCTION-CALL 子系统........................................................................................................................ 87
错误处理................................................................................................................................................ 89
防超程代码........................................................................................................................................ 89
SsSetErrorStatus 的终止条件 ........................................................................................................ 90
数组边界检查.................................................................................................................................... 90
S-FUNCTION 范例.................................................................................................................................. 91
连续状态的 S-Function 范例........................................................................................................... 92
离散状态的 S-Function 范例........................................................................................................... 93
混合系统的 S-Function 范例........................................................................................................... 93
变步长的 S-Function 范例............................................................................................................... 94
过零检测的 S-Function 范例........................................................................................................... 94
时变连续传递函数的 S-Function 范例........................................................................................... 94
iii
第一章
S-Function 概述
S-Function(系统函数)为扩展 Simulink®的性能提供了一个有力的工具。以下下节阐述了什么是
S-Function,为什么可以使用 S-Function,以及怎样编写自己的 S-Function。
1
Simulink——S-Function 的编写
什么是 S-Function
S-Function 可以使用 MATLAB®,C,C++,Ada,或 Fortran 语言来编写。使用 MEX 实用工具,
将 C,C++,Ada,和 Fortran 语言的 S-Function 编译成 MEX-文件,在需要的时候,它们可与其它的
MEX-文件一起动态地连接到 MATLAB 中。
S-Function 使用一种特殊的调用格式让你可以与 Simulink 方程求解器相互作用,这与发生在求解
器和内置 Simulink 块之间的相互作用非常相似。S-Function 的形式是非常通用的,且适用于连续、离
散和混合系统。
S-function 为你提供了一种在 Simulink 模型中增加自制块的手段,你可以使用MATLAB,C,C++,
Ada,或 Fortran 语言来创建自己的块。按照下面一套简单的规则,你可以在 S-function 中实现自己的
算法。在你编写一个 S-Functin 函数,并将函数名放置在一个 S-Functin 块中(在用户定义的函数块库
中有效)之后,通过使用 masking 定制用户界面。
你可以与 Real-Time Workshop®(RTW)一起使用 S-function,也可通过编写目标语言编译器(TLC)
文件来定制由 RTW 生成的代码。参看第八章“对于Real-Time Workshop 编写 S-Function”和 Real-Time
Workshop 文档资料以获取更多信息。
2