常见的示波器模块任务
要可视化随时间推移的仿真结果,请使用 Scope 模块或 Time Scope (DSP System Toolbox) 模块
将多个信号连接到示波器
要将多个信号连接到一个示波器,请将其他信号拖放到 Scope 模块。系统将自动创建一个额外的端口。
要指定输入端口的数量,请执行下列操作:
打开一个示波器窗口。
在工具栏中,选择示波器 > 设置。
在常规下的输入的数目框中,输入输入端口的数目,最多 96 个。
来自非虚拟总线和总线数组的信号
您可以将来自非虚拟总线和总线数组的信号连接到 Scope 模块。要显示总线信号,请使用普通或加速仿真模式。Scope 模块按照元素在总线中出现的顺序从上到下显示每个总线元素。嵌套的总线元素被展平。例如,在此模型中,Scope 模块连接到名为 TopBus
的总线,该总线包含元素 NestedBus
和 Step
。NestedBus
连接到用于创建 TopBus
的 Bus Creator 模块的第一个端口,而 Step
连接到第二个端口。NestedBus
包含 Chirp
和 Sine
信号,其中 Chirp
连接到用于形成 NestedBus
的 Bus Creator 模块中 Sine
上方的端口。在 Scope 模块中,NestedBus
中的两个信号在图例中显示在 Step
信号上方。
使用 Scope 模块保存仿真数据
此示例说明如何使用 Scope 模块将信号保存到 MATLAB 工作区。您可以对 Scope 或 Time Scope 模块使用下列步骤。要保存来自浮动示波器或波形查看器的数据,请参阅从 Floating Scope 保存仿真数据。
vdp
模型表示二阶范德波尔 (VDP) 微分方程。有关该模型的详细信息,请参阅范德波尔振荡器。
使用 Scope 模块将数据记录到工作区:
选择示波器 > 设置。
在记录下,选择将数据记录到工作区。
运行仿真以将示波器数据记录到工作区。
您也可以通过编程方式将在 Scope 模块中绘制的数据以 Dataset
格式记录到工作区。
mdl = "vdp"; open_system(mdl); scopeConfig = get_param("vdp/Scope","ScopeConfiguration"); scopeConfig.DataLogging = true; scopeConfig.DataLoggingSaveFormat = "Dataset"; out = sim(mdl);
默认情况下,记录到工作区的所有仿真数据以名为 out
的单个 Simulink.SimulationOutput
对象形式返回。记录的示波器数据作为属性保存在 SimulationOutput
对象内,默认变量名称为 ScopeData
。要访问数据,请使用圆点表示法。
out.ScopeData
ans = Simulink.SimulationData.Dataset 'ScopeData' with 2 elements Name BlockPath ____ _________ 1 [1x1 Signal] x1 vdp/Scope 2 [1x1 Signal] x2 vdp/Scope - Use braces { } to access, modify, or add elements using index.
您也可以在 MATLAB 图窗中绘制工作区中的数据。例如,绘制 x1
信号。
x1_data = out.ScopeData{1}.Values.Data(:,1); x1_time = out.ScopeData{1}.Values.Time; plot(x1_time,x1_data)
运行时暂停显示
当仿真在后台运行时,使用快照按钮可暂停示波器画面显示。
打开一个示波器窗口并开始仿真。
选择示波器 > 快照。
左下角的示波器窗口状态是冻结,但仿真继续在后台运行。
与暂停的显示进行交互。例如,使用测量值、复制示波器图像或进行缩放。
要解冻显示画面,请再次选择示波器 > 快照。
复制示波器图像
您可以将示波器图像复制并粘贴到文档中。
打开示波器窗口并运行仿真。
选择示波器 > 复制显示画面。
将图像粘贴到文档中。
默认情况下,复制显示画面以白色背景和可见线条形式保存波形的可打印版本。如果要粘贴与所显示内容完全一样的示波器图,请选择示波器 > 设置。然后,在坐标区样式下,选择为副本保留颜色。
修改示波器的 x 轴
此示例说明如何使用时间跨度和时间显示偏移量参数修改 Scope 模块的 x 轴值。时间跨度参数修改显示的仿真时间量,并偏移 x 轴标签。时间显示偏移量参数修改 x 轴上使用的标签。
您也可以将此过程用于 Time Scope 模块、Floating Scope 模块或波形查看器。
打开模型并运行仿真以查看原始示波器输出。仿真运行 10 个时间步,每个时间步递增 1。
model = "ModifyScopeXAxis";
sim(model);
修改显示的时间跨度
将示波器中显示的时间跨度更改为 2。在示波器窗口中,选择示波器 > 设置。然后,在时间下,将时间跨度设置为 2
。
您也可以通过编程方式设置示波器的时间跨度。
scopeConfig = get_param(model+"/Scope","ScopeConfiguration"); scopeConfig.TimeSpan = "2"; sim(model);
示波器的 x 轴现在只显示最后两个时间步,并偏移 x 轴标签以显示 0 到 2。底部工具栏显示 x 轴的偏移量为 8。此偏移量不同于时间显示偏移量值。
如果您不想在仿真开始时将信号初始化或其他启动任务可视化,则可使用时间跨度参数。
偏移 x 轴标签
更改 x 轴上的标签以显示 5 和 7 之间的值。选择示波器 > 设置。然后,在时间下,将时间显示偏移量设置为 5
。
您也可以通过编程方式更改显示的 x 轴标签。
scopeConfig.TimeDisplayOffset = "5";
sim(model);
现在,示波器中显示相同的时间跨度 2,但 x 轴标签具有偏移量 5,从 5 开始,到 7 结束。
选择显示画面的数量和布局
在示波器窗口中,选择示波器 > 显示网格。
选择所需显示画面的数量和布局。您最多可以选择 5×5 网格。
点击以将所选布局应用于 Scope 窗口。
在 MATLAB 桌面上停靠和取消停靠 Scope 窗口
要停靠示波器,请执行以下操作:
在示波器窗口中,选择示波器选项卡。
要停靠示波器,请点击停靠。您也可以从下拉菜单中点击停靠示波器以停靠单个示波器。要停靠所有打开的示波器,请选择停靠所有示波器。
当示波器停靠后,示波器窗口会放置在示波器容器中。示波器容器是单一窗口,可用于停靠一个 Simulink 模型的多个示波器窗口。
要取消停靠示波器,请执行以下操作:
在示波器容器中,选择主页选项卡。
点击取消停靠。
在示波器显示画面中显示信号单位
您可以使用 Inport 和 Outport 模块在模型组件边界(Subsystem 和 Model 模块)上指定信号单位。请参阅 Simulink 模型中的单位指定。然后,您可以将 Scope 模块连接到 Outport 模块或连接到源自 Outport 模块的信号。在此示例中,Out1 模块的单位属性设置为 m/s
。
在示波器显示画面中显示单位
在示波器窗口工具栏中,选择示波器 > 设置。
在 Y 轴下,在 Y 轴标签框中,输入 y 轴的标题,后跟
(%<SignalUnits>)
。例如,键入Velocity (%<SignalUnits>)
。信号单位显示在 y 轴标签上,单位为米/秒 (
m/s
)。当您将鼠标悬停在数据游标上时,示波器也会显示单位。
通过编程方式在示波器显示画面中显示单位
获取示波器属性。在命令行窗口中,输入以下命令。
load_system("my_model") s = get_param("my_model/Scope","ScopeConfiguration");
在第一个显示画面中添加 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
根据记录的数据对象确定单位
当使用数据集格式保存来自示波器的仿真数据时,您可以在记录的数据对象中找到单位信息。
注意
示波器对信号单位的支持仅适用于数据集记录格式,不适用于数组、结构体和带时间的结构体等旧记录格式。
将 Scope 模块设置为记录数据。选择示波器 > 设置。然后,在记录下,选择将数据记录到工作区。
运行仿真。
当模型配置为将结果作为单一仿真输出返回时,示波器数据将保存为
SimulationOutput
对象的属性。out.ScopeData.getElement(1).Values.DataInfo
Package: tsdata Common Properties: Units: m/s (Simulink.SimulationData.Unit) Interpolation: linear (tsdata.interpolation)
当模型未配置为将结果作为单一仿真输出返回时,示波器数据将保存为
Simulink.SimulationData.Dataset
对象。ScopeData.getElement(1).Values.DataInfo
Package: tsdata Common Properties: Units: m/s (Simulink.SimulationData.Unit) Interpolation: linear (tsdata.interpolation)
将具有不同单位的信号连接到示波器
当一个示波器有多个端口时,每个端口接收仅使用一种单位的数据。如果尝试合并具有不同单位的信号(例如,通过使用 Bus Creator 模块),软件将返回错误。
示波器根据端口和显示画面的数量显示单位:
端口数等于显示画面数 - 以一一对应的方式将端口分配到显示画面,并在 y 轴标签上显示端口信号的单位。
大于显示画面数 - 先以一一对应的方式将端口分配到显示画面,将其余的信号分配给最后一个显示画面。最后一个 y 轴标签上以逗号分隔列表形式显示不同单位。
绘制信号线组
此示例说明示波器如何绘制信号数组。
在此简单模型中,Sine Wave 模块连接到示波器模块。Sine Wave 模块输出振幅为 [10, 20; 30 40]
的四个信号。Scope 模块以矩阵顺序 (1,1)、(2,1)、(1,2)、(2,2) 分别显示数组中的每个正弦波。
引用模型中的示波器
此示例说明引用模型中示波器的行为。当您在引用模型中使用示波器时,来自模型层次结构的信息产生的输出结果可能与将包含示波器的模型作为顶层模型运行时不同。
注意
示波器窗口显示最近打开的顶层模型的仿真结果。示波器模块和查看器中的回放控制项对包含该模块或查看器的模型进行仿真。
此示例将 sldemo_mdlref_counter
模型用作顶层模型,也用作 sldemo_mdlref_basic
模型中的引用模型。
打开模型。
openExample("simulink/FindMdlrefsFindReferencedModelsinModelReferenceHierarchyExample","supportingfile","sldemo_mdlref_basic")
双击名为 CounterA
的 Model 模块。sldemo_mdlref_counter
模型作为引用模型打开,您可以在资源管理器栏中看到。
运行仿真。然后,打开名为 ScopeA
的 Scope 模块。示波器可视化来自整个模型的数据。
如果您特别希望单独可视化一个引用模型,请将该模型作为顶层模型打开。在 sldemo_mdlref_basic
模型中,右键点击 CounterA
Model 模块,然后选择作为顶层模型打开。模型在另一个窗口中打开,示例栏仅显示 sldemo_mdlref_counter
模型名称。
当您从 Simulink 窗口或示波器窗口运行仿真时,示波器会可视化模型,但不包括对其他模型的任何引用。在这种情况下,模型输入始终为零。
使能子系统中的示波器
将示波器放置在 Enabled Subsystem 模块中时,示波器的行为因具体仿真模式的不同而有所不同:
普通模式 - 当子系统启用时示波器绘制数据。当子系统禁用时,显示的绘图会显示缺口。
外部、加速和快速加速模式 - 当子系统启用时示波器绘制数据。显示画面用直线连接缺口部分。
另请参阅
Scope | Floating Scope and Scope Viewer