simulating-simulink-models について
simulating-simulink-modelsは、Simulinkシミュレーションの設定と実行を支援するスキルです。パラメーターの上書き、カスタム入力、バッチ実行が必要なモデル利用者向けで、ログ信号にもアクセスできます。
主な機能
- 01モデルを変更せずにパラメーターを上書き
- 02カスタム入力信号の受け渡し
- 03バッチまたは並列シミュレーション
- 04Fast Restartによる反復実行
- 05ログ信号データの取得
活用シーン
- 01パラメーター別のモデル出力比較
- 02モデルへのカスタム信号入力
- 03パラメータースイープの一括実行
- 04分析用のログ信号抽出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ simulink-agentic-toolkit --skill simulating-simulink-modelsインストール後、Claude Code で/simulating-simulink-modelsを入力して読み込まれたか確認します。
同梱ファイルmanifest.yaml
詳細
sim コマンドによる Simulink モデルのシミュレーション
シミュレーションを非破壊的に設定する必要がある場合に、このスキルを使用します。対象には、パラメーターのオーバーライド、カスタム入力、バッチ実行、構造化出力へのアクセスが含まれます。永続的に再利用できる合否判定付きの動作テスト(特に個々のサブシステムのテスト)には、代わりに testing-simulink-models を使用してください。設定を行わない単純な単発シミュレーションであれば、このスキルを使わず、直接 sim() を呼び出せば十分です。
使用する場合
- モデルまたはブロックのパラメーターを非破壊的にオーバーライドする場合(setVariable、setBlockParameter、setModelParameter)— .slx ファイルを変更せずに行えます
- Dataset を使って、ルートレベルの Inport ブロックにカスタム入力信号を渡す場合(setExternalInput)
- パラメータースイープやバッチシミュレーションを実行する場合(SimulationInput 配列、parsim、Fast Restart)
- シミュレーション後の分析で、ログ記録された信号データ(logsout)にアクセスする場合
使用しない場合
- パラメーターのオーバーライドやカスタム入力を伴わない単純な単発シミュレーション — このスキルを使わず、
sim('ModelName')を直接呼び出せます - Gherkin ベースの宣言型テストを作成する場合 →
testing-simulink-modelsを使用してください - 個々のサブシステムまたはコンポーネントをテストする場合 →
testing-simulink-modelsを使用してください(Simulink Test が必要です。ハーネスを自動作成し、サブシステムのみをコンパイルするため、モデル全体を常にコンパイルするsim()よりもはるかに高速です) - ブロックの追加、接続、削除を行う場合 →
building-simulink-modelsを使用してください - 未接続ポートがないかモデル構造を確認する場合 →
model_checkツールを直接使用してください - モデルの動作から要件を生成する場合 →
generate-requirement-draftsを使用してください
最小限の実行パターン
常に Simulink.SimulationInput と Simulink.SimulationOutput を使ってシミュレーションしてください。
in = Simulink.SimulationInput('MyModel');
in = in.setModelParameter('StopTime', '10');
out = sim(in);
パラメーターの設定
SimulationInput のメソッドを使ってシミュレーションを設定してください。
% Model-level parameters (StopTime, SolverType, SimulationMode, etc.)
in = in.setModelParameter('StopTime', '10', 'SolverType', 'Fixed-step');
% Block parameters — resolve path from blk_X ID (never type block names manually)
blkPath = Simulink.ID.getFullName('MyModel:5');
in = in.setBlockParameter(blkPath, 'Gain', '5');
% MATLAB workspace variables used by the model
in = in.setVariable('Kp', 1.2);
入力信号
Simulink.SimulationData.Dataset を使って、Inport ブロック経由で入力信号を渡します。要素はインデックスの位置によって Inport ブロックに対応付けられます。最初の要素はポート番号 1 の Inport に、2 番目の要素はポート番号 2 の Inport に対応し、以降も同様です。
dt = 0.01;
N = 1000;
t = dt*(0:N)';
u = sin(2*pi*t);
ts = timeseries(u, t);
ds = Simulink.SimulationData.Dataset;
ds{1} = ts;
in = in.setExternalInput(ds);
out = sim(in);
入力形式として timetable を使うこともできます。
secs = seconds(t);
tt = timetable(secs, u);
ds = Simulink.SimulationData.Dataset;
ds{1} = tt;
in = in.setExternalInput(ds);
ログデータの確認
まず who を使ってモデルが生成するログデータの種類を確認し、次に logsout 内の信号名を調べます。
in = Simulink.SimulationInput('MyModel');
out = sim(in);
% See what logging properties exist (logsout, yout, tout, etc.)
who(out)
% List individual signal names within logsout
disp(out.logsout.getElementNames);
ログデータへのアクセス
ログ記録された信号は out.logsout から利用できます。名前を指定して直接アクセスしてください。
% Plot a logged signal
plot(out.logsout.get('signalName').Values)
% Get time and data separately
sig = out.logsout.get('signalName').Values;
plot(sig.Time, sig.Data)
複数のシミュレーション
多数のシミュレーションを実行する場合は、Simulink.SimulationInput オブジェクトの配列を作成してください。
in = repmat(Simulink.SimulationInput('MyModel'),N,1);
for k = 1:N
in(k) = Simulink.SimulationInput('MyModel');
in(k) = in(k).setVariable('gain', gains(k));
end
out = sim(in);
反復スイープで高速リスタートを有効にする場合(モデルをコンパイルするのは 1 回だけです)。
out = sim(in, 'UseFastRestart', 'on');
並列シミュレーション(parsim)
複数のシミュレーションを並列実行するには、sim をループで呼び出す代わりに parsim を使用してください。
for k = 1:N
in(k) = Simulink.SimulationInput('MyModel');
in(k) = in(k).setVariable('gain', gains(k));
end
out = parsim(in);
parsim は、バッチ実行を高速化する 'UseFastRestart','on' もサポートしています。
ガードレール
- 決して
set_param、load_system、open_systemを使ってシミュレーションを実行しないでください — これらはすべてSimulationInputで置き換えられます。 - 決して
SimulationOutputへのアクセスをtry-catchやisfieldで囲まないでください —simは有効なオブジェクトを返すか、例外をスローします。SimulationOutputにisfieldメソッドはありません。 - 決して ログデータに不要な中間変数を作成しないでください —
out.logsout.get('name').Valuesで直接アクセスしてください。 SimulationInput/SimulationOutputの変数名には必ずin/outを使用してください。- 必ず Dataset を指定して
setExternalInputを使用してください — 変数のコンマ区切りリストを渡さないでください。
Copyright 2026 The MathWorks, Inc.