メインコンテンツ

モデル コールバック

R2026b

モデル コールバックは、モデルを読み込んだ後や保存した後などの指定したアクション ポイントで実行されます。

モデル コールバックを使用すると、MATLAB® ワークスペースでの変数の初期化やデータの読み込みのような一般的なタスクを実行できます。例については、自動的な変数の初期化とデータの読み込みを参照してください。

モデルのコールバックのほとんどは、ライブラリおよびサブシステム参照でサポートされます。ただし、それらのコンポーネントに設定できるのは、ライブラリまたはサブシステム参照に対して実行できるコールバックだけです。たとえば、ライブラリに対しては、シミュレーションの一部として呼び出される InitFcn コールバックは設定できません。ライブラリはシミュレートできないためです。これと同じ動作がサブシステム参照にも適用されます。

モデルのコールバックの作成

  1. Simulink® ツールストリップの [モデル化] タブの [設計] ギャラリーで、[プロパティ インスペクター] をクリックします。

  2. モデルまたは参照モデルの最上位階層で何も選択せずに、[プロパティ] タブの [コールバック] セクションに設定するコールバックを選択します。

    メモ

    ブロックのコールバックは、モデルのコールバックとは異なります。参照モデルのモデル コールバックを設定するのに Model ブロックを選択してはなりません。

  3. ボックス内に、コールバックで実行する関数を入力します。

プログラムによりモデルのコールバックを作成するには、関数 set_param を使用して、MATLAB コードをモデル コールバック パラメーターに割り当てます。

モデルのコールバック パラメーター

モデルのコールバック パラメーターコールバックが実行されるタイミング

PreLoadFcn

モデルを読み込む前。

パラメーターは、モデルを読み込んだ後に読み込まれるため、PreLoadFcn モデル コールバック内ではモデル パラメーターを使用しないでください。その代わりに、PostLoadFcn コールバックを使用して、モデル読み込み時にモデル パラメーターを操作してください。

このパラメーターに対するコールバック コードの定義は、モデルで使用される変数を読み込む際に役立ちます。

モデルを開かずに MATLAB スクリプトまたは関数からモデルを呼び出すには、load_system 関数を使用して、PreLoadFcn コールバックが実行されるようにします。

例については、自動的な変数の初期化とデータの読み込みを参照してください。

次のような制限があります。

  • PreLoadFcn コールバックでは、モデルがまだ読み込まれていないため、get_param 関数はモデル パラメーターの値を返しません。get_param 関数は代わりに以下を返します。

    • solver などの標準的なモデル パラメーターの場合は、既定値

    • add_param が追加されているモデル パラメーターの場合は、エラー メッセージ

  • プログラムでスコープにアクセスすることはサポートされていません。

PostLoadFcn

モデルを読み込んだ後。

このパラメーターに対するコールバック コードの定義は、読み込まれたモデルを必要とするインターフェイスを生成する際に役立つことがあります。

次のような制限があります。

  • PostLoadFcn コールバックで構造的な変更を行う場合、モデルに未保存の変更があることを示す Dirty フラグはコールバックで設定されません。モデルを閉じるときに、保存を求めるプロンプトは表示されません。

  • プログラムでスコープにアクセスすることはサポートされていません。

Simulink エディターはこのコールバックの実行後に開くため、PostLoadFcn コールバックはズーム倍率の設定などのモデル ビューの設定に適していません。モデルにズーム情報を保存し、特定のズーム倍率でモデルを開きます。

InitFcn

ブロック パラメーターが評価される前の更新フェーズ中。このコールバックは、モデルの更新中およびシミュレーション中に呼び出されます。

モデルの構造を編集するような InitFcn モデル コールバックは避けてください。これらのコールバックは、モデルの読み込みステータスに基づいて、実行されることも無視されることもあります。

参照モデルの内容を編集するような InitFcn モデル コールバックは避けてください。これを行うと、Simulink モデルのシミュレーションを実行した場合、エラーや不正確な結果などの予期しない動作が生じる場合があります。

InitFcn コールバックの詳細については、初期化関数を参照してください。

例については、MATLAB Function ブロックでの MATLAB 関数ファイルの呼び出しを参照してください。

StartFcn

シミュレーション フェーズの前。このコールバックは、モデルの更新中には呼び出されません。

このコールバックは、高速リスタートでシミュレーションを実行するたびに呼び出されます。

PauseFcn

シミュレーションの一時停止時。

ContinueFcn

シミュレーションを継続する前。

StopFcn

シミュレーションの終了時。

単一の Simulink.SimulationOutput オブジェクトを返すシミュレーションでは、StopFcn コールバックが実行されたときにシミュレーション結果は利用できません。単一の出力として返される結果を処理するには、Simulink.SimulationInput オブジェクトの PostSimFcn コールバックを使用します。詳細については、単一のシミュレーション出力を参照してください。

このコールバックは、高速リスタートでシミュレーションを実行するたびに呼び出されます。

PreSaveFcn

モデルを保存する前。

PostSaveFcn

モデルを保存した後。

PostSaveFcn コールバックで構造的な変更を行う場合、モデルに未保存の変更があることを示す Dirty フラグはコールバックで設定されません。モデルを閉じるときに、保存を求めるプロンプトは表示されません。

CloseFcn

ブロック線図を閉じる前。

ModelCloseFcn および DeleteFcn ブロック コールバックは、CloseFcn モデル コールバックの前に呼び出されます。

DestroyFcn ブロック コールバックは、CloseFcn モデル コールバックの後に呼び出されます。

参照モデルでのモデル コールバック

モデルの階層構造では、コールバックの実行は、最上位モデルとその参照モデルでそれぞれのコールバックが実行される順序が反映されます。たとえば、以下を仮定します。

  • モデル A:

    • アクセラレータ モードでモデル B を参照する

    • MATLAB ワークスペース内に変数を作成する PostLoadFcn コールバックがある

  • モデル B:

    • MATLAB ワークスペースをクリアする CloseFcn コールバックがある

    • ビルドされていないか期限が切れている

モデル A のシミュレーションによって、参照モデル B のリビルドがトリガーされます。モデル B をリビルドするときに、モデル B が開閉されることで、モデル B の CloseFcn コールバックが呼び出されます。この CloseFcn コールバックにより、モデル A の OpenFcn コールバックによって作成された変数も含めて MATLAB ワークスペースがクリアされます。

モデル B の CloseFcn コールバックを使用する代わりに、モデル A の StopFcn コールバックを使用して、モデルによって使用される変数を MATLAB ワークスペースからクリアすることも可能です。または、データのデータ ディクショナリを使用して、ベース ワークスペース内に変数を含める必要性をなくすことができます。

Model ブロックのシミュレーション モードは、参照モデルのモデル コールバックが実行されるタイミングに影響を与えます。

Model ブロックのシミュレーション モード参照モデルの動作
ノーマル

モデルのコンパイル中、ノーマル モードでシミュレートするように構成されている、まだ読み込まれていない各参照モデルが読み込まれます。

ほとんどの場合、ノーマルモードの各参照モデルは、それを参照する Model ブロックの数にかかわらず 1 回コンパイルされます。

モデル コールバックは、モデルが参照される回数に関係なく、一意の各モデルに対して 1 回実行されます。

モデルがコンパイルされると、参照モデルがメモリに読み込まれたままになります。

アクセラレータ

モデルのコンパイル中、アクセラレータ モードでシミュレートするように構成されている参照モデルが開いたり閉じたりすることがあります。モデルのコンパイル前に開いていたモデルは開いたままになります。

一部のコールバックは実行されません。

  • 参照モデルとその依存関係が最新である場合、参照モデルはコンパイルされず、その InitFcn コールバックは実行されません。

  • アクセラレータ モードの参照モデルは、参照モデルの代わりに開始および停止する S-Function を使用するため、StartFcn や StopFcn などのコールバックは実行されません。

モデル参照のシミュレーション モードの詳細については、モデルの階層構造内のシミュレーション モードの選択を参照してください。

参考

トピック