主要内容

S函数概念

直接喂养

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

  • 输出函数(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 ˙

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

动态数组大小

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

请注意

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

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

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

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

看到输入输出端口有关配置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函数中作为采样时间。有关样本时间传播的更多信息,请参阅传播如何影响继承的样本时间在里面金宝app仿真软件使用手册

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]

在哪里

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.

有效的级别-2 Matlab S函数样本时间

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

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

其中斜体的变量名表示需要一个实值。当使用连续采样时间时抵消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函数应注册可变步长分立采样时间。

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

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

另请参阅

|||

相关话题