查看和访问信号记录数据
您可以使用仿真数据检查器在仿真期间查看记录的信号数据,也可以使用其他可视化界面查看暂停或停止的仿真的信号记录数据。请参阅决定如何可视化仿真数据。
您也可以使用 MATLAB® 命令以编程方式访问信号记录数据,如本主题所述。
提示
如果您没有看到在模型中标记要记录的信号的记录数据,请检查记录配置。使用信号记录选择器为其记录设置被覆盖了的信号启用记录功能。有关详细信息,请参阅View the Signal Logging Configuration和Override 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
的默认设置。有关 timeseries
和 timetable
格式数据的详细信息,请参阅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
另请参阅
get
| find
| getElementNames
| numElements
| setElement
| Simulink.SimulationData.Dataset
| Simulink.SimulationData.Signal
| Simulink.SimulationData.BlockPath
| Simulink.SimulationData.forEachTimeseries