主要内容

单一仿真输出

用于将仿真结果作为单个 Simulink.SimulationOutput 对象返回的选项

模型配置窗格: 数据导入/导出

描述

单一仿真输出参数提供返回包含所有仿真结果的单一 Simulink.SimulationOutput 对象的选项。使用单一输出格式可以更轻松地处理多个仿真的结果,并为并行和批量仿真提供更好的支持。当您启用单一仿真输出参数时,无论您如何运行仿真,都可以使用相同的代码来处理结果。

即使禁用单一仿真输出,仿真模型也会在上述任何情况下创建一个或多个 Simulink.SimulationOutput 对象:

  • 您可以使用一个或多个 Simulink.SimulationInput 对象以编程方式对模型进行仿真。

    使用 simparsimbatchsim 函数或使用 Simulation 对象运行仿真时,您可以使用 SimulationInput 对象配置仿真。

  • 使用 sim 函数语法仿真模型,该语法将结果以单个仿真输出形式返回。

    有关详细信息,请参阅 sim

  • 您可以使用多个仿真面板运行一组仿真。

设置

on (默认) | off
on

记录到工作区的所有仿真数据以单个 Simulink.SimulationOutput 对象形式返回。默认情况下,存储 SimulationOutput 对象的变量的名称是 out。要使用不同变量名称,请在文本框中指定有效的 MATLAB® 变量名称。

以编程方式仿真模型时,您在文本框中指定的名称不能确定存储 SimulationOutput 对象的变量的名称。SimulationOutput 对象存储在您为其赋予返回参量的变量中。例如,对于此仿真,SimulationOutput 对象变量名称为 simout

simout = sim(simin);

off

记录的仿真结果以一个或多个变量形式返回,具体取决于模型中配置的记录选项和如何运行仿真。

当您使用 sim 函数的模型名称语法对模型进行仿真而不指定任何其他参量时,仿真仅返回时间向量。要使仿真返回完整结果,请通过指定 ReturnWorkspaceOutputs 名称-值参量为仿真启用单一仿真输出参数。

out = sim(mdl,ReturnWorkspaceOutputs="on");

不推荐使用返回多个参量的 sim 函数的语法。有关详细信息,请参阅不推荐使用返回多个输出参量的语法

示例

全部展开

此示例中的模型使用几种不同记录方法记录数据。

  • 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 model

访问在单一仿真输出中未返回的数据

模型 LoggingBlocks_NotSSO 在禁用单一仿真输出参数的状态下保存。在某些工作流中,仿真模型不会以单个 Simulink.SimulationOutput 对象形式返回仿真结果。

要仿真该模型,请点击运行。或者,在命令行窗口中发出 start 仿真命令。

set_param(mdl,SimulationCommand="start")

当仿真不以单个输出形式返回结果时,软件会将来自每种记录方法和记录模块的数据保存到工作区中的一个单独变量。例如,为顶层输出端口记录的数据会使用默认变量名称 yout 保存到工作区。

The workspace panel contains these variables: logsout, mdl, recordout, ScopeData, simout, tout, and yout.

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

The Command Window displays the contents of the variable named recordout. The variable contains a Dataset object that contains three signals logged using the Record block: Big Sine, Chirp, and Square Wave.

由于单一仿真输出参数被禁用,如果您通过使用 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
      ⋮

访问作为单一仿真输出返回的数据

要将仿真结果作为单一输出返回,请在“配置参数”对话框中选择单一仿真输出

  1. 在 Simulink 工具条的建模选项卡上,点击模型设置

  2. 在“配置参数”对话框中,选择数据导入/导出窗格。

  3. 选择单一仿真输出

  4. 点击确定

或者,使用 set_param 函数以编程方式启用单一仿真输出参数。

set_param(mdl,ReturnWorkspaceOutputs="on")

当您启用单一仿真输出参数时,所有仿真都将记录到工作区的数据作为单个 Simulink.SimulationOutput 对象返回,默认变量名称为 out

为了更好地了解在单个 SimulationOutput 对象中返回仿真数据对工作区的影响,请从工作区中清除包含从先前仿真记录数据的变量。

clear logsout recordout ScopeData simout tout yout

再次对模型进行仿真。点击运行或以编程方式使用 sim 函数仿真模型。

out = sim(mdl);

现在,名为 out 的单个变量包含记录到工作区的所有仿真数据。

The Workspace panel contains the variables mdl and 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.Data
ans = 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
      ⋮

提示

  • 使用 To File 模块记录数据时,数据会记录到指定的文件中,而不会出现在单个 Simulink.SimulationOutput 对象中。

  • 当您选择将数据记录到文件时,记录到文件的数据不会包含在单个 Simulink.SimulationOutput 对象中。

  • 启用快速重启会启用单一仿真输出参数。

  • Simulink.SimulationOutput 对象使用 who 函数可以查看该对象中变量的列表。

  • 要使用记录间隔参数,您必须选择单一仿真输出

编程用法

参数:ReturnWorkspaceOutputs
值:"on" | "off"
默认值"on"
参数:ReturnWorkspaceOutputsName
类型:字符串 | 字符向量
值:有效的 MATLAB 变量名称
默认值:"out"

版本历史记录

在 R2009b 中推出