主要内容

S-函数概念

直接馈通

直接馈通表示输出(或可变采样时间块的可变采样时间)直接由输入端口信号的值控制。通常,S功能输入端口在以下情况下具有直接馈通:

  • 输出函数(mdlOutputs)是输入的函数u.也就是说,如果输入u可通过访问mdlOutputs.输出还可以包括图形输出,如XY Graph作用域。

  • “下次点击时间”功能(mdlGetTimeOfNextVarHit)对于可变采样时间,S函数访问输入u

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

y k × u

在哪里u是输入,k这就是收益,并且y是输出。

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

y x

x ˙ u

在哪里x是国家, x ˙ 是相对于时间的状态导数,u是输入,并且y是输出。金宝app动态仿真模块®集成的变量 x ˙

正确设置direct feedthrough标志非常重要,因为它会影响模型中块的执行顺序,并用于检测代数循环(请参见代数循环概念在里面使用Simu金宝applink)。如果包含S函数的模型的模拟结果不收敛,或模拟失败,则可能错误地设置了直接馈通标志。请尝试打开直接馈通标志并设置代数循环求解器诊断到警告(见代数循环选择权型号配置参数:诊断中的参考页金宝appSimulink图形用户界面)。随后运行仿真将显示模型中的任何代数循环,并显示引擎是否将s函数置于代数循环中。

动态数组大小

您可以编写s函数来支持任意输入维度。金宝app在这种情况下,当仿真启动时,Simu金宝applink引擎通过评估驱动s函数的输入向量的维度来确定实际的输入维度。s函数还可以使用输入维度来确定连续状态的数量、离散状态的数量和输出的数量。

请注意

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

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

例如,下图显示了模型中相同S功能块的两个实例。

上部S功能块由一个具有三元素输出向量的块驱动。下部S功能块由一个具有标量输出的块驱动。通过指定S功能块具有动态大小的输入,相同的S功能可以适应这两种情况。Simulink引擎会自动调用具有相应输出向量的块大小输入向量。类似地,如果其他块特征(如输出数量或离散或连续状态数量)指定为动态大小,则引擎将这些向量定义为与输入向量相同的长度。金宝app

看到输入输出端口有关配置s功能输入和输出端口的更多信息。

设置采样时间和偏移量

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

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

  • 连续但固定在次要时间步采样时间-用于需要在每个主要模拟步骤执行但在次要时间步期间不改变值的S函数。

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

    一个采样时间命中在公式确定的时间值处发生

    TimeHit = (n * period) + offset

    其中整数n是当前模拟步骤。的第一个值n总是零。

    如果定义离散采样时间,引擎将调用S函数mdlOutputsmdlUpdate每次采样时间命中的例程(如前一等式中所定义)。

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

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

    S函数可以从中继承其采样时间

    • 开车的块

    • 目的地的块

    • 系统中最快的采样时间

    要指定一个s函数的采样时间继承,在MATLAB二级s函数中使用-1INHERITED_SAMPLE_TIME在C MEX中,S函数用作采样时间。有关采样时间传播的更多信息,请参阅传播如何影响继承的样本时间金宝appSimulink用户指南

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

样本时间成对指定,格式如下:[采样时间偏移时间].

有效的C MEX s -函数采样次数

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

[continuous_sample_time, 0.0] [continuous_sample_time, fixed_in_minor_step_offset]离散样本时间周期抵消][变量样本时间,0.0]

在哪里

连续样本时间=0.0固定样本时间=0.0小步偏差=1.0变量样本时间=-2.0

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

或者,您可以指定采样时间是从驱动块继承的

[继承的样本时间,0.0]

[继承的\u采样\u时间,固定的\u在\u次要\u步长\u偏移]

在哪里

继承的样本时间=-1.0

有效的2级MATLAB S函数采样次数

二级MATLAB S函数的有效采样时间对如下

[0抵消%连续采样时间[离散样本时间周期抵消%离散样本时间[- 1,0]%继承样本时间[- 2,0]%变量样本时间

其中斜体的变量名表示需要一个实值。当使用连续采样时间时抵消属于1表示输出固定在较小的积分时间步长中。一个抵消属于0指示在每个较小的积分时间步长的输出更改。

选择采样时间的指南

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

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

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

  • 一个以指定速率变化的离散s函数应该寄存器离散采样时间对,[离散样本时间周期抵消],在哪里

    离散采样周期> 0.0

    0≤抵消<离散采样周期
  • 以可变速率变化的离散S函数应记录可变步长离散采样时间。

    [变量样本时间,0.0]

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

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

  • 如果s函数随着输入的变化而变化,即使是在很小的集成步骤中,也应该注册[继承的样本时间,0.0]样品时间。

  • 当输入发生变化时,S函数发生变化,但在次要集成步骤中不会发生变化(即,在次要时间步骤中保持不变),应注册[继承的\u采样\u时间,固定的\u在\u次要\u步长\u偏移]样品时间。

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

看到指定S函数采样时间有关在S函数中实现不同类型的采样时间的信息。

另请参阅

|||

相关话题