このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ログ データのディスクへのストリーミング
シミュレーション データをログに記録する場合、データをワークスペース変数に格納するか、データをディスク上の一時ファイルにストリーミングして、ワークスペース変数でその一時ファイルをポイントすることができます。どちらの場合でも、ログに記録されたシミュレーション データとは、シミュレーション ログ変数を介してやりとりします。
ワークスペースにデータを保存するとメモリが消費されます。ログに記録されたデータをディスクにストリーミングすると、システム メモリの制限を受けなくなるため、データ ログ容量が大幅に増加します。
すべてのモデルについて、データのディスクへのストリーミングを有効にするには、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