mcpField
A
authoring-simulink-inputs

authoring-simulink-inputs

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

authoring-simulink-inputs について

Simulink モデル向けの合成入力信号を生成するスキルです。`createInputDataset` で Dataset を作成し、信号メタデータを保ちながら入力端子に波形を設定します。MATLAB コードとデータセットを出力しますが、シミュレーションの実行や既存ファイルの読み込みは行いません。

主な機能

  1. 01合成入力波形の生成
  2. 02Simulink Dataset の入力設定
  3. 03信号メタデータと型の維持
  4. 04timeseries と timetable に対応
  5. 05MATLAB コードと概要の出力

活用シーン

  1. 01ランプまたは正弦波入力の作成
  2. 02Signal Editor シナリオの準備
  3. 03ゼロ値の雛形データの置き換え

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/simulink-agentic-toolkit --skill authoring-simulink-inputs

インストール後、Claude Code で/authoring-simulink-inputsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
references/
dataset-patterns.md
signal-patterns.md

詳細

作成者入力信号

createInputDataset をひな形として使用し、すべての信号メタデータを保持しながら、意味のある波形を設定して Simulink モデル用の入力信号データセットを作成します。

使用する場面

  • ユーザーが、モデルの入力ポート向けに合成波形(ステップ、ランプ、正弦波、チャープ、パルス、ノイズ、定数)の生成または作成を依頼した場合
  • ユーザーが、createInputDataset で作成した Dataset に意味のある信号データを設定したい場合
  • ユーザーが、Signal Editor シナリオ用の信号を必要としている場合
  • ユーザーが、自然言語で入力信号の動作を説明した場合(例:「0 から 10 までのランプ」、「5 Hz の正弦波」)
  • ユーザーが、入力ポート向けにtimetable ベースの入力信号を必要としている場合
  • ユーザーが、関数呼び出しのタイミングを設定するか、トリガー/イネーブル入力ポートの信号を構成する必要がある場合
  • ユーザーが、ゼロで埋められたひな形のデータを現実的な波形に置き換えたい場合

使用しない場面

  • ユーザーがモデルのシミュレーション、実行、または出力のプロットを希望している場合 — 代わりに simulating-simulink-models を使用してください。このスキルは入力データを作成するだけで、sim() を実行したりプロットを生成したりすることはありません。
  • ユーザーが既存のファイル(CSV、MAT、スプレッドシート、.mat ワークスペース)からデータを読み込み、インポート、または読み取りたい場合 — 保存先がモデルの入力ポートであっても同様です。このスキルは新しい合成波形をゼロから生成するものであり、既存の記録データや測定データを読み取ったり変換したりするものではありません。

出力

このスキルは次のものを生成します。

  1. MATLAB コード — Dataset を生成して返すローカル関数(再現可能で編集可能。ワークスペースをクリーンに保ちます)
  2. Dataset 変数(ds) — シミュレーションですぐに使用できる、データが設定済みの Simulink.SimulationData.Dataset がベースワークスペースに作成されます
  3. 概要 — 各要素の名前、データ型、波形形状、値の範囲を簡潔に説明します

Dataset を使ってシミュレーションするには、simulating-simulink-models スキルのワークフロー(SimulationInput → setExternalInput → sim)に従ってください。

必ず守るルール

  1. createInputDataset から開始し、呼び出しは正確に 1 回だけにする — Dataset をゼロから構築してはいけません。モデルごとに createInputDataset を 1 回呼び出します(ダイアグラムの更新が実行されます)。複数の Dataset を作成する場合は、createInputDataset を再度呼び出すのではなく、返されたひな形をループ内で複製してください
  2. ひな形のメタデータを保持する — 新しい timeseries はすべて origEl.DataInfo.Interpolation と origEl.DataInfo.Units をコピーする必要があります。timetable の場合は、origEl.Properties.VariableContinuity をコピーしてください。これらを省略するとバグになります
  3. 要素はその場で置き換える — timeseries の場合:ds{k} = ts。timetable の場合:ds = ds.setElement(k, tt, origEl.Properties.Description) — addElement は決して使用しないでください
  4. データ型を尊重する — ひな形の型(double、single、整数、固定小数点)に合わせるには、cast(data, 'like', origEl.Data) を使用してください。boolean 入力ポートには true(size(t)) を直接使用してください
  5. 補間を正しく設定する — 連続信号(正弦波、ランプ、チャープ)には線形補間を、離散信号(ステップ、パルス、boolean、整数、ノイズ)にはゼロ次ホールドを使用してください。ひな形の補間設定は入力ポートの Interpolate プロパティを反映しているため、信号の性質から別の設定が必要な場合を除き、そのまま保持してください
  6. 生成ロジックはすべて関数内に収める — ベースワークスペースに残す変数は Dataset(シミュレーションする場合は simIn/simOut も)だけにしてください。中間変数(t、dt、origEl、ts、signalData、k)はすべて関数スコープ内に置いてください
  7. ユーザーデータを破壊しない — clear、clearvars、clear all、bdclose all は決して呼び出さないでください。ユーザーは既存の変数、モデル、または図を開いている可能性があります。ワークスペースから何も削除せず、追加だけを行ってください

ワークフロー

開始地点を判断します。 常にステップ 1 から始める必要はありません。ユーザーがすでに用意しているものを確認してください。

ユーザーの現在の状態開始地点
既存の Dataset もスクリプトもなく、新規に開始するステップ 1
Dataset 変数はあるが、空またはひな形(すべてゼロ、またはプレースホルダーデータ)であるステップ 2
一部の信号が入力された Dataset はあるが、修正が必要(形状、データ型、補間が間違っている)ステップ 2 — 問題のある要素を確認し、その場で修正する
動作するスクリプトはあるが、シナリオや信号を追加したいステップ 2 または「複数の Dataset の作成」
完成した Dataset はあるが、シミュレーションが失敗するまずエラーを診断する — 多くの場合、メタデータの不一致(補間、データ型、単位)が原因で、ステップ 2 で修正できます

スキャフォールドとは、createInputDataset が返す Dataset です。各インポートに 1 つの要素が含まれており、正しいメタデータ(データ型、補間方法、単位、信号次元)が事前に設定されていますが、時間サンプルはプレースホルダー(通常は値がゼロの 2 行)のみです。このワークフローでは、メタデータを保持したまま、プレースホルダーデータを意味のある波形に置き換えます。

1. スキャフォールドを作成する(関数内)

データ生成コードはすべてローカル関数に記述します。呼び出し元は関数を呼び出し、データが入力された Dataset を受け取ります。

ds = buildInputs('modelName');

function ds = buildInputs(mdl)
    ds = createInputDataset(mdl);
    % — or timetable format —
    % ds = createInputDataset(mdl, 'DatasetSignalFormat', 'timetable');

    stopTime = str2double(get_param(mdl, 'StopTime'));
    dt = 0.01;
    t = (0:dt:stopTime)';

    % ... populate elements (Step 2) ...
end

createInputDataset が失敗する場合(モデルをコンパイルできない場合)は、model_read を使用してモデルのインポートブロックを確認し、モデル構造から判断できない型や次元の情報についてユーザーに尋ねます。

2. 各要素にデータを入力する(同じ関数内)

メタデータを保持したまま、スキャフォールドのプレースホルダーデータを意味のある信号波形に置き換えます。各要素に対して、次の手順を実行します。

  1. 元の要素を取り出します(origEl = ds{k})。
  2. 波形を生成し、cast(data, 'like', origEl.Data) で型変換します — 固定小数点を含むすべての型で動作します。
  3. 新しい timeseries または timetable を作成します。
  4. origEl から DataInfo.Interpolation と DataInfo.Units(timeseries の場合)、または VariableContinuity(timetable の場合)をコピーします。
  5. インプレースで置き換えます。timeseries の場合は ds{k} = ts、timetable の場合は ds = ds.setElement(k, tt, origEl.Properties.Description) を使用します。

完全なコードパターンについては、references/signal-patterns.md の「Dataset Assembly」セクションを参照してください。

複数の Dataset の作成

createInputDataset を一度呼び出し、関数内のループでスキャフォールドを複製します。完全なパターンについては、references/dataset-patterns.md の「Creating Multiple Datasets」セクションを参照してください。

バス信号インポート

モデルにバス信号インポートがある場合は、references/dataset-patterns.md の「Bus Signal Inports」セクションを参照してください。

関数呼び出しインポート

モデルに関数呼び出しインポートがある場合は、references/dataset-patterns.md の「Function-Call Inports」セクションを参照してください。

信号の種類

波形生成コード(正弦波、ステップ、ランプ、チャープ、パルス、ノイズ、定数、列挙型)については、references/signal-patterns.md を参照してください。

補間と連続性(明示的に設定 — スキャフォールドを上書きする場合のみ使用)

信号の性質timeseriestimetable
連続(正弦波、ランプ、チャープ)tsdata.interpolation('linear')"continuous"
離散(ステップ、パルス、ブール値)tsdata.interpolation('zoh')"step"

ガードレール

誤り問題である理由正しい方法
ブール型の有効化に ones(size(t)) を使用するdouble 型が作成され、型の不一致でシミュレーションが失敗しますtrue(size(t)) を使用します
バスのスキャフォールドで構造体のフィールドを無視するバス要素が欠けているか、型が正しくないため、シミュレーションエラーが発生します各フィールドのメタデータを保持しながら、構造体のすべてのフィールドに値を設定します
スキャフォールドのデータ行を信号幅として扱うスキャフォールドの [2 1] データは、2 要素のベクトルではなく、スカラーの時刻サンプルが 2 つあることを意味します信号幅には size(origEl.Data, 2) を使用します。行はプレースホルダーの時刻サンプルです
列挙型データで「補間をオフにする」エラーが発生するSimulink では、timeseries で zoh が設定されていても、列挙型データを受け取る Inport ブロックに Interpolate='off' が必要ですこれはデータではなくモデルの修正です。シミュレーションの前に simIn.setBlockParameter(portPath, 'Interpolate', 'off') を使用します

Copyright 2026 The MathWorks, Inc.


コメント