主要内容

函数的概念

直接引线

直接引线意味着输出(或可变采样时间块的可变采样时间)直接由输入端口信号的值控制。典型的s功能输入端口有直接的馈通if

  • 输出函数(mdloutputs.)是输入的函数.也就是说,如果输入是直接馈通是访问mdloutputs..输出还可以包括图形输出,如xy图形范围的情况。

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

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

y = K. ×

在哪里输入,K.是增益,还是增益y是输出。

不需要输入(即没有直接的馈通)的系统的一个例子是简单的集成算法

y = X

X ˙ =

在哪里X是国家, X ˙ 是状态对时间的导数,是输入,和y是输出。金宝appsimulink.®集成变量 X ˙

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

动态大小的阵列

您可以编写S-函数以支持任意输入尺寸。金宝app在这种情况下,通过评估驱动S函数的输金宝app入向量的尺寸来开始模拟时,模拟引擎确定实际输入尺寸。您的S函数还可以使用输入尺寸来确定连续状态的数量,离散状态的数量和输出的数量。

笔记

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

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

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

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

输入和输出端口有关配置S函数输入和输出端口的详细信息。

设置采样时间和偏移

Level-2 MATLAB和C MEX S函数都提供以下采样时间选项,该选项允许在指定S函数执行时,允许高度灵活性:

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

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

  • 离散采样时间-如果你的s函数的行为是一个离散时间间隔的函数,你可以定义一个采样时间来控制当Simulink引擎调用s函数。金宝app还可以定义一个延迟每个采样时间的偏移量。偏移量不能超过对应的采样时间。

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

    timehit =(n *时段)+偏移量

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

    如果你定义一个离散采样时间,引擎调用s函数mdloutputs.mdlUpdate例程在每个样本时间命中(定义在前面的等式)。

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

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

    s函数可以从

    • 驾驶块

    • 目的地块

    • 系统中最快的采样时间

    要指定S函数采样时间是继承的,请使用-1级Matlab S函数中的-1继承_sample_time.在C - MEX中,s作为采样时间。有关样本时间传播的更多信息,请参见传播如何影响继承的样本时间金宝appSimulink用户指南

S函数可以单身或多型;多速率S函数具有多个采样时间。

采样时间以这种格式成对指定:[sample_timeoffset_time.].

有效的C MEX S函数样本时间

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

[continual_sample_time,0.0] [continual_sample_time,fixed_in_minor_step_offset] [discrete_sample_time_period抵消] [变量_sample_time,0.0]

在哪里

continual_sample_time = 0.0 fixed_in_minor_step_offset = 1.0变量_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]%可变采样时间

其中斜体中的变量名称指示需要实际值。使用连续采样时间时,一个抵消1表示输出在次要积分时间步骤中固定。一个抵消0.指示每个小集成时间步骤的输出变化。

选择样本时间的指南

使用以下准则获取指定示例时间的帮助:

  • 在轻微集成步骤期间更改的连续S函数应注册[CONTINUOUS_SAMPLE_TIME0.0] 采样时间。

  • 在轻微集成步骤期间不会改变的连续S函数应该注册[tronese_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调用例程以获取可变步骤离散任务的下一个样本命中的时间。在一个级别-2 matlab s函数中,NextTimeHit属性中设置输出设置下一个样本命中的方法。

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

  • 即使在次要集成步骤期间,也应作为其输入变化而变化的S函数,应注册(INHERITED_SAMPLE_TIME, 0.0)采样时间。

  • 如果s函数随着输入的变化而变化,但在较小的积分步骤中不发生变化(即在较小的时间步骤中保持不变),则应该注册[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]采样时间。

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

指定s函数的采样时间以获取关于在s函数中实现不同类型的采样时间的信息。

也可以看看

|||

相关的话题