S-Function Builder用法及使用实例

本文详细介绍Simulink中的S-Function构建器,包括如何指定S-Function属性、生成和构建S-Function,以及如何使用S-FunctionBuilder对话框的各种窗格来定义S-Function的端口、参数和回调方法。

函数生成器对话框S-Function Builder Dialog Box

关于S-Function

S-Function Builder dialog box允许您指定要由S-Function Builder块构建的S-Function的属性。要显示对话框,双击S-Function Builder块图标或选择块,然后从模型编辑器的编辑菜单或块的上下文菜单中选择Open Block
YxlDpT.png
对话框包含一些控件,允许您输入S-Function构建器块所需的信息,以便根据您的规范构建S-Function。控件被分组到窗格中。有关窗格及其包含的控件的信息,请参阅以下部分。

请注意,以下部分使用术语target S-function来指代由S-function Builder dialog box指定的S-function

Parameters/Language/S-Function Name Pane参数/语言/ S函数名称窗格

此窗格显示目标S函数名称和参数,并包含以下控件。

S函数名称: 指定目标S函数的名称。

语言
指定S函数的目标语言。您可以选择在C / C ++中生成S函数,也可以继承模型设置。

S函数参数
该表显示目标S函数的参数。表的每一行对应一个参数,每一列显示该参数的属性,如下所示:

名称—参数的名称。在“参数”窗格中定义和修改此属性。

数据类型-列出参数的数据类型。在“参数”窗格中定义和修改此属性。

—指定参数的值。在此字段中输入有效的MATLAB®表达式

建立/保存
使用此按钮可根据您在S-Function Builder中输入的信息生成C源代码和可执行MEX文件。如果按钮标记为Build,则S-Function Builder会生成源代码和可执行的MEX文件。如果按钮标记为“保存”,则仅生成C源代码。使用“构建信息”窗格上的“仅保存代码”复选框来切换此按钮的功能。

隐藏/显示S函数编辑选项卡
使用“参数/ S函数名称”窗格右下角的小按钮折叠和展开“ S函数构建器”对话框的底部。

Port/Parameter Pane 端口/参数窗格

左侧的“端口/参数”窗格显示对话框为目标S函数指定的端口和参数。

该窗格包含一个树控件,其顶部节点分别对应于目标S函数输入端口,输出端口和参数。展开“输入端口”,“输出端口”或“参数”节点,分别显示为目标S函数指定的输入端口,输出端口或参数。选择任何端口或参数节点都会在相应的端口或参数指定窗格上选择相应的条目。

初始化窗格

通过“初始化”窗格,您可以指定S函数的基本功能,例如其输入和输出端口的宽度及其采样时间。

S-Function Builder使用在此窗格上输入的信息来生成mdlInitializeSizes回调方法。 Simulink®引擎在仿真的模型初始化阶段调用此方法,以获得有关S函数的基本信息。 (有关模型初始化阶段的更多信息,请参见Simulink Engine与CS函数的交互。)

初始化窗格包含以下字段。

离散状态数
S函数中离散状态的数量。

**离散状态IC
**S函数中离散状态的(IC :Initial conditions)初始条件。您可以将值输入为以逗号分隔的列表或向量(例如[0 1 2])。初始条件的数量必须等于离散状态的数量。

连续状态数
S函数中连续状态的数量。

连续状态IC
S函数中连续状态的初始条件。您可以将值输入为以逗号分隔的列表或向量(例如[0 1 2])。初始条件的数量必须等于连续状态的数量。

采样模式
S函数的采样模式。采样模式确定S函数更新其输出的时间间隔。您可以选择以下选项之一:

继承 S函数从连接到其输入端口的块继承其采样时间。

连续 该块在每个仿真步骤更新其输出。

离散 S函数以S函数构建器对话框的采样时间值字段中指定的速率更新其输出。

采样时间值
标量值,指示S函数输出更新之间的间隔。仅当选择“离散”作为“采样”模式时,才启用此字段。

注意
S-Function Builder当前不支持多块采样时间或非零偏移时间。

PWorks数量
S函数使用的数据指针的数量。 PWorks指向块整个生命周期中的内存。例如,您可以在**“开始”**处声明并初始化指向文件或内存的指针,并在“**输出”,“更新”和“派生”窗格中访问它,然后在“终止”**窗格中将其取消分配。在这些窗格中编写的代码由mdlStartmdlOutputsmdlUpdatemdlDerivativesmdlTerminate调用。请参见示例。

注意
使用PWorks会影响SimState的合规性。如果声明PWorks,则不允许使用SimState保存和还原。否则,将使用默认的SimState合规性设置USE_DEFAULT_SIM_STATE

Data Properties Pane 数据属性窗格

“数据属性”窗格允许您将端口和参数添加到S函数。窗格左侧的按钮列允许您添加,删除或重新排序端口或参数。

要添加端口或参数,请单击add按钮。

要删除当前选定的端口或参数,请单击“删除”按钮。

要将当前选定的端口或参数向上移动到相应的S-Function端口或参数列表中的一个位置,请单击up按钮。

要将当前选定的端口或参数在相应的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 定制用户界面。 目录 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
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值