Main Content

get

Simulink.SimulationData.Dataset オブジェクトから要素または要素の集合を取得

説明

element = get(dataset,index) は、Simulink.SimulationData.Dataset オブジェクト dataset 内のインデックスに対応する要素を返します。関数 getElement の構文と動作は関数 get と同じです。

element = get(dataset,elName) は、elName で指定された要素を返します。

  • 名前が elName である要素が 1 つだけの場合、関数はその要素を返します。

  • 名前が elName である要素が複数ある場合、関数はそれらの要素を含む Simulink.SimulationData.Dataset オブジェクトを返します。

element = get(dataset,{elName}) は、名前が elName である 1 つ以上の要素を含む Dataset オブジェクトを返します。

すべて折りたたむ

モデル 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]

信号データは、Simulink.SimulationData.Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。時間値は 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 をシミュレートします。このモデルは、3 つのソース ブロックから生成されるデータを Dataset 形式を使用してログ記録します。

out = sim("GetDatasetElements");

既定では、すべてのログ データが out という名前の Simulink.SimulationOutput オブジェクトとしてワークスペースの単一の変数で返されます。ログ記録された出力データは、既定の名前 yout をもつ 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 でインデックス 2 を使用して Dataset オブジェクトの 2 番目の要素にアクセスします。

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 は、3 つのソース ブロックから生成されるデータを Dataset 形式を使用してログ記録します。このモデルでは、Sine Wave ブロックからの信号と Constant ブロックからの信号で同じ名前を共有しています。Pulse Generator ブロックからの信号は一意の名前をもちます。

open_system("GetDatasetElements")

モデルをシミュレートします。

out = sim("GetDatasetElements");

既定では、すべてのログ データが out という名前の Simulink.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 は、3 つのソース ブロックから生成されるデータを Dataset 形式を使用してログ記録します。このモデルでは、Sine Wave ブロックからの信号と Constant ブロックからの信号で同じ名前を共有しています。Pulse Generator ブロックからの信号は一意の名前をもちます。

open_system("GetDatasetElements")

モデルをシミュレートします。

out = sim("GetDatasetElements");

既定では、すべてのログ データが out という名前の Simulink.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 で文字ベクトルを含む cell 配列を使用して Dataset オブジェクトを返します。要素の名前が一意であれば、1 つの要素を含む Dataset オブジェクトが関数 get から返されます。要素の名前が一意でなければ、その名前のすべての要素を含む Dataset オブジェクトが関数 get から返されます。たとえば、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 にはバスの入れ子配列が含まれています。2 つのバスの配列 Bus2Bus3 がログ記録用にマークされています。topBus は Outport ブロックを使用してログ記録されます。この例では、バス階層内の Dataset の要素にアクセスする方法を示します。

モデルを開いてシミュレートします。

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

すべてのログ データが Simulink.SimulationOutput オブジェクトとして単一の変数 out で返されます。信号ログ データ logsout を含む Dataset オブジェクトにドット表記を使用してアクセスします。

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 オブジェクトの要素の名前を反映する string。

  • Dataset オブジェクトの要素の名前を反映する文字配列。

  • Dataset オブジェクトの要素の名前を反映する 1 つの文字ベクトルを含む cell 配列。1 つの要素を含む可能性のある Dataset オブジェクトを返すためにこの形式を使用します。スクリプトを記述するときにこの形式を検討します。

代替方法

get または getElement を使用する代わりに、中かっこを使用してインデックス構文を効率化し、Dataset オブジェクト内の要素にアクセスできます。インデックスは、変数の要素数以下の正の整数でなければなりません。たとえば、logsout データセットの 2 番目の要素を取得します。

logsout{2}

また、関数 find を使用して、データセットから要素または要素の集合を取得できます。

バージョン履歴

R2011a で導入