文档

什么是s函数?

S-functions(系统函数)为扩展Simulink的功能提供了一个强大的机制金宝app®环境。一个功能是用MATLAB编写的Simulink块的计算机语言描述吗金宝app®、C、c++或Fortran。C、c++和Fortran s函数被编译为MEX文件墨西哥人实用程序(见编译C MEX函数(MATLAB))。与其他MEX文件一样,s -function是MATLAB执行引擎可以自动加载和执行的动态链接子例程。

s -函数使用一种称为S-function API的特殊调用语法,它使您能够与Simulink引擎交互。金宝app这种交互非常类似于发生在引擎和内置Simulink块之间的交互。金宝app

s函数遵循一般形式,可以适应连续、离散和混合系统。通过遵循一组简单的规则,您可以在S-function中实现算法,并使用S-function块将其添加到Simulink模型中。金宝app在编写S-function并将其名称放入S-function块(可在用户定义函数块库中获得)之后,您可以使用屏蔽自定义用户界面(参见创建块面具).

如果你有金宝app仿真软件编码器™,您可以在模型中使用s函数并生成代码。您还可以通过编写目标语言编译器(TLC)文件来定制为s函数生成的代码。有关更多信息,请参见s函数和代码生成(金宝app仿真软件编码器)。

S-Functions如何工作

s函数定义了一个块在模拟的不同部分如何工作,比如初始化、更新、派生、输出和终止。在模拟的每个步骤中,模拟引擎都会调用一个方法来完成特定的任务。s函数的基本知识需要块输入、状态和输出之间的数学关系的基本知识。要理解s函数是如何工作的,首先需要理解Simulink如何模拟模型的数学,即模拟的各个阶段。金宝app看到动态系统的仿真阶段了解更多详细信息。

数学的金宝app

Si金宝appmulink块由一组输入、一组状态、一组参数和一组输出组成,其中输出是模拟时间、输入、参数和状态的函数。

下面的方程表示了输入、输出、参数、状态和模拟时间之间的数学关系。

y f 0 t x u (输出) x ˙ f d t x u (金融衍生品) x d k + 1 f u t x c x d k u (更新)

在哪里 x x c x d

仿真阶段

Simulink模型的执行是分金宝app阶段进行的。在初始化阶段,Simulink金宝app引擎将库块合并到模型中,传播信号宽度、数据类型和采样时间,计算块参数,确定块执行顺序,并分配内存。然后,引擎进入模拟循环,其中每一次循环都被称为a仿真步骤.在每个模拟步骤中,引擎按照初始化期间确定的顺序执行模型中的每个块。对于每个块,引擎调用计算当前样本时间的块状态、导数和输出的函数。整个模拟循环继续进行,直到模拟完成。

模型初始化——为仿真准备模型。在这个阶段,计算块参数,确定块执行顺序,并为每个操作分配内存。在这一阶段之后,区块将经历一个模拟循环。

连续状态和时间的更新——只有当模型具有连续状态时才会发生。您可以修改小步骤方法,例如mdlOutputsmdlDerivatives,mdlZeroCrossing计算输出

s函数回调方法

s函数由一组s函数回调方法执行每个模拟阶段所需的任务。在模型的仿真过程中,在每个仿真阶段,Simulink引擎为模型中的每个S-Function块调用适当的方法。金宝apps函数回调方法执行的任务包括:

  • 编译——在这个阶段,Simulink引擎初始化s函数。金宝app任务包括:

    • 将库块合并到模型中,并传播信号宽度、数据类型和采样时间

    • 设置输入、输出端口的数量和尺寸

    • 计算块参数,并确定块的执行顺序

    • 分配内存和存储区域。

  • 输出的计算——在此状态下,输出计算直到所有块输出端口对当前时间步长有效,即所有输出值处于一定的误差范围。

  • 更新离散状态——在此调用中,块执行每时间步一次的活动,如更新离散状态。

  • 初始化和终止方法——这些可选方法只执行一次S-function所需的初始化和终止活动。初始化活动可以包括设置用户数据,或初始化s函数中的状态向量。终止方法执行任何操作,如在模拟终止时释放所需的内存,或在从模型中删除s函数块时释放内存。

  • 积分——这适用于具有连续状态和/或无采样零交叉的模型。如果你的s函数有连续的状态,引擎调用s函数的输出和导数部分在小的时间步长。这样求解器就可以计算s函数的状态。如果你的s函数有未采样的过零点,引擎也会以较小的时间步长调用s函数的输出和过零点部分,以便定位过零点。

要理解模拟的术语,特别是s函数,请参见函数的概念

在模型中使用s函数

  1. 要将C MEX s函数合并到模型中,可拖动a功能块的金宝app模型库浏览器.类似地,合并a2级MATLAB函数对模型,拖动a2级MATLAB函数块到模型。

  2. 打开块的参数对话框中指定s函数名功能名称字段提供的功能功能块。例如,类型timestwo,点击应用添加一个C MEX s函数,将传入信号乘以2。

请注意

如果MATLAB路径包含一个C MEX文件和一个由S-Function块引用的同名的MATLAB文件,则S-Function块使用C MEX文件。

传递参数给S-Functions

在这两个功能块和2级MATLAB函数块的参数窗口允许您指定传递给相应s函数的参数值。要使用这些字段,您必须知道s函数需要的参数以及函数需要它们的顺序。(如果不知道,请咨询s函数的作者、文档或源代码。)按s函数所需的顺序输入参数,以逗号分隔。参数值可以是常量、在MATLAB或模型工作区中定义的变量名或MATLAB表达式。

的用法参数字段为二级MATLAB s函数输入用户定义的参数。

该模型msfcndemo_limintm在这个例子中包含了样本s函数msfcn_limintm.m

msfcn_limintm.ms函数接受三个参数:下界、上界和初始条件。如果时间积分在上下限之间,s函数输出输入信号的时间积分,如果时间积分小于下界,则输出下界,如果时间积分大于上界,则输出上界。示例中的对话框指定了的下限和上限以及初始条件-5.05.0,0,分别。当输入是振幅为5的正弦波时,示波器显示输出结果。

看到处理函数的参数而且处理s - function中的错误参阅如何在s函数中访问用户指定的参数。

您可以使用屏蔽功能为S-Function块创建自定义对话框和图标。屏蔽对话框可以更容易地为s函数指定附加参数。有关屏蔽的讨论,请参见创建块面具

何时使用s函数

你可以在各种应用中使用s函数,包括:

S-functions最常见的用途是创建自定义的Simulink块(参见金宝app块创建基础知识).当您使用s函数创建通用块时,您可以在模型中多次使用它,随着块的每个实例改变参数。

另请参阅

|||

相关的话题