メインコンテンツ

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

モデル コールバック

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

モデルのコールバックを使用して、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 が追加されているモデル パラメーターの場合は、エラー メッセージ

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

PostLoadFcn

モデルを読み込んだ後。

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

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

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

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

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

InitFcn

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

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

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

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

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

StartFcn

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

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

PauseFcn

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

ContinueFcn

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

StopFcn

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

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

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

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

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 回コンパイルされます。

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

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

アクセラレータ

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

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

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

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

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

参考

トピック