Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

采样时间的类型

离散采样时间

假如一个模块具有离散采样时间,Simulink® 模块将在以下时间执行模块输出或更新方法:

tn=nTs+|To|

其中,采样时间周期 Ts 始终大于零且小于仿真时间 Tsim。周期数 (n) 是一个整数且必须满足以下条件:

0nTsimTs

在仿真过程中,Simulink 在每个固定时间间隔 tn 只计算一次模块输出。这些仿真时间,即 Simulink 为给定的采样时间执行模块输出方法的时间,称为采样时间命中点。离散采样时间是唯一一种通过先验获得采样时间命中点的采样时间。

如果您需要延迟初始采样时间命中点,可以定义偏移量 To

Unit Delay 模块就是一种具有离散采样时间的模块。

连续采样时间

与离散采样时间不同,连续采样时间命中点划分为主时间步和子时间步,其中,子时间步代表主时间步的细分。求解器在每个主时间步生成结果。它使用子时间步的结果来提高主时间步结果的准确性。

您选择的 ODE 求解器将对从仿真开始到给定的主时间步或子时间步为止的所有连续状态进行积分。求解器将确定子时间步的时间点,并使用子时间步的结果来提高主时间步结果的准确性。但是,您只能看到在主时间步的模块输出。

要将模块(如 Derivative 模块)指定为连续模块,请在模块对话框的 Sample time 字段中输入 [0, 0]0

固定子步

如果模块的采样时间设置为 [0, 1],模块将采用固定子步。对于此设置,Simulink 不会在子时间步执行模块;更新只发生在主时间步。对于主时间步之间无法改变输出结果的模块,此过程可以消除不必要的计算。

虽然您可以将模块显式设置为固定子步,但更常见的情况是 Simulink 会将其设置为继承采样时间,或者设置为由用户指定 0(连续)的一种替代方法。当您使用固定步长求解器时,此设置相当于(并因此转换为)最快的离散速率。

继承采样时间

如果模块的采样时间设置为 [–1, 0]–1,则会继承采样时间,且 Simulink 会基于模型中的模块上下文为模块确定最佳采样时间。Simulink 在编译阶段执行此任务;原来的继承设置永远不会出现在编译后的模型中。因此,您永远不会在 Sample Time Legend 上看到继承的 ([–1, 0])。(请参阅查看采样时间信息。)

有些模块的采样时间默认为继承 (-1)。对于这些模块,此参数在模块对话框上不可见,除非为它设置了非继承值。这些模块的示例包括 GainRounding Function 模块。好的建模做法是不更改这些模块的 Sample time 参数。有关详细信息,请参阅不建议设置采样时间的模块

所有继承模块都受采样时间传播过程的制约,如传播如何影响继承的采样时间中所述。

固定采样时间

在 Simulink 中,常量是一种符号名称或表达式,它们的值只能在算法之外或通过监督控制进行更改。在模型的正常执行期间,输出保持不变的模块(例如常量模块)始终被视为常量。

Simulink 为这些模块分配固定采样时间。它们在以下情况下运行模块输出方法:

  • 开始仿真时。

  • 为了响应环境中的运行时变化,如调整参数。

对于固定采样时间,为模块分配的采样时间是 [inf,0][inf]

模块要允许使用固定采样时间,必须满足以下条件:

  • 模块没有连续或离散状态。

  • 模块不驱动条件执行子系统(请参阅使用使能子系统)的输出端口。

S-Function 模块

Simulink 模块库中包含多种模块,如 MATLAB S-Function 模块、Level-2 MATLAB S-Function 模块和 C S-Function 模块,它们的端口可以不同的采样率生成输出。这些模块的某些端口可以具有固定采样时间。

可变采样时间

使用可变采样时间的模块具有隐式 SampleTime 参数,此参数由模块指定;模块告诉 Simulink 何时运行它。编译后的采样时间为 [–2, Tvo],其中 Tvo 是一个具有唯一性的变量偏移量。

Pulse Generator 模块就是一种具有可变采样时间的模块。由于 Simulink 仅对可变步长求解器支持可变采样时间,因此如果您使用固定步长求解器,Pulse Generator 模块将指定离散采样时间。

要了解如何编写您自己的使用可变采样时间的模块,请参阅 C MEX S-Function Examples

可控采样时间

模块可以配置为使用分辨率为 Tbase 的可控采样时间。Tbase 是模块执行之间允许的最小时间间隔。要在您自己的 C S-Function 模块中设置 Tbase,请使用 ssSetControllableSampleTime

模块的执行时间可被动态地设置为 Tbase 的 n 倍。模块下次执行的时间是

Tnext = n Tbase + T

您可以使用 ssSetNumTicksToNextHitForControllableSampleTime 在 C S-Function 模块中设置 n

触发采样时间

如果某个模块在触发类型的(例如,函数调用、使能和触发或迭代器)子系统内部,模块可能为常量模块,或者具有触发采样时间。您不能显式指定触发采样时间类型。但是,要在编译过程中实现触发的类型,您必须将模块的采样时间设置为继承 (–1)。然后,Simulink 将在仿真过程中确定模块计算输出的具体时间。有一种例外情况就是子系统是异步函数调用,如下一节所述。

异步采样时间

异步采样时间类似于触发采样时间。在这两种情况下,都需要指定继承采样时间,因为 Simulink 引擎不会定期执行模块。相反,将由运行时条件决定何时执行模块。在异步采样时间的情况下,由 S-Function 执行异步函数调用。

这些采样时间类型之间的区别是:

  • 只有函数调用子系统可以具有异步采样时间。(请参阅使用函数调用子系统。)

  • 函数调用信号的源是具有 SS_OPTION_ASYNCHRONOUS 选项的 S-Function。

  • 当虚拟模块连接到异步 S-Function 或异步函数调用子系统时,也会发生异步采样时间。

  • 异步采样时间对某些代码生成应用程序很重要。(请参阅 中的异步事件 (Simulink Coder)。)

  • 采样时间为 [1,n]

有关如何使用模块为异步事件处理建模和生成代码的说明,请参阅 中的Rate Transitions and Asynchronous Blocks (Simulink Coder)

另请参阅

| |