Main Content

モデル コールバック

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

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

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

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

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

    メモ

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

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

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

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

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

PreLoadFcn

モデルを読み込む前。

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

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

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

以下の例を参照してください。

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

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

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

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

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

PostLoadFcn

モデルを読み込んだ後。

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

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

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

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

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

InitFcn

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

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

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

以下の例を参照してください。

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 などのコールバックは実行されません。

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

関連するトピック