Simulink S-Function深度指南:编写与实现

需积分: 10 19 下载量 59 浏览量 更新于2024-07-24 1 收藏 2.98MB PDF 举报
"Simulink s_function教程涵盖了从基础到高级的S-Function编写和实现,包括S-Function的工作原理、不同类型的S-Function实现、参数处理以及使用C语言创建S-Function的方法。" Simulink是MATLAB环境中用于基于模型和系统设计的工具,它支持建模、仿真和实现过程。S-Function是Simulink中的一种关键组件,允许用户自定义Simulink块的行为,以满足特定的系统需求。 **S-Function概述** S-Function(System Function)是用户定义的模块,可以在Simulink模型中使用,以扩展Simulink库的默认功能。它们可以用来模拟复杂的物理系统,实现定制的算法,或者与外部代码(如C、C++或Fortran)进行接口。 **在模型中使用S-Function** S-Function可以在Simulink模型中作为独立的块使用,向其传递参数,并根据需要接收输入和产生输出。这使得用户能够灵活地控制模型的行为。 **S-Function工作原理** Simulink块通常基于数学关系进行运算,而S-Function则通过回调程序来实现这些关系。回调程序是在仿真过程中特定时间点调用的MATLAB函数,如初始化、时间步更新和输出计算等。 **S-Function的实现** S-Functions有两种主要实现方式:M-文件和MEX文件。M-文件S-Function直接使用MATLAB代码编写,易于理解和调试,但可能较慢。MEX文件S-Function由编译后的C、C++或Fortran代码组成,执行效率高但编写和调试更复杂。 **S-Function概念** - **直接馈通**:S-Function可以直接将输入传递到输出,无需内部计算。 - **动态维矩阵**:S-Function可以处理大小可变的矩阵,适应系统变量的变化。 - **设置采样时间和偏移量**:用户可以自定义S-Function的采样时间,以适应不同类型的系统。 **S-Function范例** 教程中提供了多种语言的S-Function范例,包括M文件、C、C++、Fortran和Ada,帮助用户理解各种实现方式。 **编写M-File S-Function** M-File S-Function涉及定义参数、输出和块特性,以及处理S-Function参数。教程中包含多个M-File S-Function的实例,从简单到复杂的系统,包括连续状态、离散状态、混合系统和变步长系统。 **使用C语言编写S-Function** C语言的CMEX S-Function提供更高的性能。通过S-Function Builder,用户可以自动生成S-Function代码,并配置其属性,如设置include路径、数据属性、库依赖等。教程详细解释了这一过程,包括各个配置选项的含义和用途。 s_function教程是Simulink用户深入理解和利用S-Function进行系统建模和仿真的宝贵资源,无论你是初学者还是经验丰富的用户,都能从中受益。通过学习和实践,你可以更好地控制Simulink模型的运行行为,实现更加精确和高效的系统仿真。
2019-07-09 上传
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 定制用户界面。 目录 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 ii 使用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 iii 可调参数....... 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