Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink.sdi.Run

実行信号とメタデータにアクセスする

説明

Simulink.sdi.Run オブジェクトには実行メタデータが含まれ、実行の信号に対するデータとメタデータが含まれる Simulink.sdi.Signal オブジェクトにアクセスできます。Simulink.sdi.Run オブジェクトを使用して、シミュレーション データ インスペクターにワークスペースまたはファイルからデータをインポートすることもできます。

作成

シミュレーション データ インスペクターは、データのインポート時またはデータをログに記録するモデルのシミュレーション時に Simulink.sdi.Run オブジェクトを作成します。シミュレーション データ インスペクターでは 3 つの方法で Run オブジェクトにアクセスできます。

  • 特定の実行 ID に対応する実行にアクセスする場合は関数 Simulink.sdi.getRun を使用します。

    ヒント

    シミュレーション データ インスペクターですべての実行の実行 ID を取得する場合は関数 Simulink.sdi.getAllRunIDs を使用します。

  • シミュレーション データ インスペクターで最後に作成された実行にアクセスする場合は関数 Simulink.sdi.Run.getLatest を使用します。

  • モデルの進行中または最後に完了したシミュレーションに対応する実行にアクセスする場合は関数 Simulink.sdi.getCurrentSimulationRun を使用します。

プログラムで Simulink.sdi.Run オブジェクトを作成し、シミュレーション データ インスペクターにデータをインポートすることもできます。

  • 関数 Simulink.sdi.Run.create を使用してシミュレーション データ インスペクターで空の実行を作成します。

  • シミュレーション データ インスペクターで空の実行を作成するか、Simulink.sdi.createRun を使用してシミュレーション データ インスペクターにデータをインポートします。

ヒント

関数 add または関数 Simulink.sdi.addToRun を使用してデータを空の Run オブジェクトにインポートします。

プロパティ

すべて展開する

このプロパティは読み取り専用です。

実行の一意の数値識別子。整数として返されます。

実行名。文字ベクトルまたは string として指定します。

既定の設定では、関数 Simulink.sdi.Run.create を使用して実行を作成する場合、Name プロパティは空です。

関数 Simulink.sdi.createRun を使用して実行を作成する場合、実行名を指定できます。

データをログに記録するモデルをシミュレーションして実行を作成すると、シミュレーション データ インスペクターの実行の命名規則に従って実行名が生成されます。シミュレーション データ インスペクターの実行の命名規則は、UI 内で、または関数 Simulink.sdi.setRunNamingRule を使用して変更できます。

例: 'Run 1: vdp'

実行の説明。文字ベクトルまたは string として指定します。既定の設定では Description は空です。Description プロパティを使用して、データの作成に使用されるテストやシミュレーション条件など、実行内のデータの重要性に関するメモを追加します。

例: 'Initial simulation'

追加の実行情報のタグ。文字ベクトルまたは string として指定します。既定の設定では Tag は空です。Tag プロパティを使用して追加情報を Run オブジェクトに付加できます。たとえば、Tag プロパティを使用して、Run オブジェクトのメタデータで実行を作成したシミュレーションに使用されるパラメーター値を含めることができます。

例: 'Gain = 2'

実行が作成された日付と時刻。datetime オブジェクトとして返されます。

例: 07-Dec-2019 13:55:25

データ型: datetime

このプロパティは読み取り専用です。

実行が作成されたときのシミュレーション データ インスペクターにおける実行のインデックス。整数として返されます。RunIndex は、実行の命名規則の一部として実行インデックスを使用するときに、実行名の実行番号と一致します。

シミュレーション データ インスペクターから実行を削除すると、RunIndex プロパティの値は関数 Simulink.sdi.getAllRunIDs から返されるベクトルの実行 ID のインデックスと一致しない可能性があります。

このプロパティは読み取り専用です。

実行内の信号の数。整数として返されます。

実行を作成するためにシミュレートされたモデルの名前。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の Model プロパティは空です。

実行を作成したシミュレーションで使用されるシミュレーション モード。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の SimMode プロパティは空です。

実行のすべての信号により共有される最初の時間点。スカラーとして返されます。

実行のすべての信号により共有される最後の時間点。スカラーとして返されます。

実行を作成したシミュレーションに使用される Simulink® のバージョン。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の SLVersion プロパティは空です。

実行を作成するためにシミュレーションされたモデルのバージョン。文字ベクトルとして返されます。モデルのバージョンはそのモデル プロパティに保存されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の ModelVersion プロパティは空です。

実行を作成したシミュレーションの実行に使用されるシステム アカウント。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の UserID プロパティは空です。

実行を作成したシミュレーションの実行に使用されるマシンの名前。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の MachineName プロパティは空です。

シミュレーションの実行に使用されるマシンのオペレーティング システム。文字ベクトルとして返されます。シミュレーションに対応しない実行の Platform プロパティは空です。

例: 'PCWIN64'

実行に対応するシミュレーション タスクの名前。文字ベクトルとして返されます。Parallel Computing Toolbox™ ワーカーを使用して実行が作成された場合を除き、TaskName プロパティは空です。

実行を作成したシミュレーションに使用されるソルバーのタイプ。'Variable-Step' または 'Fixed-Step' として返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の SolverType プロパティは空です。

実行を作成したシミュレーションに使用されるソルバーの名前。文字ベクトルとして返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の SolverName プロパティは空です。

例: ode45

シミュレーション時にソルバーによって使用されるステップ サイズ。文字ベクトルとして返されます。シミュレーションで固定ステップ ソルバーが使用された場合、SolverStepSize プロパティはシミュレーションで使用される固定ステップ サイズを示します。シミュレーションで可変ステップ ソルバーが使用された場合、SolverStepSize プロパティはシミュレーションで使用される最大ステップ サイズを示します。

例: '0.4'

シミュレーション ステータス。文字ベクトルとして返されます。シミュレーションの実行中、Status プロパティは 'Running' です。シミュレーションが一時停止または完了すると、Status プロパティはSimulink.SimulationMetadata オブジェクトの StopEvent プロパティの StopEvent フィールドから値を取得します。StopEvent プロパティには次のいずれかの値が含まれます。

  • ReachedStopTime — シミュレーションはエラーを報告せずに完了。これには、シミュレーション ステップ後に実行される StopFcn コールバックにレポートされたエラーは含まれません。

  • ModelStop — ブロックまたはソルバーはシミュレーション終了時間前にシミュレーションを停止。

  • StopCommand[停止] ボタン押下または set_param 関数呼び出しによりシミュレーションを終了。

  • DiagnosticError — 報告されたエラーによりシミュレーションを終了。

  • KeyboardControlCCtrl+C キーボード入力によりシミュレーションを終了。

  • PauseCommand[一時停止] ボタンまたは set_param 関数呼び出しによりシミュレーションを一時停止。

  • ConditionalPause — 条件付きブレークポイントによりシミュレーションを一時停止。

  • PauseTime — 指定された一時停止時間によりシミュレーションを一時停止。

  • StepForward — シミュレーションのステップ実行中にステップを進めた後、シミュレーションを一時停止。

  • StepBackward — シミュレーションのステップ実行中にステップを戻した後、シミュレーションを一時停止。

  • TimeOut — 関数 sim に対する 'TimeOut' の名前と値のペアを使用して指定されたタイムアウト時間をシミュレーションの実行時間が超えた後、シミュレーションを停止。

シミュレーションを停止した停止イベントを発行したブロック。Simulink.SimulationData.BlockPath オブジェクトとして返されます。

シミュレーション停止の変換された記述。文字ベクトルとして返されます。StopEventDescription には停止イベントと関連するシミュレーション時間の記述が含まれます (該当する場合)。StopEventDescription プロパティはSimulink.SimulationMetadata オブジェクトの ExecutionInfo プロパティの StopEventDescription フィールドからその値を取得します。

例: 'Pause command issued at time 100'

シミュレーション中に発生したエラー。文字ベクトルとして返されます。

シミュレーション中に発生した警告。文字ベクトルとして返されます。

実行を作成したシミュレーションのモデルを初期化するのに必要な時間。double として返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の ModelInitializationTime プロパティは空です。

実行を作成したシミュレーションの実行時間。double として返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の ModelExecutionTime プロパティは空です。

実行を作成したシミュレーションの終了時間。double として返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の ModelTerminationTime プロパティは空です。

実行を作成したシミュレーションの合計シミュレーション時間。double として返されます。シミュレーション データ インスペクターにデータをインポートして作成された実行の ModelTotalElapsedTime プロパティは空です。

シミュレーションに対応するユーザー指定の string。文字ベクトルとして返されます。多くの場合、UserString によりシミュレーションの簡単な記述が提供されます。シミュレーションの Simulink.SimulationInput オブジェクトでシミュレーションの UserString を指定します。

オブジェクト関数

add信号を Simulink.sdi.Run オブジェクトに追加
exportベース ワークスペースまたはファイルへの実行のエクスポート
getAllSignalIDsSimulink.sdi.Run オブジェクト内の信号の信号 ID をすべて取得する
getAllSignalsSimulink.sdi.Run オブジェクト内のすべての信号を取得
getDatasetRef実行から Simulink.sdi.DatasetRef オブジェクトを作成する
getSignalByIndexインデックスによって Simulink.sdi.Run オブジェクト内の信号を取得
getSignalIDByIndexSimulink.sdi.Run オブジェクト内の指定されたインデックスにある信号の信号 ID を取得
getSignalIDsByName信号名を使用して Simulink.sdi.Run オブジェクト内の信号の信号 ID を取得
getSignalsByName信号名を使用して Simulink.sdi.Run オブジェクトの信号にアクセス
isValidSignalID信号 ID が Simulink.sdi.Run オブジェクトの信号に対応するかどうかをチェック

すべて折りたたむ

この例では、信号を記録して作成されたシミュレーション データ インスペクター実行の Simulink.sdi.Run オブジェクトにアクセスする方法を示します。Simulink.sdi.Run オブジェクトから、ログに記録された信号データとメタデータが含まれる Simulink.sdi.Signal オブジェクトを取得できます。Signal オブジェクトと関数 plotOnSubPlot を使用して、データをシミュレーション データ インスペクターにプロットできます。

シミュレーション実行の作成および Run オブジェクトへのアクセス

ex_vdp モデルは 2 つの信号を記録します。ログ データが含まれるシミュレーション実行を作成するには、モデルのシミュレーションを実行します。

sim('ex_vdp');

シミュレーション データ インスペクターは、シミュレーションで作成された各実行に一意の数値実行 ID を割り当てるか、データをインポートするか、セッションを開くことによって実行を追跡します。直前に実行したシミュレーションの実行オブジェクトにアクセスするには、関数 Simulink.sdi.getAllRunIDs を使用して、返されるベクトルで最後の実行 ID を取ります。

runIDs = Simulink.sdi.getAllRunIDs;
runID = runIDs(end);

実行の実行 ID を取得すると、関数 Simulink.sdi.getRun を使用して実行に対応する Simulink.sdi.Run オブジェクトを取得できます。Run オブジェクトを使用して、実行内の信号の数など、実行に関連付けられているメタデータをチェックできます。

vdpRun = Simulink.sdi.getRun(runID);

vdpRun.SignalCount
ans = int32
    2

Signal オブジェクトを使用したデータのプロット

関数 getSignalByIndex を使用して、Run オブジェクト fuelRun から信号にアクセスします。

signal1 = getSignalByIndex(vdpRun,1);
signal2 = getSignalByIndex(vdpRun,2);

関数 Simulink.sdi.setSubPlotLayout を使用して 3 行 1 列のレイアウトを指定します。

Simulink.sdi.setSubPlotLayout(2,1)

データをプロットする前に、既にプロットされている任意のデータを関数 Simulink.sdi.clearAllSubPlots を使用して消去します。

Simulink.sdi.clearAllSubPlots

サブプロットごとに 1 つの信号をプロットします。最初のサブプロットで信号をプロットするために、信号の checked プロパティを設定できます。最初のサブプロット以外のサブプロットで信号をプロットするには、関数 plotOnSubPlot を使用します。

signal1.Checked = true;
plotOnSubPlot(signal2,2,1,true);

プロットされたデータの表示

直前に作成したプロットを表示するには、関数 Simulink.sdi.view を使用してシミュレーション データ インスペクターを開きます。

この例では、実行を作成してそこにデータを追加してから、シミュレーション データ インスペクターでデータを表示する方法を示します。

実行からデータを作成

timeseries オブジェクトを作成し、正弦信号と余弦信号のデータを含めます。各 timeseries オブジェクトに説明的な名前を付けます。

time = linspace(0,20,100);

sine_vals = sin(2*pi/5*time);
sine_ts = timeseries(sine_vals,time);
sine_ts.Name = 'Sine, T=5';

cos_vals = cos(2*pi/8*time);
cos_ts = timeseries(cos_vals,time);
cos_ts.Name = 'Cosine, T=8';

実行の作成とデータの追加

関数 Simulink.sdi.view を使用して、シミュレーション データ インスペクターを開きます。

Simulink.sdi.view

データをワークスペースからシミュレーション データ インスペクターにインポートするには、関数 Simulink.sdi.Run.create を使用して Simulink.sdi.Run オブジェクトを作成します。Run オブジェクトの Name プロパティと Description プロパティを使用して、実行に関する情報をそのメタデータに追加します。

sinusoidsRun = Simulink.sdi.Run.create;
sinusoidsRun.Name = 'Sinusoids';
sinusoidsRun.Description = 'Sine and cosine signals with different frequencies';

関数 add を使用して、ワークスペースで作成したデータを空の実行に追加します。

add(sinusoidsRun,'vars',sine_ts,cos_ts);

シミュレーション データ インスペクターでのデータのプロット

関数 getSignalByIndex を使用して、信号データが含まれる Simulink.sdi.Signal オブジェクトにアクセスします。Simulink.sdi.Signal オブジェクトのプロパティを使用して、信号のライン スタイルと色を指定し、シミュレーション データ インスペクターにプロットできます。各信号の LineColor プロパティと LineDashed プロパティを指定します。

sine_sig = getSignalByIndex(sinusoidsRun,1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';

cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.LineDashed = '--';

関数 Simulink.sdi.setSubPlotLayout を使用して、シミュレーション データ インスペクターのプロット領域で 21 列のサブプロット レイアウトを設定します。次に、関数 plotOnSubplot を使用して、上のサブプロットに正弦信号をプロットし、下のサブプロットに余弦信号をプロットします。

Simulink.sdi.setSubPlotLayout(2,1);

plotOnSubPlot(sine_sig,1,1,true);
plotOnSubPlot(cos_sig,2,1,true);

シミュレーション データ インスペクターを閉じてデータを保存

プロットされた信号データの検査が完了したら、シミュレーション データ インスペクターを閉じて、セッションを MLDATX ファイルに保存できます。

Simulink.sdi.close('sinusoids.mldatx')

この例では、さまざまな入力フィルターの時定数でモデル slexAircraftExample の並列シミュレーションを実行し、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用してデータにアクセスするいくつかの方法を示します。

設定

シミュレーション データ インスペクターが空であり、Parallel Computing Toolbox のサポートがローカル ワーカーで作成された実行を自動的にインポートするように、確実に設定されていることから始めます。次に、各シミュレーションで使用するフィルター パラメーター値のベクトルを作成します。

% Make sure the Simulation Data Inspector is empty, and PCT support is
% enabled. 
Simulink.sdi.clear
Simulink.sdi.enablePCTSupport('local')

% Define Ts values
Ts_vals = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; 

並列ワーカーの初期化

並列シミュレーションを実行するローカル ワーカーのプールを未作成の場合は、gcp を使用して作成します。spmd コード ブロックで、slexAircraftExample モデルを読み込み、ログに記録する信号を選択します。simparfor で使用する際のデータの同時実行の問題を回避するには、シミュレーション中に使用する一時ディレクトリをワーカーごとに作成します。

p = gcp;
Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
spmd
    
    % Load system and select signals to log
    load_system('slexAircraftExample')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot', 1, 'on')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 4, 'on')
    
    % Create temporary directory on each worker
    workDir = pwd;
    addpath(workDir)
    tempDir = tempname;
    mkdir(tempDir)
    cd(tempDir)
    
end

並列シミュレーションの実行

parfor を使用して 7 つのシミュレーションを並列実行します。各シミュレーションの Ts の値を選択し、モデル ワークスペースで Ts の値を変更します。次に、シミュレーションを実行し、Simulink.sdi.WorkerRun オブジェクトの配列を作成して、シミュレーション データ インスペクターでデータにアクセスします。parfor ループの後、別の spmd セグメントを使用して一時ディレクトリをワーカーから削除します。

parfor index = 1:7
    
    % Select value for Ts
    Ts_val = Ts_vals(index);
    
    % Change the filter time constant and simulate
    modelWorkspace = get_param('slexAircraftExample','modelworkspace');
    modelWorkspace.assignin('Ts',Ts_val)
    sim('slexAircraftExample')
    
    % Create a worker run for each simulation
    workerRun(index) = Simulink.sdi.WorkerRun.getLatest
    
end

spmd
        
    % Remove temporary directories
    cd(workDir)
    rmdir(tempDir, 's')
    rmpath(workDir)
    
end

並列シミュレーション出力から Dataset オブジェクトを取得

getDataset メソッドは WorkerRun から Dataset オブジェクトにデータを格納し、簡単に後処理できるようにします。

ds(7) = Simulink.SimulationData.Dataset;

for a = 1:7
    ds(a) = workerRun(a).getDataset;
end
ds(1)
ans = 
Simulink.SimulationData.Dataset '' with 2 elements

                         Name        BlockPath                                
                         __________  ________________________________________ 
    1  [1x1 Signal]      alpha, rad  ...rcraftExample/Aircraft Dynamics Model
    2  [1x1 Signal]      Stick       slexAircraftExample/Pilot               

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

並列シミュレーション出力から DatasetRef オブジェクトを取得

ビッグ データのワークフローの場合は、getDatasetRef メソッドを使用して WorkerRun に関連付けられているデータを参照します。

for b = 1:7
    datasetRef(b) = workerRun(b).getDatasetRef;
end

datasetRef(1)
ans = 
  DatasetRef with properties:

           Name: 'Run 3: slexAircraftExample'
            Run: [1×1 Simulink.sdi.Run]
    numElements: 2

シミュレーション データ インスペクターで並列シミュレーション データを処理

ローカルの Run オブジェクトを作成し、シミュレーション データ インスペクター API を使用してデータの解析と可視化を行うこともできます。この例では各実行に対するフィルター時定数値を示すタグを追加します。

for c = 1:7
    
    Runs(c) = workerRun(c).getLocalRun;
    Ts_val_str = num2str(Ts_vals(c));
    desc = strcat('Ts = ', Ts_val_str);
    Runs(c).Description = desc;
    Runs(c).Name = strcat('slexAircraftExample run Ts=', Ts_val_str);
    
end

ワーカー リポジトリをクリーンアップ

ワーカーが使用したファイルをクリーンアップし、ワーカー プールで実行するその他のシミュレーション用にディスク容量を解放します。

Simulink.sdi.cleanupWorkerResources

代替方法

シミュレーション データ インスペクター UI を使用して実行メタデータを表示し、データをインポートできます。詳細については、シミュレーション データ インスペクターでのデータの表示を参照してください。

R2012b で導入