目录
可以使用仿真数据检查器在仿真期间查看记录的信号数据,也可以使用其他可视化界面查看暂停或停止的仿真的信号记录数据。请参阅决定如何可视化仿真数据。
也可以使用 MATLAB® 命令以编程方式访问信号记录数据。
提示
如果没有看到在模型中标记要记录的信号的记录数据,请检查记录配置。使用信号记录选择器为其记录设置被覆盖了的信号启用记录功能。
信号记录对象
该软件将信号记录数据保存在 Simulink.SimulationData.Dataset 对象中,该对象是一个 MATLAB 工作区变量。信号记录变量的默认名称为 logsout。您可以使用“配置参数”对话框中信号记录参数旁边的文本框来更改变量名称。
可以通过设置数据集信号格式配置参数指定数据集中各个信号的数据是使用 MATLAB timeseries 还是 timetable 元素。
R2016a 之前的版本还支持 ModelDataLogs 格式。要搜索 Dataset 对象中的特定元素,请使用 find 函数。要返回 Dataset 对象元素的名称,请使用 getElementNames 函数。
提示
要对每个指定的 MATLAB timeseries 对象调用函数,
可以使用 Simulink.SimulationData.forEachTimeseries 函数。例如,可以使用此函数轻松地重采样通过记录总线信号获取的 timeseries 对象结构体中的每个元素。
通过编程方式访问数据
访问 Simulink.SimulationData.Dataset 对象及其元素。
仿真模型 sldemo_clutch,该模型对一个旋转离合器系统进行建模。然后,访问包含信号记录数据的 Dataset 对象 sldemo_clutch_output。
sim("sldemo_clutch");
sldemo_clutch_output
sldemo_clutch_output =
Simulink.SimulationData.Dataset 'sldemo_clutch_output' with 10 elements
Name BlockPath
____________ _________________________________
1 [1x1 Signal] Fn sldemo_clutch/Clutch Pedal
2 [1x1 Signal] Tin sldemo_clutch/Engine Torque
3 [1x1 Signal] LockedFlag sldemo_clutch/Friction Mode Logic
4 [1x1 Signal] LockupFlag sldemo_clutch/Friction Mode Logic
5 [1x1 Signal] UnlockFlag sldemo_clutch/Friction Mode Logic
6 [1x1 Signal] Tfmaxk sldemo_clutch/Friction Model
7 [1x1 Signal] Tfmaxs sldemo_clutch/Friction Model
8 [1x1 Signal] ShaftSpeed sldemo_clutch/Locked
9 [1x1 Signal] EngineSpeed sldemo_clutch/Unlocked
10 [1x1 Signal] VehicleSpeed sldemo_clutch/Unlocked
- Use braces { } to access, modify, or add elements using index.
要访问 Dataset 对象元素,可以使用带花括号的索引。例如,使用索引 2 访问信号记录 Dataset 对象的 Tin 元素。
el2 = sldemo_clutch_output{2}
el2 =
Simulink.SimulationData.Signal
Package: Simulink.SimulationData
Properties:
Name: 'Tin'
PropagatedName: ''
BlockPath: [1x1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 1
Values: [1x1 timeseries]
Methods, Superclasses
信号数据作为 timeseries 对象存储在 Simulink.SimulationData.Signal 对象的 Values 属性中。时间值在 timeseries 对象的 Time 属性中。信号值在 Data 属性中。
el2.Values
timeseries
Common Properties:
Name: 'Tin'
Time: [387x1 double]
TimeInfo: tsdata.timemetadata
Data: [387x1 double]
DataInfo: tsdata.datametadata
处理记录的名称中的空格和换行符
此示例显示三个信号,说明信号记录如何处理名称:
-
名称包含空格的信号
-
名称包含换行符的信号
-
未命名信号,该信号源于一个名称包含换行符的模块
对模型进行仿真,然后查看 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 格式记录数据。信号记录使用 Dataset 格式。
如果已经使用 ModelDataLogs 格式记录了信号数据,则可以使用 convertToDataset 函数更新信号记录数据,以使用 Dataset 格式。