主要内容

什么是s函数?

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

S函数使用称为S-Function API的特殊调用语法,使您可以与Simulink引擎进行交互。金宝app这种交互与发动机和内置的Simulink块之间发生的交互非常相似。金宝app

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

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

S函数如何工作

S函数定义块在不同部分的块工作原理,例如初始化,更新,衍生物,输出和终止。在模拟的每个步骤中,模拟引擎调用一种方法来满足特定任务。S函数基础需要块输入,状态和输出之间的数学关系的基础知识。要了解S函数如何工作,首先需要了解Simulink如何模拟模型的数学,即模拟的阶段。金宝app看动态系统的仿真阶段有关更多详细信息。

数学的金宝app

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

以下等式表示输入,输出,参数,状态和模拟时间之间的数学关系。

y = F 0. T. X (输出) X ˙ = F D. T. X (衍生物) X D. K. + 1 = F T. X C X D. K. (更新)

在哪里 X = [ X C ; X D. ]

模拟阶段

执行Simulink模型的阶段金宝app继续。在里面初始化阶段,Simulink金宝app Engine将库块包含到模型中,传播信号宽度,数据类型和采样时间,评估块参数,确定块执行顺序,并分配存储器。然后引擎进入一个仿真环路,每个通过循环的地方被称为a模拟步骤.在每个仿真步骤中,引擎按照初始化时确定的顺序执行模型中的每个块。对于每个块,引擎调用函数来计算当前示例时间的块状态、导数和输出。然后整个仿真循环继续,直到仿真完成。

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

仅当模型具有连续状态时,才会发生连续状态和时间。您可以修改次要步骤方法,例如mdloutputs.mdlderivatives,MDLzerOcross.计算输出

S函数回调方法

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

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

    • 将库块纳入模型,传播信号宽度,数据类型和采样时间

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

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

    • 分配内存和存储区域。

  • 输出的计算 - 在此状态下,计算输出,直到所有块输出端口对当前时间步长有效,即所有输出值都处于某个错误范围。

  • 更新离散状态 - 在此呼叫中,该块执行一次性步长活动,例如更新离散状态。

  • 初始化和终止方法 - 这些可选方法仅执行S-Function需要一次的初始化和终止活动。初始化活动可以包括设置用户数据,或在S函数中初始化状态向量。终止方法执行任何动作,例如释放仿真终止时所需的存储器,或者从模型中删除S函数块时。

  • 集成 - 这适用于具有连续状态和/或非采样过零点的模型。如果您的S函数具有连续状态,则发动机在次要时间步骤中调用S-函数的输出和衍生部分。这是求解器可以为您的S函数计算状态。如果您的S函数具有非采样过零点,则发动机还在次要时间步骤中调用S-函数的输出和零交叉部分,以便它可以定位零点。

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

在型号中使用S函数

  1. 要在模型中纳入C MEX S函数,请拖动aS函数街区来自金宝appSimulink库浏览器.同样,融合了一个Level-2 Matlab S功能到模型,拖动一个Level-2 Matlab S功能块到模型。

  2. 打开块的参数对话框并指定S函数名称S函数名称为提供功能的字段S函数块。例如,类型Timestwo.并击中申请添加C MEX S函数,将传入信号乘以两个。

笔记

如果MATLAB路径包含C MEX文件和具有由S函数块引用的同名的MATLAB文件,则S函数块使用C MEX文件。

将参数传递给S函数

同时S函数Level-2 Matlab S功能块的参数窗口允许您指定要传递到相应的S函数的参数值。要使用这些字段,您必须知道S函数所需的参数以及函数需要它们的顺序。(如果您不知道,请参阅S函数的作者,文档或源代码。)输入由S函数所需的顺序输入由逗号分隔的参数。参数值可以是常量,在Matlab或Model工作区中定义的变量名称或MATLAB表达式。

以下示例说明了使用的用法参数字段为级别-2 MATLAB S函数输入用户定义的参数。

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

msfcn_limintm.m.S函数接受三个参数:下限,上限,初始条件。如果时间积分在下限和上限之间,则S函数输出输入信号的时间积分,如果时间积分小于下限,并且如果时间积分大于下限上限。该示例中的对话框指定较低和上限和初始条件-5.0.5.0,0., 分别。当输入是幅度5的正弦波时,范围显示所得输出。

处理S函数参数处理S函数中的错误有关如何在S函数中访问用户指定参数的信息。

您可以使用屏蔽工具为您的函数块创建自定义对话框和图标。屏蔽对话框可以更轻松地指定S函数的其他参数。有关掩蔽的讨论,请参阅创建块面具

何时使用s函数

您可以使用S函数进行各种应用程序,包括:

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

也可以看看

|||

相关的话题