主要内容

什么是s函数?

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

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

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

如果你有金宝app仿真软件编码器™,您可以在模型中使用s函数并生成代码。您还可以通过编写目标语言编译器(Target Language Compiler, TLC)文件来定制为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-function回调方法执行的任务包括:

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

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

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

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

    • 分配内存和存储区域。

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

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

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

  • 集成——这适用于具有连续状态和/或非采样零交叉的模型。如果你的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文件和一个具有相同名称的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函数中的错误获取关于如何访问s函数中用户指定的参数的信息。

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

什么时候使用s函数

你可以在很多应用中使用s函数,包括:

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

另请参阅

|||

相关的话题