Main Content

get

Simulink.SimulationData.Dataset 对象获取元素或元素集合

说明

示例

element = get(dataset,index) 返回与索引对应的 Simulink.SimulationData.Dataset 对象 dataset 中的元素。getElement 函数使用与 get 函数相同的语法和行为。

示例

element = get(dataset,elName) 返回由 elName 指定的一个或多个元素。

  • 如果只有一个元素的名称为 elName,该函数将返回该元素。

  • 如果多个元素的名称为 elName,则该函数返回一个包含这些元素的 Simulink.SimulationData.Dataset 对象。

示例

element = get(dataset,{elName}) 返回一个 Dataset 对象,该对象包含一个或多个名为 elName 的元素。

示例

全部折叠

打开模型 sldemo_fuelsys,该模型对容错燃油控制系统进行建模。有关该模型的详细信息,请参阅容错燃油控制系统建模

mdl = "sldemo_fuelsys";
open_system(mdl)

在“配置参数”对话框的数据导入/导出窗格中,请注意:

  • 该模型未配置为将仿真输出以单个 Simulink.SimulationOutput 对象的形式返回。

  • 该模型对信号记录数据使用变量名称 sldemo_fuelsys_output

对模型进行仿真。

sim(mdl);

访问包含信号记录数据的 Dataset 对象 sldemo_fuelsys_output

sldemo_fuelsys_output
sldemo_fuelsys_output = 
Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements

                         Name            BlockPath                                
                         ______________  ________________________________________ 
    1  [1x1 Signal]      ''              sldemo_fuelsys/EGO Fault Switch         
    2  [1x1 Signal]      air_fuel_ratio  sldemo_fuelsys/Engine Gas Dynamics      
    3  [1x1 Signal]      ''              sldemo_fuelsys/Engine Speed Fault Switch
    4  [1x1 Signal]      speed           sldemo_fuelsys/Engine_Speed_Selector    
    5  [1x1 Signal]      ''              sldemo_fuelsys/MAP Fault Switch         
    6  [1x1 Signal]      map             sldemo_fuelsys/MAP_Selector             
    7  [1x1 Signal]      ego             sldemo_fuelsys/O2_Voltage_Selector      
    8  [1x1 Signal]      ''              ...o_fuelsys/Throttle Angle Fault Switch
    9  [1x1 Signal]      throttle        sldemo_fuelsys/Throttle_Angle_Selector  
   10  [1x1 Signal]      fuel            sldemo_fuelsys/To Plant                 

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

要访问 Dataset 对象元素,可以使用带花括号的索引。例如,使用索引 9 访问信号记录 Dataset 对象的 throttle 元素。

el9 = sldemo_fuelsys_output{9}
el9 = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

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

信号数据作为 timeseries 对象存储在 Simulink.SimulationData.Signal 对象的 Values 属性中。时间值在 timeseries 对象的 Time 属性中。信号值在 Data 属性中。

el9.Values
  timeseries

  Common Properties:
            Name: 'throttle'
            Time: [204508x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [204508x1 double]
        DataInfo: tsdata.datametadata
el9.Values.Data
ans = 204508×1

   10.0000
   10.0028
   10.0169
   10.0500
   10.1000
   10.1500
   10.2000
   10.2500
   10.2766
   10.2766
      ⋮

对模型 GetDatasetElements 进行仿真,该模型使用 Dataset 格式记录三个源模块生成的数据。

out = sim("GetDatasetElements");

默认情况下,所有记录的数据都作为名为 outSimulink.SimulationOutput 对象在工作区的单个变量中返回。记录的输出数据被分组到具有默认名称 youtSimulink.SimulationData.Dataset 对象中。您可以使用圆点表示法来访问记录的输出数据。

out.yout
ans = 
Simulink.SimulationData.Dataset 'yout' with 3 elements

                         Name      BlockPath               
                         ________  _______________________ 
    1  [1x1 Signal]      SameName  GetDatasetElements/Out1
    2  [1x1 Signal]      SameName  GetDatasetElements/Out2
    3  [1x1 Signal]      DifName   GetDatasetElements/Out3

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

使用 get 函数通过索引 2 访问 Dataset 对象的第二个元素。

el = get(out.yout,2)
el = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'SameName'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'inport'
         PortIndex: 1
            Values: [1x1 timeseries]

模型 GetDatasetElements 使用 Dataset 格式记录三个源模块生成的数据。在该模型中,来自 Sine Wave 模块和 Constant 模块的信号具有相同的名称。来自 Pulse Generator 模块的信号有唯一名称。

open_system("GetDatasetElements")

对模型进行仿真。

out = sim("GetDatasetElements");

默认情况下,所有记录的数据都作为名为 outSimulink.SimulationOutput 对象在工作区的单个变量中返回。使用圆点表示法访问包含记录的输出数据的 Simulink.SimulationData.Dataset 对象。

out.yout
ans = 
Simulink.SimulationData.Dataset 'yout' with 3 elements

                         Name      BlockPath               
                         ________  _______________________ 
    1  [1x1 Signal]      SameName  GetDatasetElements/Out1
    2  [1x1 Signal]      SameName  GetDatasetElements/Out2
    3  [1x1 Signal]      DifName   GetDatasetElements/Out3

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

使用 get 函数返回名为 DifName 的元素。由于名称 DifName 是唯一的,因此该函数返回该元素的 Simulink.SimulationData.Signal 对象。

el = get(out.yout,"DifName")
el = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'DifName'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'inport'
         PortIndex: 1
            Values: [1x1 timeseries]

当元素不唯一时,您也可以使用 get 函数。由于名称 SameName 不是唯一的,因此该函数返回一个包含名称为 SameName 的元素的 Simulink.SimulationData.Dataset 对象。

ds = get(out.yout,"SameName")
ds = 
Simulink.SimulationData.Dataset '' with 2 elements

                         Name      BlockPath               
                         ________  _______________________ 
    1  [1x1 Signal]      SameName  GetDatasetElements/Out1
    2  [1x1 Signal]      SameName  GetDatasetElements/Out2

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

模型 GetDatasetElements 使用 Dataset 格式记录三个源模块生成的数据。在该模型中,来自 Sine Wave 模块和 Constant 模块的信号具有相同的名称。来自 Pulse Generator 模块的信号有唯一名称。

open_system("GetDatasetElements")

对模型进行仿真。

out = sim("GetDatasetElements");

默认情况下,所有记录的数据都作为名为 outSimulink.SimulationOutput 对象在工作区的单个变量中返回。使用圆点表示法访问包含记录的输出数据的 Simulink.SimulationData.Dataset 对象。

out.yout
ans = 
Simulink.SimulationData.Dataset 'yout' with 3 elements

                         Name      BlockPath               
                         ________  _______________________ 
    1  [1x1 Signal]      SameName  GetDatasetElements/Out1
    2  [1x1 Signal]      SameName  GetDatasetElements/Out2
    3  [1x1 Signal]      DifName   GetDatasetElements/Out3

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

get 函数与包含字符向量的元胞数组结合使用可返回 Dataset 对象。如果元素名称是唯一的,则 get 函数会返回包含一个元素的 Dataset 对象。如果元素名称不是唯一的,get 函数将返回一个包含具有该名称的所有元素的 Dataset 对象。例如,创建一个包含名为 DifName 的元素的 Dataset 对象。

ds = get(out.yout,{'DifName'})
ds = 
Simulink.SimulationData.Dataset '' with 1 element

                         Name     BlockPath               
                         _______  _______________________ 
    1  [1x1 Signal]      DifName  GetDatasetElements/Out3

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

模型 AccessDatasetNestedBus 包含嵌套的总线数组。Bus2Bus3 这两个总线数组标记为用于记录。topBus 是使用 Outport 模块记录的。此示例说明如何访问总线层次结构中的 Dataset 元素。

打开并仿真模型。

mdl = "AccessDatasetNestedBus";
open_system(mdl)
out = sim(mdl);

所有记录的数据都作为一个 Simulink.SimulationOutput 对象在单个变量 out 中返回。使用圆点表示法访问包含信号记录数据 logsoutDataset 对象。

ds = out.logsout
ds = 
Simulink.SimulationData.Dataset 'logsout' with 2 elements

                         Name  BlockPath                                
                         ____  ________________________________________ 
    1  [1x1 Signal]      Bus3  ...ssDatasetNestedBus/Matrix Concatenate
    2  [1x1 Signal]      Bus2  ...sDatasetNestedBus/Vector Concatenate1

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

topBus 的数据记录到 Dataset 对象 yout 中。

ds2 = out.yout
ds2 = 
Simulink.SimulationData.Dataset 'yout' with 1 element

                         Name    BlockPath                   
                         ______  ___________________________ 
    1  [1x1 Signal]      topBus  AccessDatasetNestedBus/Out1

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

您可以使用 get 函数来访问 Dataset 对象中每个元素的信号记录信息。例如,使用 get 函数返回名为 Bus2 的总线数组的 Simulink.SimulationData.Signal 对象。

get(ds,"Bus2")
ans = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

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

记录的数据值存储在 Signal 对象的 Values 属性中。对于总线数组,数据记录为 MATLAB® 结构体数组。

get(ds,"Bus2").Values
ans=2×1 struct array with fields:
    a
    b

您可以使用数组中特定结构体的索引来访问该结构体。例如,要访问包含来自 Constant 模块 Constant6Constant7 的信号的 timeseries 对象的结构体,请使用索引 2

get(ds,"Bus2").Values(2)
ans = struct with fields:
    a: [1x1 timeseries]
    b: [1x1 timeseries]

使用圆点表示法访问结构体中的一个 timeseries 对象。例如,访问来自 Constant6 模块的信号的 timeseries 对象。

get(ds,"Bus2").Values(2).a
  timeseries

  Common Properties:
            Name: 'a'
            Time: [51x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [51x1 double]
        DataInfo: tsdata.datametadata

信号值存储在 Data 属性中。

get(ds,"Bus2").Values(2).a.Data
ans = 51×1

     6
     6
     6
     6
     6
     6
     6
     6
     6
     6
      ⋮

假设您不想将 Bus2 标记为记录。您还可以使用 Dataset 对象元素 Bus3 获取来自 Constant6 模块的信号的信号值。

get(ds,"Bus3").Values(2,2).a.Data
ans = 51×1

     6
     6
     6
     6
     6
     6
     6
     6
     6
     6
      ⋮

同样,您也可以使用 Dataset 对象元素 topBus 访问来自 Constant6 模块的信号的信号值。

get(ds2,"topBus").Values.Bus3(2,2).a.Data
ans = 51×1

     6
     6
     6
     6
     6
     6
     6
     6
     6
     6
      ⋮

输入参数

全部折叠

从中获取元素的 Dataset 对象,指定为 Simulink.SimulationData.Dataset 对象。

要获取的元素的索引,指定为正整数。

要获取的 Dataset 对象元素的名称,指定为:

  • 反映 Dataset 对象元素名称的字符串。

  • 反映 Dataset 对象元素名称的字符数组。

  • 包含反映 Dataset 对象元素名称的一个字符向量的元胞数组。要返回可以包含一个元素的 Dataset 对象,请使用此格式。编写脚本时,请考虑这种形式。

替代方法

作为使用 getgetElement 的替代方法,您可以使用花括号来简化访问 Dataset 对象中的元素的索引语法。索引必须是不大于变量中元素数的正整数。例如,获取 logsout 数据集的第二个元素。

logsout{2}

您还可以使用 find 函数从数据集中获取元素或元素集合。

版本历史记录

在 R2011a 中推出