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函数如何工作,首先需要了解Simulink如何模拟模型的数学,即模拟的阶段。金宝app看动态系统的仿真阶段有关更多详细信息。
Si金宝appmulink块包括一组输入,一组状态,一组参数和一组输出,其中输出是模拟时间,输入,参数和状态的函数。
以下等式表示输入,输出,参数,状态和模拟时间之间的数学关系。
在哪里
执行Simulink模型的阶段金宝app继续。在里面初始化阶段,Simulink金宝app Engine将库块包含到模型中,传播信号宽度,数据类型和采样时间,评估块参数,确定块执行顺序,并分配存储器。然后引擎进入一个仿真环路,每个通过循环的地方被称为a模拟步骤.在每个仿真步骤中,引擎按照初始化时确定的顺序执行模型中的每个块。对于每个块,引擎调用函数来计算当前示例时间的块状态、导数和输出。然后整个仿真循环继续,直到仿真完成。
模型初始化-模型是为仿真准备的。在这个阶段,评估块参数,确定块执行顺序,并为每个操作分配内存。在这一阶段之后,区块将经历一个模拟循环。
仅当模型具有连续状态时,才会发生连续状态和时间。您可以修改次要步骤方法,例如mdloutputs.
那mdlderivatives
,MDLzerOcross.
计算输出
s函数由一组S函数回调方法执行每个模拟阶段所需的任务。在模拟模型期间,在每个仿真阶段,Simulink引擎调用模型中的每个S函数块的适当方法。金宝app由S函数回调方法执行的任务包括:
编译——在这个阶段,Simulink引擎初始化s函数。金宝app任务包括:
将库块纳入模型,传播信号宽度,数据类型和采样时间
设置输入和输出端口的数量和尺寸
评估块参数,并确定块执行顺序
分配内存和存储区域。
输出的计算 - 在此状态下,计算输出,直到所有块输出端口对当前时间步长有效,即所有输出值都处于某个错误范围。
更新离散状态 - 在此呼叫中,该块执行一次性步长活动,例如更新离散状态。
初始化和终止方法 - 这些可选方法仅执行S-Function需要一次的初始化和终止活动。初始化活动可以包括设置用户数据,或在S函数中初始化状态向量。终止方法执行任何动作,例如释放仿真终止时所需的存储器,或者从模型中删除S函数块时。
集成 - 这适用于具有连续状态和/或非采样过零点的模型。如果您的S函数具有连续状态,则发动机在次要时间步骤中调用S-函数的输出和衍生部分。这是求解器可以为您的S函数计算状态。如果您的S函数具有非采样过零点,则发动机还在次要时间步骤中调用S-函数的输出和零交叉部分,以便它可以定位零点。
要理解模拟的术语,特别是s函数,请参阅函数的概念.
要在模型中纳入C MEX S函数,请拖动aS函数街区来自金宝appSimulink库浏览器.同样,融合了一个Level-2 Matlab S功能到模型,拖动一个Level-2 Matlab S功能块到模型。
打开块的参数对话框并指定S函数名称S函数名称为提供功能的字段S函数块。例如,类型Timestwo.
并击中申请添加C MEX S函数,将传入信号乘以两个。
笔记
如果MATLAB路径包含C MEX文件和具有由S函数块引用的同名的MATLAB文件,则S函数块使用C MEX文件。
同时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函数的其他参数。有关掩蔽的讨论,请参阅创建块面具.
创建新的通用块
添加代表硬件设备驱动程序的块
将现有的C代码合并到模拟中(见使用遗留代码工具集成C函数)
将系统描述为一组数学方程
使用图形动画(见倒立摆的例子,有动画的倒立摆)
S-函数最常见的使用是创建自定义Simulink块(参见金宝app块创建基础知识).当您使用s函数来创建通用块时,您可以在模型中多次使用它,并根据块的每个实例改变参数。
Level-2 Matlab S功能|Matlab功能|S函数|S函数建设者