Simulink.SimulationOutput
访问仿真输出和元数据
说明
Simulink.SimulationOutput 对象为与一个仿真相关联的所有数据提供单一访问点。对象的属性包含从仿真记录的所有数据和完整的仿真元数据,包括有关模型配置、仿真计时以及仿真期间出现的错误或警告的信息。
在单个对象中访问仿真结果有助于将仿真结果与其他工作区数据区分开来,并使管理来自多个仿真的数据变得更加容易。对于在仿真期间创建的每个记录变量,Simulink.SimulationOutput 对象都有一个对应的属性。例如,当您使用信号记录来记录数据时,SimulationOutput 对象包含一个默认名称为 logsout 的属性,该属性包含记录的信号数据。要在单个 SimulationOutput 对象中返回仿真结果时访问记录的数据,请使用圆点表示法。
out.logsout
创建对象
仿真模型会在以下任何情况下创建一个或多个 Simulink.SimulationOutput 对象:
启用单一仿真输出参数。
默认情况下,创建新模型时,单一仿真输出参数处于启用状态。您可以使用“配置参数”对话框来启用该参数。在建模选项卡上的设置下,点击模型设置。然后,在“配置参数”对话框中,选择数据导入/导出,并选择单一仿真输出。
您可以使用一个或多个
Simulink.SimulationInput对象以编程方式对模型进行仿真。使用
sim、parsim和batchsim函数或使用Simulation对象运行仿真时,您可以使用SimulationInput对象配置仿真。使用
sim函数语法仿真模型,该语法将结果以单个仿真输出形式返回。有关详细信息,请参阅
sim。您可以使用多个仿真窗格运行一组仿真。
属性
记录的数据属性
对于在仿真中创建的每个记录变量,Simulink.SimulationOutput 对象包含一个对应的属性。该属性的名称与您为记录变量指定的名称匹配。例如,当您记录输出数据并使用默认变量名称 yout 时,Simulink.SimulationOutput 对象具有包含记录的输出数据的属性 yout。
使用“配置参数”对话框的数据导入/导出窗格或通过向您的模型添加记录模块(如 To Workspace 模块),配置要记录的数据和变量名称。下表总结了几种常见记录方法的默认属性名称。
| 默认属性名称 | 记录源 | 值 |
|---|---|---|
tout | 时间记录 | 使用保存格式模型配置参数指定的格式。 |
yout | 输出记录 | 使用保存格式模型配置参数指定的格式。 |
xout | 状态记录 | 使用保存格式模型配置参数指定的格式。 |
xFinal | 最终状态记录 | 当您选择保存最终工作点时,最终状态将保存为 当保存最终工作点未处于选中状态时,将根据保存格式模型配置参数的值保存最终状态。 有关详细信息,请参阅Save Block States and Simulation Operating Points。 |
logsout | 信号记录 | Simulink.SimulationData.Dataset 对象。 |
dsmout | 数据存储记录 | Simulink.SimulationData.Dataset 对象。 |
simout | To Workspace 模块 | 使用保存格式模块参数指定的格式。 |
recordout | Record 模块 | Simulink.SimulationData.Dataset 对象。 |
ScopeData | Scope 模块 | 由保存格式模块参数指定的格式。 |
使用 To File 模块、Record 模块或将数据记录到文件参数记录到文件的数据不会捕获为 Simulink.SimulationOutput 对象的属性。
自定义属性
您可以向 Simulink.SimulationOutput 对象添加属性来存储附加数据或元数据。例如,当您使用 parsim 或 batchsim 运行并行仿真时,您可以在 Simulink.SimulationOutput 对象上定义属性,以便将数据从并行工作单元发送到客户端。
向 Simulink.SimulationOutput 对象添加属性类似于在结构体中定义字段。例如,以下代码将值为 1 的属性 NewProperty 添加到 Simulink.SimulationOutput 对象 simout。
simout.NewProperty = 1;
仿真元数据属性
此 属性 为只读。
关于仿真的信息,以 Simulink.SimulationMetadata 对象形式返回。SimulationMetadata 对象包含:
关于模型的详细信息,包括模型版本和用于创建模型的软件版本
仿真期间出现的警告和错误
计时信息,例如仿真的初始化和执行阶段所花费的时间量
此 属性 为只读。
仿真发出的错误消息,以字符向量形式返回。如果仿真运行时没有出现错误,则 ErrorMessage 属性为空。
提示
当您使用 sim 函数运行仿真时,请将 CaptureErrors 名称-值参量指定为 "on",以在 ErrorMessage 属性中捕获错误消息。默认情况下,系统会在 MATLAB® 命令行窗口中报告错误,而不会在 Simulink.SimulationOutput 对象中捕获。
对象函数
find | 查询和访问 Simulink.SimulationOutput 对象的属性 |
get | 访问 Simulink.SimulationOutput 对象中的仿真结果 |
plot | 在仿真数据检查器中绘制数据 |
removeProperty | Remove property from Simulink.SimulationOutput
object |
setUserData | Add data to metadata in Simulink.SimulationOutput
object |
setUserString | Add string to metadata in Simulink.SimulationOutput
object |
who | Get names of editable properties on Simulink.SimulationOutput
object |
示例
此示例中的模型使用几种不同记录方法记录数据。
Sine Wave 模块的输出使用信号记录进行记录。
Gain 模块的输出使用 To Workspace 模块进行记录。
Chirp Signal 模块的输出连接到一个 Scope 模块,该 Scope 模块配置为将数据记录到工作区。
Gain、Chirp Signal 和 Square Wave Generator 模块的输出使用 Record 模块记录。
Square Wave Generator 模块的输出使用输出记录进行记录。
该模型还配置为记录时间数据。
打开模型。
mdl = "LoggingBlocks_NotSSO";
open_system(mdl)
访问在单一仿真输出中未返回的数据
模型 LoggingBlocks_NotSSO 在禁用单一仿真输出参数的状态下保存。在某些工作流中,仿真模型不会以单个 Simulink.SimulationOutput 对象形式返回仿真结果。
要仿真该模型,请点击运行。或者,在命令行窗口中发出 start 仿真命令。
set_param(mdl,SimulationCommand="start")
当仿真不以单个输出形式返回结果时,软件会将来自每种记录方法和记录模块的数据保存到工作区中的一个单独变量。例如,为顶层输出端口记录的数据会使用默认变量名称 yout 保存到工作区。

您可以使用与记录方法相关联的变量的名称以编程方式访问记录的数据。例如,要访问使用 Record 模块记录的数据,请在命令行窗口中键入 recordout。

由于单一仿真输出参数被禁用,如果您通过使用 sim 函数的模型名称语法以编程方式仿真模型而不指定任何名称-值参量,仿真将仅返回时间向量。
out = sim(mdl)
out = 51×1
0
0.2000
0.4000
0.6000
0.8000
1.0000
1.2000
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
⋮
访问作为单一仿真输出返回的数据
要将仿真结果作为单一输出返回,请在“配置参数”对话框中选择单一仿真输出。
在 Simulink 工具条的建模选项卡上,点击模型设置。
在“配置参数”对话框中,选择数据导入/导出窗格。
选择单一仿真输出。
点击确定。
或者,使用 set_param 函数以编程方式启用单一仿真输出参数。
set_param(mdl,ReturnWorkspaceOutputs="on")当您启用单一仿真输出参数时,所有仿真都将记录到工作区的数据作为单个 Simulink.SimulationOutput 对象返回,默认变量名称为 out。
为了更好地了解在单个 SimulationOutput 对象中返回仿真数据对工作区的影响,请从工作区中清除包含从先前仿真记录数据的变量。
clear logsout recordout ScopeData simout tout yout
再次对模型进行仿真。点击运行或以编程方式使用 sim 函数仿真模型。
out = sim(mdl);
现在,名为 out 的单个变量包含记录到工作区的所有仿真数据。

对于仿真中使用的每种记录方法和记录模块,Simulink.SimulationOutput 对象 out 都包含一个对应的属性。
out
out =
Simulink.SimulationOutput:
ScopeData: [1x1 Simulink.SimulationData.Dataset]
logsout: [1x1 Simulink.SimulationData.Dataset]
recordout: [1x1 Simulink.SimulationData.Dataset]
simout: [1x1 timeseries]
tout: [51x1 double]
yout: [1x1 Simulink.SimulationData.Dataset]
SimulationMetadata: [1x1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]
您可以使用圆点表示法来访问记录的数据。例如,使用 Record 模块访问记录的数据。
out.recordout
ans =
Simulink.SimulationData.Dataset 'Run 2: LoggingBlocks_NotSSO' with 3 elements
Name PropagatedName BlockPath
___________ ______________ ___________________________
1 [1x1 Signal] Big Sine Big Sine LoggingBlocks_NotSSO/Record
2 [1x1 Signal] Chirp Chirp LoggingBlocks_NotSSO/Record
3 [1x1 Signal] Square Wave Square Wave LoggingBlocks_NotSSO/Record
- Use braces { } to access, modify, or add elements using index.
要访问 Dataset 对象的元素,请使用花括号。例如,使用索引 1 访问信号 Big Sine。
out.recordout{1}ans =
Simulink.SimulationData.Signal
Package: Simulink.SimulationData
Properties:
Name: 'Big Sine'
PropagatedName: 'Big Sine'
BlockPath: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 1
Values: [1×1 timeseries]
Methods, Superclasses
信号数据作为 timeseries 对象存储在 Signal 对象的 Values 属性中。
out.recordout{1}.Values timeseries
Common Properties:
Name: 'Big Sine'
Time: [51x1 double]
TimeInfo: [1x1 tsdata.timemetadata]
Data: [51x1 double]
DataInfo: [1x1 tsdata.datametadata]
More properties, Methods
时间值在 timeseries 对象的 Time 属性中。信号值在 Data 属性中。
out.recordout{1}.Values.Dataans = 51×1
0
0.3973
0.7788
1.1293
1.4347
1.6829
1.8641
1.9709
1.9991
1.9477
1.8186
1.6170
1.3509
1.0310
0.6700
⋮
当您以将仿真结果作为单个对象返回的方式仿真模型时,您可以使用 Simulink.SimulationOutput 对象访问所有记录的数据和仿真元数据。
此示例中的模型启用了单一仿真输出参数,并使用多种不同记录方法记录数据。
Sine Wave 模块的输出使用信号记录进行记录。
Gain 模块的输出使用 To Workspace 模块进行记录。
Gain、Chirp Signal 和 Square Wave Generator 模块的输出使用 Record 模块记录。
Square Wave Generator 模块的输出使用输出记录进行记录。
该模型还配置为记录时间数据。
打开模型。
mdl = "LoggingBlocks";
open_system(mdl)
创建一个 Simulink.SimulationInput 对象来配置模型的仿真。使用 setModelParameter 函数将 StopTime 参数设置为 20。
simin = Simulink.SimulationInput(mdl);
simin = setModelParameter(simin,StopTime="20");对模型进行仿真。sim 函数以 Simulink.SimulationOutput 对象形式返回结果,其中包含从仿真记录的所有数据。每个模块和每种记录类型的数据都存储为与在模块或模型中指定的记录变量的名称匹配的属性。
out = sim(simin);
您可以使用圆点表示法、get 函数或 find 函数来访问记录的数据。
使用圆点表示法访问使用 To Workspace 模块记录的信号 Big Sine。
simout = out.simout
timeseries
Common Properties:
Name: 'Big Sine'
Time: [51x1 double]
TimeInfo: [1x1 tsdata.timemetadata]
Data: [51x1 double]
DataInfo: [1x1 tsdata.datametadata]
More properties, Methods
使用 get 函数访问使用信号记录来记录的信号 Sine。
logsout = get(out,"logsout")logsout =
Simulink.SimulationData.Dataset 'logsout' with 1 element
Name BlockPath
____ _______________________
1 [1x1 Signal] Sine LoggingBlocks/Sine Wave
- Use braces { } to access, modify, or add elements using index.
使用 find 函数访问使用输出记录来记录的信号 Square Wave。
yout = find(out,"yout")yout =
Simulink.SimulationData.Dataset 'yout' with 1 element
Name BlockPath
___________ _____________________
1 [1x1 Signal] Square Wave LoggingBlocks/Outport
- Use braces { } to access, modify, or add elements using index.
访问 SimulationOutput 对象的 SimulationMetadata 属性中的仿真元数据。
simmetadata = out.SimulationMetadata
simmetadata =
SimulationMetadata with properties:
ModelInfo: [1×1 struct]
TimingInfo: [1×1 struct]
ExecutionInfo: [1×1 struct]
UserString: ''
UserData: []
仿真元数据以 Simulink.SimulationMetadata 对象形式返回。SimulationMetadata 对象将信息分组为对象属性中的结构体。
查看 SimulationMetadata 对象的 ExecutionInfo 属性。执行信息显示,仿真运行到其停止时间 20,没有出现警告或错误。
simmetadata.ExecutionInfo
ans = struct with fields:
StopEvent: 'ReachedStopTime'
StopEventSource: []
StopEventDescription: 'Reached stop time of 20'
ErrorDiagnostic: []
WarningDiagnostics: [0×1 struct]
Simulink.SimulationOutput 对象表示仿真的结果。SimulationOutput 对象包含仿真元数据和从仿真记录的所有数据。您可以通过添加或删除数据记录和自定义属性来修改 Simulink.SimulationOutput 对象的内容。
打开模型 LoggingBlocks,该模型使用多种记录方法来记录多个输入信号。
Sine Wave 模块的输出使用信号记录进行记录。
Gain 模块的输出使用 To Workspace 模块进行记录。
Gain、Chirp Signal 和 Square Wave Generator 模块的输出使用 Record 模块记录。
Square Wave Generator 模块的输出使用输出记录进行记录。
该模型还配置为记录时间数据。
mdl = "LoggingBlocks";
open_system(mdl)
使用 get_param 函数保存 Sine Wave 模块的振幅和频率参数值。将值存储在结构体 sinConfig 中。
sinConfig.sinAmp = get_param(strcat(mdl,"/Sine Wave"),"Amplitude"); sinConfig.sinFreq = get_param(strcat(mdl,"/Sine Wave"),"Frequency");
对模型进行仿真。
out = sim(mdl);
仿真结果包含在仿真中创建的所有记录变量。使用 who 函数获取您可以修改的属性的列表。
props = who(out)
props = 5×1 cell
{'logsout' }
{'recordout'}
{'simout' }
{'tout' }
{'yout' }
对于此仿真,假设您只想保存与 Sine Wave 模块相关的信号路径的数据。使用 removeProperty 函数删除 recordout 和 yout 属性。
out = removeProperty(out,["recordout" "yout"]); who(out)
This Simulink.SimulationOutput object contains these editable properties:
logsout simout tout
您也可以将数据添加到 Simulink.SimulationOutput 对象,方法是将您自己的属性添加到该对象,或使用 setUserData 函数指定 UserData 对象的 Simulink.SimulationMetadata 属性的值。
假设您要将 Sine Wave 模块的参数值保存为 Simulink.SimulationOutput 对象的属性。使用圆点表示法添加属性 SineWaveParameters,就像向结构体中添加字段一样。
out.SineWaveParameters = sinConfig; who(out)
This Simulink.SimulationOutput object contains these editable properties:
SineWaveParameters logsout simout tout
您可以使用 sldiagviewer.reportSimulationMetadataDiagnostics 函数来通过诊断查看器显示在 Simulink.SimulationOutput 对象中捕获的错误和警告消息。
创建一个 Simulink.SimulationInput 对象来配置模型 ex_sldemo_bounce 的仿真。
mdl = "ex_sldemo_bounce";
simin = Simulink.SimulationInput(mdl);通过将模块 Initial Velocity 的值参数指定为未定义的变量 z,将错误引入仿真的模型中。
blk = mdl + "/Initial Velocity"; simin = setBlockParameter(simin,blk,"Value","z");
为了防止错误中断脚本执行,请对 SimulationInput 对象启用 CaptureErrors 参数。启用 CaptureErrors 参数后,仿真期间发生的错误和警告会捕获在 SimulationOutput 对象中,而不会在命令行窗口或脚本中报告。
simin = setModelParameter(simin,CaptureErrors="on");对模型进行仿真。为了运行仿真,sim 函数会加载模型而不是在 Simulink 编辑器中打开模型。
out = sim(simin);
使用 sldiagviewer.reportSimulationMetadataDiagnostics 函数在诊断查看器中显示仿真的警告和错误消息。
sldiagviewer.reportSimulationMetadataDiagnostics(out)
版本历史记录
在 R2009b 中推出要访问仿真元数据,现在可以使用 Simulink.SimulationOutput 对象的 SimulationMetadata 属性。在以前的版本中,要访问仿真元数据,必须使用 getSimulationMetadata 函数。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)