Main Content

getElement

シミュレーション データ インスペクター実行からワークスペースに信号データをコピーする

説明

[element, name, idx] = getElement(dsr,searchIdx) は、Simulink.SimulationData.DatasetRef オブジェクト dsr で参照されているシミュレーション データ インスペクター実行にあるインデックス searchIdx の信号のデータを、ワークスペース内の変数 element にコピーします。

関数 getElement を使用して、シミュレーション データ インスペクター内の信号のデータのコピーをワークスペースで操作します。この関数は、信号のデータをメモリに読み込みます。シミュレーション データは、ディスク上の一時ファイルにログ記録されます。シミュレーション データ インスペクターは一時ファイルのデータにアクセスし、必要な場合にのみデータをメモリに読み込みます。

Simulink.sdi.DatasetRef オブジェクトは、シミュレーション データ インスペクターの実行のデータを参照します。これにより、信号データをメモリに読み込むタイミングと方法を制御しながら、実行内の信号データを操作できます。信号データをメモリに読み込まずにリポジトリ内の信号データにアクセスするには、関数 getSignal を使用します。

[element, name, idx] = getElement(dsr,searchName) は、信号 searchName のデータをワークスペース変数 element にコピーします。

  • 名前が searchName の信号が 1 つだけの場合、関数は、データが Dataset 形式でワークスペースにログ記録された方法に一致するスカラー オブジェクトとしてデータをワークスペースに返します。

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

  • searchName が 1 つの文字ベクトルを含む cell 配列の場合、関数は、名前 searchName に対応する 1 つ以上の信号の信号データが含まれた Dataset オブジェクトを返します。

すべて折りたたむ

シミュレーション データ インスペクターのリポジトリに保存されたデータがあるが、そのデータがワークスペースには存在しない場合、関数 getElement を使用して信号データのコピーをワークスペースに返すことができます。この例では、シミュレーション データ インスペクターのセッション ファイルを使用して実行データをリポジトリに追加します。データはワークスペースに読み込まれていません。セッション ファイルには航空機用縦方向コントローラーの 4 つのシミュレーションに対するデータが含まれます。データの作成に使用するモデルの詳細については、航空機の縦運動の飛行制御を参照してください。

関数 Simulink.sdi.load を使用して、シミュレーション データ インスペクター セッションを読み込みます。セッション ファイルを読み込むと、実行データがシミュレーション データ インスペクターのリポジトリに保存されます。

Simulink.sdi.load("AircraftExample.mldatx");

データを表示するには、シミュレーション データ インスペクターを開いて、プロットする信号を選択します。なお、シミュレーション データ インスペクターのセッション ファイルからのデータは、ワークスペース内に記録されません。

Simulink.sdi.view

セッション ファイルに保存された最初の実行の実行 ID を取得します。

allIDs = Simulink.sdi.getAllRunIDs;
aircraftRun1ID = allIDs(end-3);

その実行を参照する Simulink.sdi.DatasetRef オブジェクトを作成します。

dsr = Simulink.sdi.DatasetRef(aircraftRun1ID);

DatasetRef オブジェクト内のすべての要素の名前を取得します。

getElementNames(dsr)
ans = 3x1 cell
    {'q, rad/sec'}
    {'alpha, rad'}
    {'Stick'     }

関数 getElement を使用し、インデックス 1 を使用して、シミュレーション データ インスペクターのリポジトリに存在している q, rad/sec 信号データのコピーをワークスペースにプルします。

qSig = getElement(dsr,1)
qSig = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'q, rad/sec'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 3
            Values: [1x1 timeseries]

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

open_system("GetDatasetElements")

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

out = sim("GetDatasetElements");

関数 Simulink.sdi.Run.getLatest を使用して、シミュレーション データ インスペクターのリポジトリ内にある最新の実行を取得します。

GDERun = Simulink.sdi.Run.getLatest;

GDERun を参照する Simulink.sdi.DatasetRef オブジェクトを作成します。

DSRef = getDatasetRef(GDERun);

関数 getElement を使用して、名前が DifName である信号のデータのコピーをワークスペースに返します。名前 DifName は一意であるため、その信号の Simulink.SimulationData.Signal オブジェクトが関数から返されます。

[el,difName,difIndex] = getElement(DSRef,"DifName")
el = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

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

difName = 
'DifName'
difIndex = 2

関数 getElement は信号名が実行内で一意でない場合でも使用できます。たとえば、SameName は一意の名前でないため、関数は、その名前をもつ信号のデータのコピーを Simulink.SimulationData.Dataset オブジェクトに入れてワークスペースに返します。

ds = getElement(DSRef,"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");

関数 Simulink.sdi.Run.getLatest を使用して最新の実行を取得します。

GDERun = Simulink.sdi.Run.getLatest;

GDERun を参照する Simulink.sdi.DatasetRef オブジェクトを作成します。

DSRef = getDatasetRef(GDERun);

文字ベクトルを含む cell 配列を指定して関数 getElement を使用して、シミュレーション データ インスペクターのリポジトリ内の Simulink.sdi.Signal オブジェクトに対応する Simulink.SimulationData.Dataset オブジェクトをワークスペースに返します。要素の名前が一意であれば、1 つの要素を含む Dataset オブジェクトが関数 getElement から返されます。要素の名前が一意でなければ、その名前のすべての要素を含む Dataset オブジェクトが関数 getElement から返されます。たとえば、DifName という名前の要素を含む Dataset オブジェクトを作成します。

ds = get(DSRef,{'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.

入力引数

すべて折りたたむ

信号データの取得元の実行。Simulink.sdi.DatasetRef オブジェクトとして指定します。

dsr で参照されているシミュレーション データ インスペクター実行内の取得する信号のインデックス。正の整数として指定します。

dsr で参照されているシミュレーション データ インスペクター実行内の取得する信号の名前。以下として指定します。

  • 信号の名前を反映する string。

  • 信号の名前を反映する文字配列。

  • 信号の名前を反映する 1 つの文字ベクトルを含む cell 配列。1 つの要素を含む Dataset オブジェクトを返すには、この形式を使用します。

出力引数

すべて折りたたむ

信号データのコピー。ログ記録されたシミュレーション結果を含むオブジェクトとして指定します。この出力は、Simulink.Simulationdata.SignalSimulink.SimulationData.StateSimulink.SimulationData.DataStoreMemory オブジェクトなど、Simulink.SimulationData.Dataset オブジェクトまたは Dataset オブジェクト要素になることがあります。

要素名。文字ベクトルとして指定します。

Run オブジェクト内の要素インデックス。正の整数として指定します。

代替方法

信号データをメモリに読み込まずにリポジトリ内の信号データにアクセスするには、関数 getSignal を使用します。

バージョン履歴

R2017b で導入