inject-faults について
inject-faultsは、Simulink.fault APIを使ってSimulinkモデルの故障を追加・管理するMATLABスキルです。シミュレーションによる安全分析、FMEAのトレーサビリティ、正常時と故障時の動作比較に対応します。
主な機能
- 01ブロックポートへの故障注入
- 02故障動作とトリガーの設定
- 03故障注入の有効化・無効化
- 04故障とFMEA故障モードの関連付け
- 05故障仕様レポートの生成
活用シーン
- 01センサーやアクチュエーター故障のシミュレーション
- 02故障に対するコントローラーのロバスト性確認
- 03正常時と故障時のシミュレーション比較
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ matlab/ simulink-agentic-toolkit --skill inject-faultsインストール後、Claude Code で/inject-faultsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/advanced-operations.mdfault-behaviors.mdpreflight-and-adding-faults.mdsimulation-workflows.mdtest-case-integration.mdtriggers-and-conditionals.md詳細
故障注入
Simulink.fault API とともに evaluate_matlab_code を使用して、Simulink モデルにプログラムで故障を注入します。故障はブロックポートの信号値を上書きし、ハードウェア障害、センサー故障、アクチュエーターの誤動作をシミュレートします。
使用する場面
- 安全性解析のために、センサーのスタックアット故障、ノイズ、バイアスを注入する(Simulink、Simscape、System Composer)
- シミュレーションを通じて FMEA の故障モードを検証する
- アクチュエーターやセンサーの故障に対するコントローラーのロバスト性をテストする
- 故障ロジックを定義する前に、FMEA のトレーサビリティ用の故障プレースホルダー(動作なし)を追加する
- 故障のトリガー条件(時間指定、条件付き、常時有効)を設定する
- 自動テスト用の故障シナリオを作成する
- 正常時と故障時の動作を比較する
- 故障を FMEA の故障モードセルにリンクする
- 故障仕様レポートを生成する
- Simulink Fault Analyzer を持たないチーム向けに、故障動作を埋め込んだモデルをエクスポートする
- カスタム故障動作ライブラリを登録する
- 参照モデル、サブシステム、またはリンクされたライブラリの故障情報を親モデルに同期する(resync / sync / synchronize faults / update fault references とも呼ばれます)
使用しない場面
- FMEA スプレッドシートや安全性解析ドキュメントを作成する場合 →
manage-safety-analysisを使用します - モデル構造を構築または編集する場合 →
building-simulink-modelsを使用します - 標準(故障なし)シミュレーションを実行する場合 →
simulating-simulink-modelsを使用します - 合否テストを作成する場合 →
testing-simulink-modelsを使用します
プローブ
hasFA = ~isempty(which('Simulink.fault.addFault'));
fprintf('Simulink Fault Analyzer available: %d\n', hasFA);
重要な概念
- 故障:ブロックポート(入力ポートまたは出力ポート)に適用され、信号値を上書きする変更です。
- 動作なしの故障:故障箇所を記録するプレースホルダーですが、シミュレーションはできません。
- 動作ありの故障:シミュレーション可能な関連付けられた動作モデルを持つ故障です(
references/fault-behaviors.mdを参照)。 - 故障モデル:故障動作サブシステムを含む
.slxファイルです。 - トリガー:故障が有効になるタイミングです(常時有効、時間指定、条件付き、手動)。
- 故障情報ファイル:
<ModelName>_faultInfo.xmlに、モデルとともにすべての故障メタデータが保存されます。
重要な制約
- 故障はブロックではなく、ブロックのポートに設定します。
get_param(blockPath, 'PortHandles')を使ってポートハンドルを取得する必要があります。 _faultInfo.xmlファイルを直接編集してはいけません。 故障定義の変更には、必ず MATLAB API を使用してください。- 故障名は有効な MATLAB 識別子でなければなりません(スペース、スラッシュ、特殊文字は使用できません)。キャメルケースまたはパスカルケースを使用してください。
- 故障動作モデル名(
addBehaviorの第 1 引数)も、有効な MATLAB 識別子でなければなりません。 - シミュレーションで故障の有効/無効を切り替えるために、
Simulink.fault.deleteAllまたはSimulink.fault.deleteFaultを使用してはいけません。 故障を削除すると、故障オブジェクト、その動作モデル(.slx ファイル)、トレーサビリティリンクが永久に破棄されます。正常時の実行ですべての故障注入を無効にするにはSimulink.fault.injection(model, false)を使用し、再度有効にするにはSimulink.fault.injection(model, true)を使用してください。特定の要素の故障を無効にするにはSimulink.fault.enable(modelElement, false)を使用してください。 - 未サポート: Stateflow チャート、故障モデル、またはオブザーバーモデル内の故障。
ワークフロー
- モデルを理解します。
model_overviewとmodel_readを使用して、脆弱な信号経路、つまり単一障害点となるアクチュエーター、センサーのフィードバック、広範囲に分岐する計算量を特定します。 - 事前確認を行います。 コンパイル済みのポートプロパティを照会し、信号の互換性を確認します。モデルがまだコンパイルされていない場合は、コンパイルする前にユーザーに確認します。
references/preflight-and-adding-faults.mdを参照してください。 - ポートハンドルを取得します。 故障はブロックパスではなく、ポートハンドルに関連付けます。
get_param(blk, 'PortHandles')を使用します。 - 故障を追加します。
Simulink.fault.addFault(portHandle, Name=..., Description=...)を呼び出します。references/preflight-and-adding-faults.mdを参照してください。 - 動作を追加します。
addBehavior(fault, modelName, FaultBehavior='mwfaultlib/...')を呼び出します。references/fault-behaviors.mdを参照してください。 - トリガーを設定します。
fault.TriggerTypeと対応するプロパティを設定します(例:Timed にはStartTime、Conditional にはConditional、Manual にはTriggerActive)。references/triggers-and-conditionals.mdを参照してください。 - 保存します。
Simulink.fault.save('ModelName')を呼び出します。 - シミュレーションを実行します。
Simulink.fault.injection(mdl, true)で故障注入を有効にしてから、sim(...)を実行します。references/simulation-workflows.mdを参照してください。
ガードレール
必ず行うこと
- 故障を注入する前に、
model_readを使用して対象ブロックを特定します - 故障を作成する前に、コンパイル済みポートの情報を確認します(
references/preflight-and-adding-faults.mdを参照) - トリガープロパティを設定する前に、動作を追加します
- 故障を変更した後は、
Simulink.fault.save('ModelName')で保存します - 故障を含むシミュレーションを実行する前に、
activate(fault)で故障が有効であることを確認します - 分析後は、
Simulink.fault.injection(mdl, false)で故障注入を無効にします - 故障注入箇所のテスト入力信号がゼロ以外であることを確認します
mwfaultlibの動作を選択する前に、バスとの互換性を確認します
絶対に行わないこと
Simulink.fault.Fault()コンストラクターを使用しないでください。代わりにSimulink.fault.addFault()を使用しますaddBehaviorの故障モデル名引数に、ライブラリブロックのパス(例:mwfaultlib/Stuck-at-Ground)を渡さないでください。代わりにFaultBehaviorの名前と値のペアを使用します- 故障シミュレーションがオフだと決めつけないでください。各正常動作の実行前に確認します
- 「重要な制約」セクションの項目に違反しないでください
事前に確認すること
- 理由を問わず、設計モデルを変更する前(ブロックの追加、サンプル時間の変更、信号の再接続など)
- 共有されている可能性のあるモデルで故障を有効にする前(モデルの動作が変更されます)
- 既存の故障を削除する前(動作モデルの .slx も削除されます)
fault.Persistent = trueを有効にする前(シミュレーション中に故障を元に戻せなくなります)
トラブルシューティング
| 問題 | 原因 | 対処方法 |
|---|---|---|
Assertion failed in Simulink.fault.Fault() | Fault() コンストラクターを直接使用しないでください | 代わりに Simulink.fault.addFault(portHandle, Name=..., Description=...) を使用してください |
Fault name must follow MATLAB variable naming conventions | 名前にスペースまたは特殊文字が含まれています | スペースを使わず、キャメルケースまたはパスカルケースを使用してください(例:SensorStuckAtZero) |
Invalid name for a fault model | 振る舞いモデル名に無効な文字が含まれています | シンプルな MATLAB 識別子を使用してください(例:Stuck-at-Zero ではなく StuckAtZero) |
Unable to add fault... only to block input or output ports | ポートハンドルではなく、ブロックパスまたはハンドルが渡されました | ph = get_param(blockPath, 'PortHandles'); ph.Outport(1) を使用してください |
Target signal is a continuous-time signal | Fault Analyzer は、連続ブロックに接続される連続信号にはフォールトを注入できません | references/advanced-operations.md の「連続時間信号の判断ツリー」を参照してください |
Output dimensions do not match または Data type mismatch | フォールト定数のサイズまたは型が対象信号と一致しません | references/fault-behaviors.md の「ベクトルおよび行列のフォールト値」を参照してください |
| バス信号のフォールトが非 Ground 振る舞いで失敗する | mwfaultlib の大半の振る舞いはスカラー専用です | バス全体には Stuck-at-Ground を使用するか、BusElement を使用して個々の要素を対象にしてください |
| 同じポートに複数のフォールトがあるのに、1 つしか発動しない | 一度にアクティブにできるフォールトはポートごとに 1 つだけです | activate(fault) を使用して選択するか、異なる StartTime の値を使用してください |
| フォールトは存在するが、シミュレーションが正常に実行される | フォールト注入が有効になっていないか、フォールトがアクティブではありません | Simulink.fault.injection('Model', true) を呼び出し、activate(f) を実行してください |
リファレンスファイル
| ファイル | 内容 |
|---|---|
references/preflight-and-adding-faults.md | ポートの検査、コンパイルチェック、フォールトの追加、ポートハンドルの解決、フォールトオブジェクトのプロパティとメソッド |
references/fault-behaviors.md | 組み込みの振る舞い、カスタム振る舞い、バスのフォールト、ベクトル/行列のフォールト、検出、データ入力ポートのソース |
references/triggers-and-conditionals.md | トリガーの種類、条件の作成、条件/シンボルオブジェクトのプロパティ |
references/simulation-workflows.md | シミュレーションの実行、正常時とフォールト発生時の比較、選択的なフォールトの切り分け |
references/advanced-operations.md | FMEA とのリンク、レポート、エクスポート、削除、連続時間に関する回避策、参照モデル/サブシステム/ライブラリからのフォールトの同期 |
references/test-case-integration.md | Simulink Test ケースへのフォールトセットの追加(R2024a 以降) |
Copyright 2026 The MathWorks, Inc.
コメント
Markdown 対応