Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

モデル コールバック

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

モデルのコールバックを使用して、Automatically Initialize Variables and Load Dataのような一般的なタスクを実行できます。

同じコールバックのほとんどをライブラリに対して設定できます。ライブラリに設定できるのはライブラリに対して実行できるコールバックだけです。たとえば、ライブラリはシミュレーションできないため、シミュレーションの一部として呼び出される InitFcn コールバックはライブラリに対しては設定できません。

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

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

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

    メモ

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

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

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

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

モデルのコールバック パラメーターいつ実行されるか

PreLoadFcn

モデルを読み込む前。

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

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

モデルを開かずに、MATLAB ファイルからモデルを呼び出す場合、load_system 関数を使用して、PreLoadFcn が実行されるようにします。

例については、Automatically Initialize Variables and Load Dataを参照してください。

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

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

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

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

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

PostLoadFcn

モデルを読み込んだ後。

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

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

  • PostLoadFcn で構造的な変更を行うと、関数はモデルに未保存の変更があることを示す Dirty (変更未保存) フラグを設定しません。モデルを閉じたときに、Simulink が保存を求めることはありません。

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

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

InitFcn

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

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

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

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

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

StartFcn

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

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

PauseFcn

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

ContinueFcn

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

StopFcn

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

出力は、StopFcn が実行される前にワークスペースの変数とファイルに書き込まれます。

シミュレーション出力は、コマンド ライン シミュレーションの StopFcn コールバックでは使用できません。

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

PreSaveFcn

モデルを保存する前。

PostSaveFcn

モデルを保存した後。

PostSaveFcn で構造的な変更を行うと、関数はモデルに未保存の変更があることを示す Dirty (変更未保存) フラグを設定しません。モデルを閉じたときに、Simulink が保存を求めることはありません。

CloseFcn

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

モデルのブロックに設定されている ModelCloseFcn コールバックと DeleteFcn コールバックは、モデルの CloseFcn コールバックの前に呼び出されます。モデルのブロックの DestroyFcn コールバックは、モデルの CloseFcn コールブロックの後に呼び出されます。

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

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

  • モデル A:

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

    • MATLAB ワークスペース内に変数を作成する PostLoadFcn コールバックが設定されている。

    • [リビルド] コンフィギュレーション パラメーターが [常に行う][変更が検出された場合]、または [既知の依存関係で変更が検出された場合] に設定されている。

  • モデル B:

    • MATLAB ワークスペースをクリアする CloseFcn コールバックが設定されている。

    • ビルドされていない、または期限が切れている。

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

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

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

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

モデルのコンパイル中、Simulink は、ノーマル モードでシミュレーションするように設定されている、まだ読み込まれていない各参照モデルを読み込みます。

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

InitFcnStartFcnPauseFcnContinueFcn、および StopFcn モデル コールバックは、モデル コンパイラで作成されたモデルの実行可能形式ごとに実行されます。

モデルのコンパイル後、参照モデルは読み込まれたままになります。

アクセラレータ

モデルのコンパイル中、Simulink は、その参照モデルの [リビルド] 設定とシミュレーション ターゲットに基づいて、アクセラレータ モードでシミュレーションするように設定された参照モデルを開いたり閉じたりすることがあります。モデルのコンパイル前に開いていたモデルは開いたままになります。

Simulink は一部のコールバックを実行しません。

  • すべてが最新の状態で、[リビルド] コンフィギュレーション パラメーターが [既知の依存関係で変更が検出された場合] に設定されている場合、参照モデルはコンパイルされず、その InitFcn コールバックは実行されません。

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

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

関連するトピック