主要内容

什么是s函数?

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

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

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

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

S-Functions如何工作

S-functions定义了一个块在模拟的不同部分(如初始化、更新、衍生、输出和终止)中如何工作。在仿真的每一步中,仿真引擎都会调用一个方法来完成特定的任务。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引擎将库块合并到模型中,传播信号宽度、数据类型和样本时间,评估块参数,确定块执行顺序,并分配内存。然后发动机进入模拟循环,其中每通过一次循环称为仿真步骤.在每个仿真步骤中,引擎按照初始化时确定的顺序执行模型中的每个块。对于每个块,引擎调用函数来计算当前示例时间的块状态、导数和输出。然后整个仿真循环继续,直到仿真完成。

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

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

s函数回调方法

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

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

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

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

    • 评估块参数,并确定块执行顺序

    • 分配内存和存储区域。

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

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

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

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

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

在模型中使用s函数

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

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

请注意

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

向s函数传递参数

在这两个功能块和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-Functions中的错误有关如何访问s -函数中用户指定的参数的信息。

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

何时使用s函数

您可以使用s -函数的各种应用程序,包括:

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

另请参阅

|||

相关的话题