mcpField
S
simulating-simulink-models

simulating-simulink-models

github.com/matlab開発1.3k132 回インストール1 週間前に更新
リポジトリ

simulating-simulink-models について

simulating-simulink-modelsは、Simulinkシミュレーションの設定と実行を支援するスキルです。パラメーターの上書き、カスタム入力、バッチ実行が必要なモデル利用者向けで、ログ信号にもアクセスできます。

主な機能

  1. 01モデルを変更せずにパラメーターを上書き
  2. 02カスタム入力信号の受け渡し
  3. 03バッチまたは並列シミュレーション
  4. 04Fast Restartによる反復実行
  5. 05ログ信号データの取得

活用シーン

  1. 01パラメーター別のモデル出力比較
  2. 02モデルへのカスタム信号入力
  3. 03パラメータースイープの一括実行
  4. 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.


コメント