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

ログ データのディスクへのストリーミング

シミュレーション データをログに記録する場合、データをワークスペース変数に格納するか、データをディスク上の一時ファイルにストリーミングして、ワークスペース変数でその一時ファイルをポイントすることができます。どちらの場合でも、ログに記録されたシミュレーション データとは、シミュレーション ログ変数を介してやりとりします。

ワークスペースにデータを保存するとメモリが消費されます。ログに記録されたデータをディスクにストリーミングすると、システム メモリの制限を受けなくなるため、データ ログ容量が大幅に増加します。

すべてのモデルについて、データのディスクへのストリーミングを有効にするには、MATLAB® ツールストリップで [設定] をクリックします。[設定] ダイアログ ボックスの左側のペインで [Simscape] を選択してから、[一時ディスク ディレクトリへのデータのストリーミング] チェック ボックスを選択します。

この設定をオンにすると、シミュレーション時に生成された simlog オブジェクト形式のシミュレーション データが、ユーザー本人の名前の一時フォルダーにある HDF5 ファイルに格納されます。コンフィギュレーション パラメーターの [ワークスペース変数名] で指定された、simscape.logging.Node タイプの名前のワークスペース変数が作成されますが、すべてのシミュレーション データを格納する代わりに、一時ファイルの simlog オブジェクトを参照します。一時ファイルは、参照元のワークスペースにログ変数名が存在する限り存続します。

内部にシミュレーション データが格納されている場合と同様の方法で、シミュレーション ログ変数にアクセスし、ログに記録されたシミュレーション データを表示、解析します。ワークスペース変数と格納されたオブジェクトとのやりとりはすべてバックグラウンドで行われます。したがって、Simscape™ 結果エクスプローラーを simscape.logging.Node クラスと simscape.logging.Series クラスに関連付けられたすべてのメソッドと共に使用すると、ログに記録されたシミュレーション データのクエリ、プロット、および解析を行うことができます。

データをディスクにストリーミングする際には、次の制限があります。

  • [データ点を制限] コンフィギュレーション パラメーターと [データ履歴 (最後の N ステップ)] コンフィギュレーション パラメーターは無視されます。ただし、[間引き] パラメーターを使用して、ログに記録されたデータ ポイントの数を制限できます。詳細については、データ ログ作成のオプションを参照してください。

  • モデル シミュレーションを一時停止してからステップを戻し、そしてステップを進めると、すべての時間ポイントがログに記録されます。これは、ワークスペース変数への直接的なデータ格納とは異なります。この場合はログ データがロールバックされるためです。

ディスクおよび parfor ループへのストリーミング

Parallel Computing Toolbox™ のライセンスがある場合は、parfor ループ内でモデルをシミュレートすると、ワーカー スレッドのアドレス空間内に HDF5 形式の一時ファイルが生成されます。parfor ループの外でシミュレーション データにアクセスするには、データをエクスポートしてから、エクスポートしたファイルを parfor ループの外にインポートします。

parfor i=1:2 
   model = 'ssc_dcmotor' 
   load_system(model); 
   set_param(model, 'SimulationMode', 'normal'); 
   set_param(model, 'SimscapeLogType', 'all', 'SimscapeLogName', 'simlog'); 
   simOut = sim(model, 'ReturnWorkspaceOutputs', 'on'); 

   % save to a different file by appending the index 
   file = ['fileName_' num2str(i) '.h5']; 
   simscape.logging.export(simOut.get('simlog'), file); 
end

% import the exported files 
var = simscape.logging.import('fileName_1.h5');
...
 

parsim によるディスクへのストリーミング

Parallel Computing Toolbox のライセンスがある場合は、parsim コマンドを使用してモデルをシミュレートすると、parfor ループを使用する場合と比べて、追加の機能が提供されます。以下の例では、ログに記録されたシミュレーション データをディスクにストリーミングするときの parsim コマンドの使用方法を説明します。

model = 'ssc_dcmotor';
% Create array of inputs to run multiple simulations
num = 10;
in(1:num) = Simulink.SimulationInput(model);

% Specify any directory where the H5 files will be created for every run
currDir = '/tmp'; % any directory

for i = 1:num
    % This will only work with local pools
    in(i).PostSimFcn = @(x) locHandleSimscapeLTF(model, x, currDir, i); 
end
out = parsim(in);

for idx = 1:numel(out)
    simlog = simscape.logging.import(out(idx).SimscapeFileName);
    sscexplore(name);
end

function newOut = locHandleSimscapeLTF(model, out, dirName, runId)
    % All the logged variables along with simlog should be part of 'newOut' object 
    loggedVars = out.who;
    newOut = struct;
    for i = 1 : numel(loggedVars)
        loggedData = out.(loggedVars{i});
        if isa(loggedData, 'simscape.logging.Node')
		    % Specify any file name with .h5 extension
            filename = [model '_simlog_file_' num2str(runId) '.h5']; 
            simscapeFileName = fullfile(dirName, filename);
			
			% Export simlog to H5 file
            simscape.logging.export(loggedData, simscapeFileName);
            newOut.SimscapeFileName = simscapeFileName;
        else
            newOut.(loggedVars{i}) = out.(loggedVars{i});
        end
    end
end
 

関連するトピック