Main Content

查看和访问信号记录数据

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

您也可以使用 MATLAB® 命令以编程方式访问信号记录数据,如本主题所述。

提示

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

信号记录对象

Simulink® 将信号记录数据保存在 Simulink.SimulationData.Dataset 对象中,该对象是一个 MATLAB 工作区变量。信号记录变量的默认名称为 logsout。您可以更改此变量名称。有关详细信息,请参阅为信号记录数据指定名称

您可以指定数据集中各个信号的数据是使用 MATLAB timeseries 还是 timetable 元素。设置数据集信号格式配置参数(有关详细信息,请参阅Dataset signal format)。

R2016a 之前的版本还支持 ModelDataLogs 格式。有关详细信息,请参阅迁移使用旧版 ModelDataLogs API 的脚本

通过编程方式访问数据

您可以使用 Simulink.SimulationData.Dataset API 通过编程方式访问信号记录数据。要访问 Dataset 对象元素,请使用带花括号的索引。例如,您可以使用索引 1 访问 topOut 信号记录 Dataset 对象的第一个元素。此示例基于使用数据集元素的 timeseries 的默认设置。有关 timeseriestimetable 格式数据的详细信息,请参阅Dataset signal format

open_system(docpath(fullfile(docroot,'toolbox','simulink',...
'examples','ex_bus_logging')));
open_system(docpath(fullfile(docroot,'toolbox','simulink',...
'examples','ex_mdlref_counter_bus')));
sim('ex_bus_logging')
topOut
Simulink.SimulationData.Dataset 'topOut' with 4 elements

                         Name          BlockPath                                
                         ____________  ________________________________________ 
    1  [1x1 Signal]      COUNTERBUS    ex_bus_logging/COUNTERBUSCreator        
    2  [1x1 Signal]      OUTPUTBUS     ex_bus_logging/CounterA                 
    3  [1x1 Signal]      INCREMENTBUS  ex_bus_logging/IncrementBusCreator      
    4  [1x1 Signal]      inner_bus     ...erA|ex_mdlref_counter_bus/Bus Creator

  - Use braces { } to access, modify, or add elements using index.
element1 = topOut{1}
element1 = 

  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

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


  Methods, Superclasses
element1.Values
ans = 

      data: [1x1 timeseries]
    limits: [1x1 struct]

要搜索 Dataset 对象中的特定元素,请使用 find 方法。要返回 Dataset 对象元素的名称,请使用 getNames 方法。

提示

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

处理记录的名称中的空格和换行符

此示例显示三个信号,说明信号记录如何处理名称:

  • 名称包含空格的信号

  • 名称包含换行符的信号

  • 未命名信号,该信号源于一个名称包含换行符的模块

对模型进行仿真,然后查看 logsout 变量中的信号记录结果。您可以看到 Dataset 对象中的名称使用空格(其中信号名称包含空格)和换行符(其中名称包含换行符)。未命名信号使用空字符数组作为其名称。

logsout
logsout = 

Simulink.SimulationData.Dataset 'logsout' with 3 elements

                         Name  BlockPath                              
                         ____  ______________________________________ 
    1  [1x1 Signal]      x y   ex_signal_names_with_spaces/Sine Wave 
    2  [1x1 Signal]      a b   ex_signal_names_with_spaces/Sine Wave1
    3  [1x1 Signal]      ''    ex_signal_names_with_spaces/Sine Wave2

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

您可以通过名称或索引访问名称包含空格的信号。您只需在传递给 getElement 函数的名称中包含空格即可。要访问其名称包含换行符的信号,请使用索引。

>> logsout{2}
ans = 

  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'a↵b'
    PropagatedName: ''
         BlockPath: [1×1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1×1 timeseries]

访问 ModelDataLogs 格式的记录信号数据

在 R2016a 之前,您可以使用 ModelDataLogs 格式记录信号。从 R2016a 开始,您不能再以 “ModelDataLogs” 格式记录数据。信号记录将使用“数据集”格式。

但是,您可以使用以前的版本中以 “ModelDataLogs” 格式记录的数据。

有关详细信息,请参阅 Simulink.ModelDataLogs

另请参阅

| | | | | | | |

相关主题