Main Content

采样时间的类型

离散采样时间

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

tn=nTs+|To|,

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

0nTsimTs.

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

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

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

可控采样时间

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

当模块使用可控采样时间时,您可以动态配置模块,使其以 Tbasen 倍执行时间执行。下一个模块执行的时间是

Tnext = n Tbase + T(1)

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

连续采样时间

连续采样时间

连续采样时间命中点分为主时间步和子时间步。子时间步是对主时间步的细分。求解器在每个主时间步生成结果。求解器使用子时间步的结果来提高主时间步结果的准确性。

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

要为模块(如 Derivative 模块)指定连续采样时间,请为采样时间参数输入 [0, 0]0

子步中不变采样时间

如果模块的采样时间是 [0 1],则模块将采用子步中不变的采样时间。对于此采样时间,模块不会在子时间步执行。模块仅在主时间步执行。对于主时间步之间无法改变输出结果的模块,采用子步中不变的采样时间消除了不必要的计算。

虽然您可以将模块显式设置为子步中不变采样时间,但更常见的情况是软件会将其设置为继承采样时间,或者设置为连续采样时间设定的一种替代方法。子步中不变的采样时间等效于使用定步长求解器的系统中的最快离散速率。当使用定步长求解器时,子步中不变的采样时间会转换为最快的离散采样时间。

可变采样时间

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

Hit Scheduler 模块和 Pulse Generator 模块都具有可变采样时间。仅变步长求解器支持可变采样时间。定步长求解器不支持 Hit Scheduler 模块。当使用定步长求解器对包含 Pulse Generator 模块的模型进行仿真时,模块将指定离散采样时间。

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

事件和异步采样时间

异步采样时间

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

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

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

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

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

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

  • 采样时间为 [-1,-n]

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

非周期性分区

模型中的非周期性分区会引入上述类型的采样时间。非周期性分区没有约束,可以随时执行。您可以在调度编辑器中指定命中时间来驱动非周期性分区的时间线。事件可以确定指定此采样时间的模块的执行时间。子系统模块可以使用非周期性作为指定的采样时间参数。

其他采样时间

继承采样时间

如果模块采样时间设置为 [–1 0]–1,则会继承采样时间,且软件会根据模型内模块的上下文确定模块的最佳采样时间。在编译期间,软件通过继承采样时间来确定模块的采样时间。由于继承的设置在编译时会被覆盖,采样时间图例不会在编译的模型中显示继承的采样时间 [-1 0]。有关详细信息,请参阅查看采样时间信息

有些模块默认继承采样时间。对于这些模块,除非指定非继承值,否则该参数不可见。例如,GainRounding Function 模块没有可见的采样时间参数,默认情况下具有继承的采样时间。最佳做法是不更改这些模块的采样时间参数。有关详细信息,请参阅不建议设置采样时间的模块

所有继承模块都受采样时间传播过程的制约。有关详细信息,请参阅传播如何影响继承的采样时间

固定采样时间

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

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

  • 开始仿真时

  • 对环境中的运行时变化(如调整参数)进行响应时

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

对于允许固定采样时间的模块,该模块不能具有连续或离散状态,并且不能驱动条件执行子系统的输出端口。有关详细信息,请参阅使用使能子系统

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

触发采样时间

如果某个模块在触发子系统(例如函数调用子系统或使能子系统)中,则模块可能为常量模块或者具有触发采样时间(在异步函数调用的情况下除外)。您不能显式指定触发采样时间类型。要在编译期间获得触发采样时间,请将模块采样时间设置为继承 (–1)。然后由软件确定在仿真期间模块执行的具体时间。

多速率采样时间

联合速率

联合采样时间是组件采样时间的并集。这些采样时间的执行是组件采样时间的时间线的联合。

多速率采样时间

Simulink 引擎在模型中引入多速率采样时间。更新图将子系统或任何多速率模块(例如 Rate Transition 模块)变为黄色,因为这些模块包含多个采样时间。

在评估一个系统的多个采样时间时,软件不会考虑常量 [inf, 0] 或模型范围内的事件。因此,如果一个子系统包含一个具有固定值输出的模块和一个具有离散采样时间的模块,则该子系统不被视为多速率系统。如果模块具有连续且子步中不变采样时间,这些模块也不会被视为多速率模块,因为这些采样时间的时间线相同。此类模块被视为具有连续采样时间。

数据流采样时间

以数据流作为其采样时间的模块是数据驱动的模块。例如,Dataflow Subsystem (DSP System Toolbox) 模块。此模块使用同步数据流作为计算模型,此模型由数据驱动并静态调度。有关详细信息,请参阅Dataflow Subsystem (DSP System Toolbox)

初始化、重新初始化、终止采样时间

您可以使用 Initialize FunctionReinitialize FunctionTerminate Function 模块将自定义例程添加到默认例程以更改或读取模块状态。您也可以使用 Reset Function 模块实现自定义例程。当模型中存在 Initialize Function、Reinitialize Function 和 Terminate 模块时,指定初始化、重置和终止采样时间。这些模块包含在模型中引入此采样时间的算法或语义。

相关主题