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

Simulink.sdi.Run クラス

パッケージ: Simulink.sdi

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

説明

Simulink.sdi.Run オブジェクトは、実行のメタデータと、実行を構成する信号を管理します。いくつかのメソッドを使用して Simulink.sdi.Signal オブジェクトを取得し、信号データとメタデータにアクセスできます。

構築

runObj = Simulink.sdi.Run.create は、空の Simulink.sdi.Run オブジェクトを作成します。

runObj = Simulink.sdi.getRun(runID) は、runID に対応する実行の Simulink.sdi.Run オブジェクト runObj を作成します。

関数 Simulink.sdi.createRun と関数 Simulink.sdi.createRunOrAddToStreamedRun を使用して Run を作成することもできます。

入力引数

すべて展開する

実行を識別する一意の数値。

プロパティ

すべて展開する

実行の一意の数値識別子。

実行名。既定の設定では name は空です。

例: 'Run 1'

実行の説明。既定の設定では Description は空です。

例: 'Initial simulation'

追加の実行情報のタグ。既定の設定では Tag は空です。Tag パラメーターを使用して、シミュレーション データを分類するか、追加情報をシミュレーションの実行に付加できます。

例: 'Gain = 2'

実行が作成された日付と時刻。

データ型: datetime

実行に含まれる信号の数。

実行を作成したモデルの名前。

シミュレーションで作成された実行で、実行の作成に使用されたシミュレーション モード。

実行のすべての信号により共有される最初の時間点。

実行のすべての信号により共有される最後の時間点。

実行を作成したシミュレーションに使用される Simulink® のバージョン。

[モデル プロパティ] から取得された、実行を作成するためにシミュレーションされたモデルのバージョン。

実行を作成したシミュレーションに使用されたシステム アカウント。UserID は、Simulink シミュレーションで作成された実行の値のみをもちます。

実行を作成したシミュレーションに使用されるマシン名。MachineName は、Simulink シミュレーションで作成された実行の値のみをもちます。

Parallel Computing Toolbox™ ワーカーで作成された実行に対する、実行を作成したシミュレーション タスクの名前。

実行を作成したシミュレーションに使用されたソルバーのタイプ。SolverType は、Simulink シミュレーションで作成された実行の値のみをもちます。

実行を作成したシミュレーションに使用されたソルバーの名前。SolverName は、Simulink シミュレーションで作成された実行の値のみをもちます。

例: ode45

実行を作成したシミュレーションのモデルを初期化する時間。ModelInitializationTime は、Simulink シミュレーションで作成された実行の値のみをもちます。

実行を作成したモデル シミュレーションの実行時間。ModelExecutionTime は、Simulink シミュレーションで作成した実行の値のみをもちます。

実行を作成したシミュレーションを終了する時間。ModelTerminationTime は、Simulink シミュレーションで作成した実行の値のみをもちます。

実行を作成したモデル シミュレーションの合計実行時間。ModelTotalElapsedTime は、Simulink シミュレーションで作成された実行の値のみをもちます。

メソッド

add実行に信号を追加
createSimulink.sdi.Run オブジェクトの作成
exportベース ワークスペースまたはファイルへの実行のエクスポート
getDatasetRef実行から Simulink.sdi.DatasetRef オブジェクトを作成する
getSignalByIndexインデックスで Simulink.sdi.Signal オブジェクトを取得する
getSignalIDByIndexインデックスにある信号の信号 ID を返す
isValidSignalID信号 ID が実行内で有効かどうかを確認する

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

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

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

sldemo_fuelsys モデルにはログ記録用にマークされている複数の信号が含まれます。ログ データが含まれるシミュレーション実行を作成するには、モデルのシミュレーションを実行します。

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 オブジェクトを作成します。データを可視化するには、シミュレーション データ インスペクターでは少なくともデータに対応する時間ベクトルが必要となります。

% Generate timeseries data
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';

シミュレーション データ インスペクターの実行を作成してデータを追加

シミュレーション データ インスペクターでデータにアクセスできるようにするには、create メソッドを使用して実行を作成します。この例では、データを識別しやすくするために一部の実行のプロパティを変更します。シミュレーション データ インスペクターを使用すると、実行と信号のプロパティを簡単に表示できます。

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

% Add timeseries data to run
sinusoidsRun.add('vars', sine_ts, cos_ts);

Simulink.sdi.Signal オブジェクトを使用してデータをプロット

getSignalByIndex メソッドでは、シミュレーション データ インスペクターでの信号のプロットに使用できる Simulink.sdi.Signal オブジェクトが返されます。信号を表すラインの色やスタイルといったプロットの外観の特徴をプログラムで制御することもできます。この例では、サブプロット レイアウトと信号の特性をカスタマイズします。

% Get signal, modify its properties, and change Checked property to true
sine_sig = sinusoidsRun.getSignalByIndex(1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';
sine_sig.Checked = true;

% Add another subplot for the cosine signal
Simulink.sdi.setSubPlotLayout(2, 1);

% Plot the cosine signal and customize its appearance
cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.plotOnSubPlot(2, 1, true);

% View the signal in the Simulation Data Inspector
Simulink.sdi.view

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

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

この例では、さまざまな入力フィルターの時定数でモデル 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 で実行とそのプロパティを表示できます。シミュレーション データ インスペクター GUI で、データをインポートして実行を作成することもできます。詳細については、シミュレーション データ インスペクターでのデータの表示を参照してください。

R2012b で導入