mcpField
B
building-simulink-models

building-simulink-models

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

building-simulink-models について

building-simulink-modelsは、Simulink、System Composer、Simscape、Stateflowのモデル編集向けスキルです。読み取り、編集、構造チェックを段階的に進めてモデルを構築します。

主な機能

  1. 01ブロックの追加、接続、設定
  2. 02Stateflowチャート内部の編集
  3. 03System Composerアーキテクチャの構築
  4. 04Simscape物理接続の配線
  5. 05モデル構造と接続状態の確認

活用シーン

  1. 01新しいSimulinkサブシステムの構築
  2. 02ブロックパラメーターと信号の変更
  3. 03Stateflowの状態と遷移の作成
  4. 04物理モデルの接続確認

インストール

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

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

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

同梱ファイル

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

manifest.yaml
references/
simscape.md
stateflow.md
system-composer.md

詳細

モデルの構築

Simulink、System Composer、Simscape、Stateflow チャート内部の構造を変更する場合は、すべて model_edit を使用してください。

使用する場合

  • モデル内のブロックを追加、接続、削除、置換する場合
  • ブロックパラメーター、信号プロパティ、モデル設定を構成する場合
  • Stateflow チャート内部(状態、遷移、ジャンクション、データ、イベント、メッセージ、関数)を作成または編集する場合
  • System Composer のアーキテクチャモデルを構築する場合
  • Simscape の物理接続を配線する場合

使用しない場合

  • パラメーター値を照会する場合 → model_query_params を使用してください
  • 変数参照を数値に解決する場合 → model_resolve_params を使用してください

ライブラリとポリシーの前提条件 — ブロッキングゲート

最初に実行してください。他のツールを呼び出す前に、結果を評価してください。 ゲートの確認についてユーザーに説明しないでください。結果に基づいて、説明なしで続行してください。

library.settingsLookup() を呼び出して、カスタムライブラリの設定を確認してください。絶対パスが解決済みの構造体が返されます。

  • found — ライブラリファイルが見つかったかどうか(satk-libraries.json または従来の reuse-libraries.json)
  • enabled — カスタムライブラリが設定されているかどうか
  • gatePass — ゲートが満たされているかどうか(構築に進めるかどうか)
  • kgIndexPath — library-kg/index.md の絶対パス
  • librariesPath — ライブラリファイルの絶対パス
  • policyPath — block-policy.json の絶対パス
  • dataRoot — .satk/ を含むディレクトリの絶対パス

結果を解釈してください。

  • found: false → カスタムライブラリは設定されていません。標準の Simulink ブロックを使用して進めてください。
  • gatePass: true, found: true → ブロックを検索するために kgIndexPath を読み込んでから、計画と編集を行ってください。
  • gatePass: false → setup-custom-libraries を呼び出して、ナレッジインデックスを作成してください。

ゲートの合否を述べるのではなく、各確認項目と結果について、意味のある説明を表示してください。

ゲートを通過するまでは、モデルの読み込み、計画、編集を開始しないでください。

ワークフロー

  1. ライブラリとポリシーの前提条件を確認する: 上記のブロッキングゲートを参照してください。ゲートを通過するまでは進めないでください。
  2. ライブラリブロックを検索する: 使用予定のブロックタイプをすべて列挙し、.satk/library-kg/index.md と該当するカテゴリページを検索して、条件に合うライブラリブロックをそれぞれ見つけてください。
  3. 最初に読み込む: 対象スコープで model_read を使用し、ブロック ID を取得して既存のトポロジーを把握してください。
  4. データフローを計画する: 複雑な編集では、入力 → 処理 → 出力を図示してから、ステップ 1 と 2 で特定したブロックに対応付けてください。
  5. 編集する: model_edit を使用し、一度に 1 つのサブシステムレベルを対象として操作してください。
  6. 検証する: スコープで model_read を使用し、構造が意図どおりであることを確認してください。
  7. 接続を確認する: スコープ内の編集がすべて完了したら、model_check を実行して、未接続のポートや未接続のラインがないか確認してください。重大度が error の問題は修正してください。

model_edit が status: partial を返した場合: 編集がすべて完了するのを待たずに、直ちに model_read と model_check の両方を実行してください。

ref による操作の連鎖

ref でブロックに名前を付け、同じ呼び出し内の後続の操作では #ref を使ってそのブロックを参照してください。

[{"op": "add_block", "type": "Gain", "name": "MyGain", "ref": "g1"},
 {"op": "connect", "target": "blk_5.y1 -> #g1.u1"}]

SF スコープでは、#ref の参照にポートはなく、.y1/.u1 のサフィックスは付けません(references/stateflow.md を参照)。

レスポンスの created マップには、ref → blk_id(SF スコープでは ref → sf_X)が表示されます。後続の呼び出しでは、返された ID を使用してください。#ref が使えるのは 1 回の呼び出し内のみです。

ガードレール

  • model_overview または model_read に表示された名前から、ブロックのパス文字列を手動で作成しないでください。ブロック名には目に見えない改行や末尾の空白が含まれることがあり、hilite_system、open_system、get_param が失敗する原因になります。代わりに、blk_X ID からパスを解決してください。
    % blk_42 → use the number after "blk_" as the SID
    blockPath = Simulink.ID.getFullName('<ModelName>:42');
    hilite_system(blockPath)
    open_system(blockPath)
    get_param(blockPath, 'BlockType')
    
  • ユーザーから明示的に依頼されない限り、ブロックの配置に Simulink.BlockDiagram.arrangeSystem を呼び出したり、set_param を使用したりしないでください。model_edit には自動レイアウトエンジンが組み込まれており、呼び出しのたびに自動で実行されます。
  • model_edit には必ず layout_mode を指定してください。空のスコープ(新しいモデルルート、または新しく作成したサブシステム)にブロックを配置する場合は、ブロックを最適に配置するため "full" を使用してください。既存のブロックがあるスコープにブロックを追加する場合は、既存の位置を維持するため "incremental" を使用してください。
  • 各 model_edit 呼び出しは、スコープによって決まる単一のドメイン(Simulink、System Composer、または Stateflow)でのみ動作します。Chart ブロックを追加してから内容を作成するには、2 回呼び出します。まず SL スコープで Chart ブロックを追加し、次に SF スコープで内部要素を作成します。呼び出しの間に model_read を使用して、チャートの sf_X スコープ ID を確認してください。
  • 数値をハードコードする代わりに、意味のある名前の変数(例:Kp_SpeedController)を使用してください。モデルワークスペースまたは .m 初期化スクリプトで変数を定義してください。
  • model_edit を迂回するために、set_param/add_block を指定して evaluate_matlab_code を使用しないでください。自動レイアウト、取り消し履歴、エラー復旧が省略されます。
  • ユーザーから別の方法を明示的に求められた場合や、モデルがライブラリの場合を除き、まだ開いていないモデルを開くときや新しいモデルを作成するときは、load_system ではなく open_system を使用してください。これにより、編集中の内容をユーザーがリアルタイムで確認できます。

命名規則

ブロック、信号、変数には、コード生成に安全な名前を使用してください。

  • 使用できる文字は a-z、A-Z、0-9、アンダースコア(_)のみです。
  • 数字で始めないでください。
  • 先頭または末尾のアンダースコアや、連続するアンダースコアは使用しないでください。
  • 32 文字未満の名前を推奨します(コード生成ターゲットによっては必須です)。

ブロックの種類

type フィールドには、ブロックの表示名を使用してください。ライブラリのパスを作成したり、推測したりしないでください。

  • カスタムライブラリブロック(satk-libraries.json から): type フィールドと ReferenceBlock フィールドの両方を指定してください。type にはブロックの表示名を、ReferenceBlock にはライブラリ KG に記載された完全なライブラリパスを設定してください。

  • ツールボックス KB ブロック(activeToolboxes から): カスタムライブラリブロックと同じ方法で使用してください。ライブラリ KG のツールボックスカテゴリページに記載された type フィールドと ReferenceBlock フィールドを参照してください。

  • 組み込み Simulink ブロック: BlockType をそのまま使用してください:Gain、Sum、Constant、Integrator、SubSystem、Scope

  • ライブラリブロック(Simscape、Aerospace、DSP、Communications など): Simulink ライブラリブラウザーに表示される名前を使用してください:Voltage Source、Resistor、DC Motor、Solver Configuration、6DOF (Euler Angles)

  • model_edit が INVALID_TYPE を返した場合: MATLAB ドキュメントに記載された完全なライブラリパスに切り替えてください(例:ee_lib/Sources/Voltage Source)

[{"op": "add_block", "type": "In", "ReferenceBlock": "customLib_Portsandsubsystems/In", "name": "Voltage", "ref": "v1"},
 {"op": "add_block", "type": "Gain", "ReferenceBlock": "customLib_Mathoperations/Gain", "name": "Kp", "ref": "g1"},
 {"op": "add_block", "type": "Add", "ReferenceBlock": "customLib_Mathoperations/Add", "name": "SumErr", "ref": "s1"},
 {"op": "add_block", "type": "Out", "ReferenceBlock": "customLib_Portsandsubsystems/Out", "name": "Output", "ref": "o1"}]
[{"op": "add_block", "type": "Voltage Source", "name": "V1", "ref": "v1"},
 {"op": "add_block", "type": "Resistor", "name": "R1", "ref": "r1"},
 {"op": "add_block", "type": "Electrical Reference", "name": "Gnd", "ref": "gnd"},
 {"op": "add_block", "type": "Solver Configuration", "name": "Solver", "ref": "sc"}]

レビューゲート

スコープの編集がすべて完了したら、次の点を確認してください。

  • model_check で重大度が error の問題(未接続のポート、未接続のライン)がないこと
  • すべての ref 名が created マップ内の blk_id に解決されており、後続の呼び出しに未解決の #ref 参照がないこと
  • Stateflow チャートは、レイアウト適用前に lint に合格していること(checks='["stateflow_lint"]' を指定した model_check を使用)
  • model_edit が一度でも status: partial を返した場合、model_read でスコープの構造が完成していることを確認してください

ドメイン固有のルール

以下のドメインを扱う場合は、編集する前に対応するリファレンスファイルを読んでください。

  • Stateflow チャート -> references/stateflow.md — model_edit はチャートの内部をネイティブに編集します。チャート(sf_X またはチャートの blk_X)をスコープに指定し、同じ操作を使用します。SF 要素には add_block、遷移にはポートなしの connect、プロパティには configure を使用してください。リファレンスでは、SF 固有の構文、スコープ指定、LabelString のパターン、および SL と SF の 2 回呼び出しのワークフローについて説明しています。
  • System Composer アーキテクチャモデル -> references/system-composer.md — systemcomposer.createModel でモデルを作成してから、model_edit を使用します。コンポーネントには type: "SubSystem" を指定し、ポートには Bus Element ブロックを使用してください。リファレンスでは、コンポーネントの作成、ポートの配線、およびビヘイビアモデルの生成について説明しています。
  • Simscape 物理モデル -> references/simscape.md — 物理接続には双方向の <-> 構文を使用します。リファレンスでは、接続のセマンティクス、ポートのパターン、および初期ターゲット変数について説明しています。

Copyright 2026 The MathWorks, Inc.


コメント