指定采样时间
指定采样时间
Simulink® 允许您直接将模块的采样时间指定为数值,或者通过定义采样时间向量以符号形式指定。采样时间值必须为包含采样时间周期和偏移量的 double 或 double 的二元素数组。对于离散采样时间,向量为 [Ts, ],其中 To 是采样周期,Ts 是初始时间偏移量。例如,假设有以离散速率(每两秒)生成输出的模型。您可以为 ToSampleTime 参数指定数值 2,直接设置离散采样时间。因为偏移量的值为零,所以不需要指定;但您可以在采样时间字段中输入 [2,0]。
对于没有离散采样时间的模块,向量的分量是表示采样时间的类型中类型之一的符号值。下表总结了这些类型及其对应的采样时间值。此表还明确了每一种采样时间类型是否为显式,并列出了关联的颜色和注解。因为继承的采样时间是显式的,所以您可以将它指定为 [-1, 0] 或 -1。但是,触发采样时间是隐式的;只有 Simulink 可以分配采样时间 [-1, -1]。(有关颜色和注解的详细信息,请参阅查看采样时间信息。)
指定采样时间信息
| 采样时间类型 | 采样时间 | 注解 | 显式 |
|---|---|---|---|
| 离散 | [Ts, To] | D1,D2,D3,D4,D5,D6,D7,...Di | 是 |
| 连续 | [0, 0] | Cont | 是 |
| 子步中不变 | [0, 1] | FiM | 是 |
| 继承 | [–1, 0] | 不适用 | 是 |
| 常量 | [Inf, 0] | Inf | 是 |
| 可变 | [–2,Tvo] | V1,V2,...Vi | 否 |
| 多速率 | 不适用 | 不适用 | 否 |
| 异步 | [-1, –n] | A1, A2,...Ai | 否 |
| 数据流 | 不适用 | 不适用 | 否 |
| 联合 | [Nan, Nan] | U# | 否 |
| 初始化 | [inf, 1] | IE | 否 |
| 重新初始化 | [Inf, #] | RI# | 否 |
| 重置 | [inf, #] | RE# | 否 |
| 终止 | [Inf, 2] | TE | 否 |
分配给每个模块的颜色取决于其采样时间(相对于模型中的其他采样时间)。也就是说,相同的采样时间在父模型及其引用的模型中可能会分配不同的颜色。(请参阅模型引用。)
例如,假设有一个模型定义了三个采样时间:1、2 和 3。再假设它引用了一个模型,该模型定义了两个采样时间:2 和 3。在这种情况下,以 2 采样率运行的模块在父模型中显示为绿色,在引用的模型中显示为红色。
请注意,Mux 和 Demux 模块只是对运算符进行分组;通过它们传递的信号将保留计时信息。因此,对于从 Demux 模块发出的信号线,如果驱动它们的源模块具有不同的采样时间,它们可能具有不同的颜色。在这种情况下,Mux 和 Demux 模块采用混合颜色编码(黄色),表明它们处理的是多速率信号。
同样,Subsystem 模块如果包含具有不同采样时间的模块,它们也采用混合颜色,因为没有任何一种速率与它们关联。如果一个子系统中的所有模块都按同一种速率运行,Subsystem 模块的颜色将根据该速率来决定。
您可以使用此表中的显式采样时间值,以交互方式或以编程方式为基于模块或基于端口的采样时间指定采样时间。
下面的模型可作为此部分的参考。

在此示例中,将输入正弦波信号的采样时间设置为 0.1。目的是获得 0.2 的输出采样时间。Rate Transition 模块作为零阶保持器。设置采样时间并对模型进行仿真后,生成的模块图如下图所示。(颜色和注解表明这是一个离散模型。)
设置采样时间后的 ex_specify_sample_time

以交互方式指定基于模块的采样时间
要以交互方式设置模块的采样时间,请执行以下操作:
在 Simulink 模型窗口中,双击该模块。模块参数对话框随即打开。
在采样时间字段中输入采样时间。
点击确定。
在采样时间字段中输入 0.1 后,Sine Wave 模块的参数对话框如下图所示。

要在整个模型中指定和检查基于模块的采样时间,请考虑使用模型数据编辑器(在建模选项卡上,点击模型数据编辑器)。在输入端口/输出端口、信号和数据存储选项卡上,将更改视图下拉列表设置为设计并使用采样时间列。有关详细信息,请参阅模型数据编辑器。
以交互方式指定基于端口的采样时间
Rate Transition 模块具有基于端口的采样时间。您可以按照以下步骤,以交互方式设置输出端口的采样时间:
双击 Rate Transition 模块。参数对话框随即打开。
将输出端口采样时间选项的下拉菜单选项保留为指定。
将输出端口采样时间字段中的
-1替换为0.2。
点击确定。
有关“速率转换参数”对话框中的采样时间选项的详细信息,请参阅 Rate Transition 参考页。
以编程方式指定基于模块的采样时间
要以编程方式设置模块的采样时间,请使用 set_param 命令将其 SampleTime 参数设置为所需的采样时间。例如,要将 Specify_Sample_Time 模型中的 Gain 模块的采样时间设置为继承 (-1),请输入以下命令:
set_param('Specify_Sample_Time/Gain','SampleTime','[-1, 0]')与交互式指定方式一样,如果第二个向量分量为零,则您只能输入第一个向量分量。
set_param('Specify_Sample_Time/Gain','SampleTime','-1')以编程方式指定基于端口的采样时间
要将 Rate Transition 模块的输出端口采样时间设置为 0.2,请使用 set_param 命令和参数 OutPortSampleTime:
set_param('Specify_Sample_Time/Rate Transition',...
'OutPortSampleTime', '0.2')以编程方式访问采样时间信息
要访问与某个模型关联的所有采样时间,请使用 API Simulink.BlockDiagram.getSampleTimes。
要访问单个模块的采样时间,请使用 API Simulink.Block.getSampleTimes。
为自定义模块指定采样时间
您可以设计自定义模块,使输入端口和输出端口以不同的采样时间速率运行。有关为 S-Function 指定基于模块和基于端口的采样时间的信息,请参阅Specify S-Function Sample Times。
确定采样时间单位
由于 Simulink 模型的执行不依赖于一组特定的单位,所以您必须为您的应用确定合适的基本时间单位,并相应地设置采样时间值。例如,如果您的基本时间单位是秒,则您可以将采样时间设置为 0.5 来表示 0.5 秒的采样时间。
在仿真开始后更改采样时间
要在仿真开始后更改采样时间,必须先停止仿真,重置 SampleTime 参数,然后重新开始执行。