Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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

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

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

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

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

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

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

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

parfor i=1:2 
   model = 'my_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) '.mldatx']; 
   simscape.logging.export(simOut.get('simlog'), file); 
end

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

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

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

スクリプトを実行する前に、ディスクへのストリーミングが有効になっていることを確認します。[基本設定] ダイアログ ボックスを開き、[Simscape] を選択してから、[一時ディスク ディレクトリへのデータのストリーミング] チェック ボックスをオンにします。

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

% Specify any directory where the MLDATX files will be created for every run
logDir=fullfile(cd, 'tmp'); % current directory
mkdir(logDir)
for i = 1:num
    % This will only work with local pools
    in(i).PostSimFcn = @(x) locHandleSimscapeLTF(model, x, logDir, i);
end

out = parsim(in);

for idx = 1:numel(out)
    simlog = simscape.logging.import(out(idx).SimscapeFileName);
    sscexplore(simlog);
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 .mldatx extension
            filename = [model '_simlog_file_' num2str(runId) '.mldatx'];
            simscapeFileName = fullfile(dirName, filename);

            % Export simlog to MLDATX file
            simscape.logging.export(loggedData, simscapeFileName);
            newOut.SimscapeFileName = simscapeFileName;
        else
            newOut.(loggedVars{i}) = out.(loggedVars{i});
        end
    end
end
 

参考

関連するトピック