文档

函数的概念

直接引线

直接引线意味着输出(或变量采样时间块的变量采样时间)直接由输入端口信号的值控制。通常情况下,s函数输入端口具有直接馈通if

  • 输出函数(mdlOutputs)是输入的函数u.也就是说,如果输入有直接馈通u是访问mdlOutputs.输出也可以包括图形输出,就像XY图形作用域一样。

  • “下一次点击时间”功能(mdlGetTimeOfNextVarHit)的s函数访问输入u

需要输入(即具有直接馈通)的系统的一个例子是操作

y k × u

在哪里u是输入,k是增益,又是y是输出。

一个不需要输入(也就是说,没有直接馈通)的系统的例子是简单的积分算法

y x

x ˙ u

在哪里x是国家, x ˙ 是状态对时间的导数,u输入,和y是输出。万博1manbetx动态仿真模块®集成的变量 x ˙

正确设置直接馈通标志是非常重要的,因为它会影响模型中块的执行顺序,并用于检测代数循环(参见代数循环使用仿真软件万博1manbetx).如果包含你的s函数的模型的模拟结果不收敛,或者模拟失败,你可能有直接馈通标志设置不正确。试着打开直接馈通标志并设置代数循环求解诊断警告(见代数循环选择在型号配置参数:诊断参考页面万博1manbetxSimulink图形用户界面).随后运行模拟将显示模型中的任何代数循环,并显示引擎是否将s函数置于一个代数循环中。

动态数组大小

你可以编写s函数来支持任意的输入维度。万博1manbetx在这种情况下,Simulink引擎通万博1manbetx过计算驱动s函数的输入向量的维度来确定模拟开始时的实际输入维度。s函数还可以使用输入维度来确定连续状态的数量、离散状态的数量和输出的数量。

请注意

动态大小的输入对于特定模型中的s函数的每个实例或在不同的模拟过程中可能具有不同的大小,但是在特定模拟过程中,s函数的每个实例的输入大小是静态的。

C MEX s函数和二级MATLAB®s函数可以有多个输入和输出端口,每个端口可以有不同的尺寸。维度的数量和每个维度的大小可以动态确定。

例如,下图显示了模型中同一个S-Function块的两个实例。

上面的S-Function块由一个带有三元素输出向量的块驱动。下面的S-Function块由带有标量输出的块驱动。通过指定S-Function块具有动态大小的输入,同一个S-Function可以适应这两种情况。Simu万博1manbetxlink引擎自动调用带有适当大小的输入向量的块。类似地,如果其他块特征(如输出的数量或离散或连续状态的数量)被指定为动态大小,则引擎将这些向量定义为与输入向量相同的长度。

看到输入输出接口参阅更多有关配置s函数输入和输出端口的资料。

设置采样时间和偏移量

2级MATLAB和C MEX s -函数都提供了以下示例时间选项,允许在指定s -函数何时执行时具有高度的灵活性:

  • 连续采样时间——对于具有连续状态和/或非采样零交叉的s函数(参见动态系统的仿真阶段对于零交叉的解释)。对于这种类型的s函数,输出变化的时间步长很小。

  • 连续的,但固定的小时间步采样时间-对于s函数,需要在每个主要模拟步骤中执行,但在小时间步中不改变值。

  • 离散采样时间——如果你的s函数的行为是一个离散时间间隔的函数,你可以定义一个采样时间来控制Simulink引擎调用s函数的时间。万博1manbetx您还可以定义一个偏移量来延迟每个采样时间的命中。偏移量的值不能超过相应的采样时间。

    一个样品的时间了发生在由公式确定的时间值

    TimeHit = (n * period) + offset

    的整数n是当前模拟步骤。的第一个值n永远是零。

    如果你定义一个离散的采样时间,引擎调用s函数mdlOutputs而且mdlUpdate在每个采样时间点的例程(如前一个等式中定义的)。

  • 可变采样时间-一个离散的采样时间,采样命中之间的间隔可以变化。在每个模拟步骤的开始,查询具有可变采样时间的s函数以确定下一次命中的时间。

  • 继承采样时间——有时s函数没有固有的采样时间特征(也就是说,它要么是连续的,要么是离散的,取决于系统中其他块的采样时间)。在这种情况下,您可以指定采样时间为继承了.一个简单的例子是一个Gain块,它从驱动它的块继承它的采样时间。

    s函数可以继承它的采样时间

    • 开车的块

    • 目的地的块

    • 系统中最快的采样时间

    要指定继承一个s函数采样时间,在Level-2的MATLAB s函数和中使用-1INHERITED_SAMPLE_TIME在C MEX中s作为采样时间。有关样本时间传播的更多信息,请参见传播如何影响继承的样本时间万博1manbetx仿真软件使用手册

s函数可以是单速率或多速率;多速率s函数有多个采样次数。

样例时间按以下格式成对指定:[sample_timeoffset_time].

有效的C MEX s -函数采样时间

C MEX s函数的有效采样时间对为

[continuous_sample_time, 0.0] [continuous_sample_time, fixed_in_minor_step_offset] [discrete_sample_time_period抵消] [VARIABLE_SAMPLE_TIME, 0.0]

在哪里

Continuous_sample_time = 0.0 fixed_in_minor_step_offset = 1.0 variable_sample_time = -2.0

用斜体显示的变量名表示需要一个实值。

或者,您可以指定从驱动块继承采样时间。在这种情况下,C MEX s函数也只有一个采样时间对

(INHERITED_SAMPLE_TIME, 0.0)

[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]

在哪里

INHERITED_SAMPLE_TIME = -1.0

有效的二级MATLAB s函数采样次数

2级MATLAB s函数的有效采样时间对为

[0抵消%连续采样时间[discrete_sample_time_period抵消%离散采样时间[- 1,0]%继承采样时间[- 2,0]%可变采样时间

其中以斜体显示的变量名表示需要一个实值。当使用连续采样时间时,an抵消1指示输出在小的集成时间步中是固定的。一个抵消0指示在每个小的集成时间步上的输出更改。

选择样本时间的指南

使用以下指导原则来帮助指定样例时间:

  • 在小的集成步骤中发生变化的连续s函数应该注册[CONTINUOUS_SAMPLE_TIME0.0样品时间。

  • 在小的集成步骤中不改变的连续s函数应该注册[CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]样品时间。

  • 一个以指定速率变化的离散s函数应该注册离散采样时间对,[discrete_sample_time_period抵消),

    discrete_sample_period> 0.0

    而且

    0.0≤抵消<discrete_sample_period
  • 一个变速率变化的离散s函数应该记录变步长离散采样时间。

    (VARIABLE_SAMPLE_TIME, 0.0)

    在C MEX s函数中mdlGetTimeOfNextVarHit例程的调用是为了获取变步长离散任务的下一个命中样本的时间。在二级MATLAB s函数中NextTimeHit属性中设置的输出方法设置下一个示例命中。

如果你的s函数没有固有的采样时间,你必须表明你的采样时间是继承的。有两种情况:

  • 一个s函数,如果它的输入发生变化,即使是在较小的集成步骤中,它也应该注册(INHERITED_SAMPLE_TIME, 0.0)样品时间。

  • s函数随着其输入的变化而变化,但在较小的集成步骤中不变化(也就是说,在较小的时间步骤中保持固定),应该注册[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]样品时间。

    范围Block就是这种类型的块的一个很好的例子。该块以其驱动块的速率运行,或连续或离散,但从不以小步运行。如果是这样,范围显示将显示求解器的中间计算,而不是每个时间点的最终结果。

看到样品时间参阅在s函数中实现不同类型的采样时间的信息。

这个话题有帮助吗?<在put type="button" value="是的" onClick="openFeedbackWindow('//www.tianjin-qmedu.com/programs/bounce_hub_help.html?s_cid=Help_Topic_Survey&surveyParams='+document.location.href+'-YES-R2018a');">