Main Content

常见的示波器模块任务

要可视化随时间推移的仿真结果,请使用 Scope 模块或 Time Scope (DSP System Toolbox) 模块

将多个信号连接到一个示波器

要将多个信号连接到一个示波器,请将其他信号拖放到 Scope 模块。系统将自动创建一个额外的端口。

Animated GIF of automatically created input ports on a scope block

要指定输入端口的数量,请执行下列操作:

  1. 打开一个示波器窗口。

  2. 从工具栏中,选择文件 > 输入端口数目 > 更多

  3. 输入输入端口的数量,最多 96 个。

来自非虚拟总线和总线数组的信号

您可以将来自非虚拟总线和总线数组的信号连接到 Scope 模块。要显示总线信号,请使用普通或加速仿真模式。Scope 模块按照元素在总线中出现的顺序从上到下显示每个总线元素信号。嵌套的总线元素以平铺方式显示。例如,在以下模型中,nestedBus 信号具有 constsubSignalstep 信号作为元素。subSignal 子总线具有 chirpsine 信号作为其总线元素。在 Scope 模块中,subSignal 总线的两个元素显示在 conststep 信号之间。

Simulink model of a scope connected to the nestedBus, const, subSignal, chirp, sine, and step signals.

Scope window showing the four signals and their names in the Scope legend: nestedBus.const, nestedBus.subSignal.chirp, nestedBus.subSignal.sine, nestedBus.step.

使用 Scope 模块保存仿真数据

此示例说明如何使用 Scope 模块将信号保存到 MATLAB 工作区。您可以对 Scope 或 Time Scope 模块使用下列步骤。要保存来自浮动示波器或波形查看器的数据,请参阅从 Floating Scope 保存仿真数据

使用 vdp 模型,打开工作区的数据记录。您可以按照以下命令进行操作,或在 Scope 窗口中,点击“配置属性”按钮并导航到“记录”选项卡,打开将数据记录到工作区

vdp
scopeConfig = get_param('vdp/Scope','ScopeConfiguration');
scopeConfig.DataLogging = true;
scopeConfig.DataLoggingSaveFormat = 'Dataset';
out = sim('vdp');

在 MATLAB 命令行窗口中,查看从 out.ScopeData 结构体记录的数据。

x1_data = out.ScopeData{1}.Values.Data(:,1);
x1_time = out.ScopeData{1}.Values.Time;
plot(x1_time,x1_data)

运行时暂停显示

当仿真在后台运行时,使用 Simulink 快照可暂停示波器画面显示。

  1. 打开一个示波器窗口并开始仿真。

  2. 选择仿真 > Simulink 快照

    左下角的示波器窗口状态是冻结,但仿真继续在后台运行。

  3. 与暂停的显示进行交互。例如,使用测量值、复制示波器图像或进行缩放。

  4. 要解冻画面,请再次选择仿真 > Simulink 快照

复制示波器图像

此示例使用模型 vdp 说明如何复制和粘贴示波器图像。

  1. 向您的模型添加一个 Scope 模块。

  2. 将信号连接到示波器端口。请参阅将多个信号连接到一个示波器。例如,在 vdp 模型中,将信号 x1x2 连接到示波器。

  3. 打开示波器窗口并运行仿真。

    Scope window displaying the simulation results of the vdp model

  4. 选择文件 > 复制到剪贴板

  5. 将图像粘贴到文档中。

    vdp scope visualization with a white background for printing

    默认情况下,复制到剪贴板以白色背景和可见线条形式保存波形的可打印版本。如果要粘贴与所显示内容完全一样的波形图,请选择视图 > 样式,然后选中保留复制到剪贴板的颜色复选框。

绘制信号线组

此示例说明示波器如何绘制信号数组。

在此简单模型中,Sine Wave 模块连接到示波器模块。Sine Wave 模块输出幅值为 [10, 20; 30 40] 的四个信号。示波器以矩阵顺序 (1,1)、(2,1)、(1,2)、(2,2) 分别显示数组中的每个正弦波。

引用模型中的示波器

此示例说明引用模型中示波器的行为。当您在引用模型中使用示波器时,在示波器中看到的输出会因仿真位置的不同而异,具体取决于您是从顶层模型开始仿真,还是从引用模型的示波器开始仿真。

注意

示波器窗口显示最近打开的顶层模型的仿真结果。示波器模块和查看器中的播放控制项对包含该模块或查看器的模型进行仿真。

此示例将 sldemo_mdlref_counter 模型用作顶层模型,也用作从 sldemo_mdlref_basic 模型的引用模型。

打开模型:

openExample('sldemo_mdlref_basic')

双击 CounterA 模块。sldemo_mdlref_counter 模型作为引用模型打开,画布上的路径导航对此进行指示。

sldemo_mdlref_counter model with the breadcrumb highlighted to show you are in the CounterA referenced model block from the sldemo_mdlref_basic model.

使用主运行按钮运行仿真,然后打开 ScopeA 示波器。示波器可视化来自整个模型的数据。

Scope window with model simulation results

如果您特别希望单独可视化一个引用模型,请将该模型作为顶层模型打开。在此示例中,右键点击 CounterA 模块,并选择“作为顶层模型打开”。模型在另一个窗口中打开,路径导航仅显示引用模型名称。

sldemo_mdlref_counter model with the breadcrumb highlighted to show you are in a non-referenced version of the model

当您从 Simulink 窗口或示波器窗口运行仿真时,示波器会可视化模型,但不包括对其他模型的任何引用。在这种情况下,模型输入始终为零。

Scope window showing a constant zero line

使能子系统中的示波器

将示波器放置在 Enabled Subsystem 模块中时,示波器的行为因具体仿真模式的不同而有所不同:

  • 普通模式 - 当子系统启用时示波器绘制数据。当子系统禁用时,显示的绘图会显示缺口。

    Sample scope window with gaps where the subsystem is disabled

  • 外部、加速和快速加速模式 - 当子系统启用时示波器绘制数据。显示画面用直线连接缺口部分。

    Sample scope window with straight lines where the subsystem is disabled

修改示波器的 x

此示例说明如何使用时间跨度时间显示偏移量参数修改 Scope 模块的 x 轴值。时间跨度参数修改显示的仿真时间量,并偏移 x 轴标签。时间显示偏移量参数修改 x 轴上使用的标签。

您也可以将此过程用于 Time Scope 模块、Floating Scope 模块或波形查看器。

打开模型并运行仿真以查看原始示波器输出。仿真运行 10 个时间步,每个时间步递增 1。

model = 'ModifyScopeXAxis';
open_system(model);
sim(model);
open_system([model,'/Scope']);

修改显示的时间跨度

时间跨度参数修改为 2。您可以按照以下命令进行操作,或在 Scope 窗口中,点击“配置属性”按钮并导航到“时间”选项卡。

scopeConfig = get_param([model,'/Scope'],'ScopeConfiguration');
scopeConfig.TimeSpan = '2';
sim(model);
open_system([model,'/Scope']);

示波器的 x 轴现在只显示最后两个时间步,并偏移 x 轴标签以显示 0-2。底部工具栏显示 x 轴的偏移量为 8。此偏移量不同于时间显示偏移量值。

如果您不想在仿真开始时将信号初始化可视化或其他启动任务,则时间跨度参数非常有用。如果您点击 x 轴范围按钮,您仍可以看到完整的仿真时间跨度。

偏移 x 轴标签

时间显示偏移量参数修改为 5。再次使用以下命令,或在 Scope 窗口中,点击“配置属性”按钮并导航到“时间”选项卡。

scopeConfig.TimeDisplayOffset = '5';
sim(model);
open_system([model,'/Scope']);

现在,示波器中显示相同的时间跨度 2,但 x 轴标签具有偏移量 5,从 5 开始,到 7 结束。如果您点击 x 轴范围按钮,x 轴标签仍然从 5 开始。

在波形视图上显示信号单位

您可以使用 InportOutport 模块在模型组件边界(SubsystemModel 模块)上指定信号单位。请参阅 Simulink 模型中的单位指定。然后,您可以将 Scope 模块连接到 Outport 模块或连接到源自 Outport 模块的信号。在此示例中,Out1 模块的单位属性设置为 m/s

Sample model with units specified

在波形视图上显示单位

  1. 在 Scope 窗口的工具栏中,选择“配置属性”按钮

  2. 在“配置属性”中:“范围”对话框中,选择显示选项卡。

  3. Y 标签框中,输入 y 轴的标题,然后输入 (%<SignalUnits>)。例如,输入

    Velocity (%<SignalUnits>)
    
  4. 点击确定应用

    信号单位在 y 轴标签中显示为米/秒 (m/s),在“游标测量”面板中显示为毫米/秒 (mm/s)。

    Scope window with the units displayed in the cursor measurements and y-axis label.

从 Simulink 工具条中,您还可以选择调试 > 叠加信息 > 单位。您不必在 Y 标签属性中输入 (%<SignalUnits>)

以编程方式在波形视图上显示单位

  1. 获取示波器属性。在命令行窗口中,输入

    load_system('my_model')
    s = get_param('my_model/Scope','ScopeConfiguration');
    
  2. 在第一个显示画面中添加 y 轴标签。

    s.ActiveDisplay = 1
    s.YLabel = 'Velocity (%<SignalUnits>)';
    

您还可以将模型参数 ShowPortUnits 设置为 'on'。这样,模型中的所有示波器(无论在 Y 标签属性中是否有 (%<SignalUnits>))都会在显示画面上显示单位。

load_system('my_model')
get_param('my_model','ShowPortUnits')
ans =
off
set_param('my_model', 'ShowPortUnits','on')
ans =
on

根据记录的数据对象确定单位

当使用“数据集”格式保存来自示波器的仿真数据时,您可以在时间序列对象的 DataInfo 字段中找到单位信息。

注意

示波器对信号单位的支持仅适用于“数据集”记录格式,不适用于“数组”、“结构体”和“带时间的结构体”等旧记录格式。

  1. 在 Scope 窗口的工具栏中,选择“配置属性”按钮

  2. 在“配置属性”窗口中,选择记录选项卡。

  3. 选中将数据记录到工作区复选框。在文本框中,输入用于保存仿真数据的变量名称。例如,输入 ScopeData

  4. 从 Scope 窗口工具栏中,选择运行按钮

  5. 在命令行窗口中,输入

    ScopeData.getElement(1).Values.DataInfo
    Package: tsdata
    Common Properties:
                 Units: m/s (Simulink.SimulationData.Unit)
         Interpolation: linear (tsdata.interpolation)
    

将具有不同单位的信号连接到示波器

当一个示波器上有多个端口时,Simulink® 会确保每个端口接收仅使用一种单位的数据。如果尝试合并具有不同单位的信号(例如,通过使用 Bus Creator 模块),Simulink 将返回错误。

示波器根据端口和显示画面的数量显示单位:

  • 端口数等于显示画面数 - 以一一对应的方式将端口分配到显示画面,并在 y 轴标签上显示端口信号的单位。

  • 大于显示画面数 - 先以一一对应的方式将端口分配到显示画面,将其余的信号分配给最后一个显示画面。最后一个 y 轴标签上以逗号分隔列表形式显示不同单位。

选择显示画面的数量和布局

  1. 在 Scope 窗口中,选择“配置属性”按钮

  2. 在“配置属性”对话框中,选择常设选项卡,然后选择布局按钮。

  3. 选择所需显示画面的数量和布局。

    您可以在一个行或一个列中选择四个以上的显示画面。在布局中点击,然后拖动鼠标指针扩展布局,最多可扩展为 16 行 16 列。

    Animated GIF of modifying the layout of the scope window

  4. 点击以将所选布局应用于 Scope 窗口。

MATLAB 桌面上停靠和取消停靠 Scope 窗口

  1. 在 Scope 窗口的右上角,点击“停靠 Scope”按钮。

    Scope 窗口位于 MATLAB® 桌面的命令行窗口上方。

  2. 点击“显示 Scope 操作”按钮,然后点击取消停靠 Scope

    Undock scope value in the dropdown menu

另请参阅

| |

相关主题