Main Content

可视化和访问信号记录数据

可以使用信号记录从仿真中保存数据,而无需向模型中添加模块。有关详细信息,请参阅 使用信号记录保存信号数据。当您使用信号记录来保存仿真数据时,数据会存储在工作区中并流式传输到仿真数据检查器。

您可以使用仿真数据检查器在仿真期间查看记录的信号数据,也可以使用其他可视化界面查看暂停或停止的仿真的信号记录数据。请参阅决定如何可视化仿真数据

您也可以使用 MATLAB® 命令以编程方式访问信号记录数据。

提示

如果您没有看到在模型中标记要记录的信号的信号记录数据,请检查记录配置以确保信号记录处于选中状态。或者,使用信号记录选择器为其记录设置被覆盖了的信号启用记录功能。有关详细信息,请参阅View the Signal Logging ConfigurationOverride Signal Logging Settings

有关记录其他类型的数据和不同记录方法的信息,请参阅保存仿真数据

使用仿真数据检查器查看信号记录数据

要以交互方式直观地检查和比较记录的信号数据,请考虑使用仿真数据检查器。仿真数据检查器允许您在多个子图上查看来自多个仿真和源的数据。您可以在图中进行缩放和平移,使用数据游标仔细检查信号值,并回放数据以分析信号关系。有关详细信息,请参阅Inspect Simulation Data。您也可以使用仿真数据检查器来比较在仿真中记录的或者从工作区或文件中导入的数据和元数据。通过指定信号属性、比较约束和容差,根据您的需要定制比较方案。请参阅Compare Simulation Data

在仿真期间,信号记录数据会自动流式传输到仿真数据检查器,因此您可以在仿真期间查看和分析来自无限仿真时间模型或实时模型的数据。有关详细信息,请参阅View Streaming Data in the Simulation Data Inspector

以编程方式访问工作区数据

您可以通过编程方式访问和分析记录到工作区的数据。默认情况下,记录到工作区的所有仿真数据作为单个 Simulink.SimulationOutput 对象返回到一个变量中,该变量的默认名称为 outSimulationOutput 对象包含完整的仿真元数据和记录到工作区的所有仿真数据。

当您将模型配置为在单个 SimulationOutput 对象中返回所有仿真数据时,信号记录数据将作为 SimulationOutput 对象的属性存储在具有默认变量名称 logsoutSimulink.SimulationData.Dataset 对象中。当模型未配置为返回单一仿真输出时,信号记录数据将返回到工作区的一个 Dataset 对象中,该对象具有默认变量名称 logsout

要访问 Dataset 对象中的特定元素,请使用花括号、find 函数或 get 函数。要返回 Dataset 对象元素的名称,请使用 getElementNames 函数。

提示

要对每个指定的 MATLAB timeseries 对象调用函数,可以使用 Simulink.SimulationData.forEachTimeseries 函数。例如,您可以使用此函数对通过记录总线获取的 timeseries 对象结构体中的每个元素进行重采样。

以编程方式访问 Dataset 对象和元素

打开模型 sldemo_fuelsys,该模型对容错燃油控制系统进行建模。有关该模型的详细信息,请参阅容错燃油控制系统建模

mdl = "sldemo_fuelsys";
open_system(mdl)

在“配置参数”对话框的数据导入/导出窗格中,请注意:

  • 该模型未配置为将仿真输出以单个 Simulink.SimulationOutput 对象的形式返回。

  • 该模型对信号记录数据使用变量名称 sldemo_fuelsys_output

对模型进行仿真。

sim(mdl);

访问包含信号记录数据的 Dataset 对象 sldemo_fuelsys_output

sldemo_fuelsys_output
sldemo_fuelsys_output = 
Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements

                         Name            BlockPath                                
                         ______________  ________________________________________ 
    1  [1x1 Signal]      ''              sldemo_fuelsys/EGO Fault Switch         
    2  [1x1 Signal]      air_fuel_ratio  sldemo_fuelsys/Engine Gas Dynamics      
    3  [1x1 Signal]      ''              sldemo_fuelsys/Engine Speed Fault Switch
    4  [1x1 Signal]      speed           sldemo_fuelsys/Engine_Speed_Selector    
    5  [1x1 Signal]      ''              sldemo_fuelsys/MAP Fault Switch         
    6  [1x1 Signal]      map             sldemo_fuelsys/MAP_Selector             
    7  [1x1 Signal]      ego             sldemo_fuelsys/O2_Voltage_Selector      
    8  [1x1 Signal]      ''              ...o_fuelsys/Throttle Angle Fault Switch
    9  [1x1 Signal]      throttle        sldemo_fuelsys/Throttle_Angle_Selector  
   10  [1x1 Signal]      fuel            sldemo_fuelsys/To Plant                 

  - Use braces { } to access, modify, or add elements using index.

要访问 Dataset 对象元素,可以使用带花括号的索引。例如,使用索引 9 访问信号记录 Dataset 对象的 throttle 元素。

el9 = sldemo_fuelsys_output{9}
el9 = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'throttle'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 timeseries]

信号数据作为 timeseries 对象存储在 Simulink.SimulationData.Signal 对象的 Values 属性中。时间值在 timeseries 对象的 Time 属性中。信号值在 Data 属性中。

el9.Values
  timeseries

  Common Properties:
            Name: 'throttle'
            Time: [204508x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [204508x1 double]
        DataInfo: tsdata.datametadata
el9.Values.Data
ans = 204508×1

   10.0000
   10.0028
   10.0169
   10.0500
   10.1000
   10.1500
   10.2000
   10.2500
   10.2766
   10.2766
      ⋮

访问 Simulink.SimulationOutput 对象中的信号记录数据

打开 vdp 模型,该模型对二阶范德波尔微分方程进行建模。有关该模型的详细信息,请参阅Van der Pol Oscillator

mdl = "vdp";
open_system(mdl)

将来自 x1x2Mu 模块的信号标记为进行记录。然后,对模型进行仿真。

Simulink.sdi.markSignalForStreaming("vdp/x1",1,"on")
Simulink.sdi.markSignalForStreaming("vdp/x2",1,"on")
Simulink.sdi.markSignalForStreaming("vdp/Mu",1,"on")
out = sim("vdp")
out = 
  Simulink.SimulationOutput:
                logsout: [1x1 Simulink.SimulationData.Dataset] 
                   tout: [64x1 double] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

所有记录的数据都返回到一个 Simulink.SimulationOutput 对象中,该对象具有工作区变量名称 out。信号记录数据作为一个 Dataset 对象包含在默认名称为 logsoutSimulationOutput 对象中。您可以使用圆点表示法访问记录的信号数据,也可以使用 getfind SimulationOutput 对象函数。使用圆点表示法访问 logsout

out.logsout
ans = 
Simulink.SimulationData.Dataset 'logsout' with 3 elements

                         Name  BlockPath 
                         ____  _________ 
    1  [1x1 Signal]      ''    vdp/Mu   
    2  [1x1 Signal]      x1    vdp/x1   
    3  [1x1 Signal]      x2    vdp/x2   

  - Use braces { } to access, modify, or add elements using index.

要访问 logsout Dataset 对象的元素,您可以使用花括号,也可以使用 getfind Dataset 对象函数。使用花括号访问 logsout 中的第二个元素。

x1sig = out.logsout{2}
x1sig = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'x1'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 timeseries]

信号数据作为 timeseries 对象存储在 Simulink.SimulationData.Signal 对象的 Values 属性中。时间值在 timeseries 对象的 Time 属性中。信号值在 Data 属性中。

x1sig.Values
  timeseries

  Common Properties:
            Name: 'x1'
            Time: [64x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [64x1 double]
        DataInfo: tsdata.datametadata

另请参阅

模型设置

函数

对象

相关主题