Main Content

ブロックのコールバック

ブロックが読み込まれるとき、開かれるとき、編集されるときなどにブロック イベントの MATLAB® コードを実行するブロック コールバックを指定できます。

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

  2. コールバックを指定するブロックを選択します。

  3. プロパティ インスペクターの [プロパティ] タブの [コールバック] セクションで、定義するコールバックを選択します。

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

プログラムによりブロックのコールバックを指定するには、set_param を使用して、MATLAB コードをブロックのコールバック パラメーターに割り当てます。

モデリング アクションが起こる前か起こった後にブロックのコールバックが実行される場合、そのコールバックはモデリング アクションの直前または直後に発生します。

ブロックを開くコールバック パラメーター

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

OpenFcn

ブロックを開くとき。

一般に、このパラメーターは Subsystem ブロックで使用します。

コールバックが実行されるのは、ブロックをダブルクリックしたときか、ブロックを引数として open_system を使用したときです。OpenFcn パラメーターは、ブロックを開く動作と関連した通常の動作、すなわちブロック ダイアログ ボックスを表示するかサブシステムを開く動作をオーバーライドします。ブロックの変数を定義する目的で OpenFcn を使用できるタスクの例として、MATLAB を呼び出して、シミュレーション済みのデータのプロットを作成する場合や、グラフィカル ユーザー インターフェイスを生成する場合が挙げられます。

OpenFcn コールバックをブロックに追加した後は、ブロックをダブルクリックしてもブロック ダイアログ ボックスは開きません。また、ブロックを選択してもプロパティ インスペクターにブロック パラメーターが表示されません。ブロック パラメーターを設定するには、ブロックのコンテキスト メニューで [ブロック パラメーター] を選択します。

LoadFcn

ブロック線図が読み込まれた後。

Subsystem ブロックの場合は、LoadFcn コールバックが定義されているサブシステム内のブロック (他の Subsystem ブロックを含む) に対して LoadFcn コールバックが実行されます。

ブロックを編集するコールバック パラメーター

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

MoveFcn

ブロックが移動またはサイズが変更されたとき。

NameChangeFcn

ブロックの名前やパスが変更された後。

Subsystem ブロックのパスが変更された場合、Subsystem ブロックは子孫のブロックの NameChangeFcn コールバックを呼び出してから、それ自体の NameChangeFcn コールバックを呼び出します。

PreCopyFcn

ブロックがコピーされる前。PreCopyFcn は、add_block を使用してブロックをコピーする場合も実行されます。

PreCopyFcn コールバックが定義されたブロックを含む Subsystem ブロックをコピーした場合、そのコールバックも実行されます。

ブロック CopyFcn のコールバックは、すべての PreCopyFcn コールバックが実行された後で呼び出されます。

CopyFcn

ブロックがコピーされた後。コールバックは、add_block を使用してブロックをコピーする場合も実行されます。

CopyFcn パラメーターが定義されたブロックを含む Subsystem ブロックをコピーした場合、そのコールバックも実行されます。

ClipboardFcn

ブロックがシステム クリップボードにコピーまたは切り取られたとき。

PreDeleteFcn

ブロックがグラフィカルに削除される前 (たとえば、ユーザーがブロックをグラフィカルに削除するときやブロックで delete_block を実行するとき)。

PreDeleteFcn は、ブロックを含むモデルが閉じられている場合は呼び出されません。ブロックの DeleteFcn は、PreDeleteFcn の後に呼び出されます。ただし、PreDeleteFcn が、明示的に、あるいは PreDeleteFcn で使用されるコマンドを使用して error コマンドを実行した場合を除きます。

DeleteFcn

ブロックをグラフィカルに削除した後 (たとえば、ブロックをグラフィカルに削除したとき、ブロックで delete_block を実行したとき、ブロックを含むモデルを閉じたとき)。

DeleteFcn を呼び出した場合、ブロック ハンドルは、有効のままであり、get_param を使用してアクセスできます。delete_block を実行、またはモデルを閉じてブロックをグラフィカルに削除すると、削除後、ブロックはメモリから削除され、ブロックの DestroyFcn が呼び出されます。

Subsystem ブロックの場合は、DeleteFcn コールバックが定義されているサブシステム内のブロック (他の Subsystem ブロックを含む) に対して DeleteFcn コールバックが実行されます。

DestroyFcn

ブロックがメモリから削除されたとき (たとえば、ブロックまたはブロックを含むサブシステムで delete_block を実行したときやブロックを含むモデルを閉じたとき)。

ブロックをまだグラフィカルに削除していない場合は、DestroyFcn の前にブロックの DeleteFcn コールバックが呼び出されます。DestroyFcn が呼び出されると、ブロック ハンドルは有効でなくなります。

UndoDeleteFcn

ブロックの削除が元に戻されたとき。

ブロックのコンパイルおよびシミュレーションのコールバック パラメーター

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

InitFcn

ブロック線図がコンパイルされる前とブロック パラメーターが評価される前。InitFcn コールバックの詳細については、初期化関数を参照してください。

StartFcn

ブロック線図がコンパイルされた後とシミュレーションを開始する前。

S-Function ブロックの場合は、StartFcn は、ブロックの関数 mdlProcessParameters の最初の実行のすぐ前に実行されます。詳細については、S-Function コールバック メソッドを参照してください。

ContinueFcn

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

PauseFcn

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

StopFcn

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

S-Function ブロックの場合、StopFcn はブロックの関数 mdlTerminate の実行後に実行されます。詳細については、S-Function コールバック メソッドを参照してください。

ブロックを保存するまたは閉じるコールバック パラメーター

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

PreSaveFcn

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

Subsystem ブロックの場合は、PreSaveFcn コールバックが定義されているサブシステム内のブロック (他の Subsystem ブロックを含む) に対して PreSaveFcn コールバックが実行されます。

PostSaveFcn

ブロック線図を読み込んだ後。

Subsystem ブロックの場合は、PostSaveFcn コールバックが定義されているサブシステム内のブロック (他の Subsystem ブロックを含む) に対して PostSaveFcn コールバックが実行されます。

CloseFcn

ブロックが close_system を使用して閉じられたとき。

CloseFcn は、ブロック パラメーターのダイアログ ボックスを対話形式で閉じたとき、ブロックを含むサブシステムまたはモデルを対話形式で閉じたとき、ブロックを含むサブシステムまたはモデルを close_system を使用して閉じたときは呼び出されません。

たとえば、開いている MATLAB ウィンドウをすべて閉じるには、以下のようなコマンドを使用します。

set_param('my_model','CloseFcn','close all')

ModelCloseFcn

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

モデルを閉じると、ブロックの ModelCloseFcnDeleteFcn の前に呼び出されます。

Subsystem ブロックの場合は、ModelCloseFcn コールバックが定義されているサブシステム内のブロック (他の Subsystem ブロックを含む) に対して ModelCloseFcn コールバックが実行されます。

Subsystem ブロック コールバック パラメーター

他のブロックのコールバック パラメーターを Subsystem ブロックで使用できますが、次の表のコールバック パラメーターは Subsystem ブロックに固有のものです。

メモ

マスク サブシステムに対するコールバックは、マスク サブシステムのパラメーターを直接参照することができません (ブロック マスクの作成を参照)。Simulink® は MATLAB ベース ワークスペースにあるブロック コールバックを評価しますが、一方マスク パラメーターはマスク サブシステムのプライベート ワークスペースに存在します。ただし、ブロック コールバックは get_param を使用してマスク パラメーターの値を取得することができます。たとえば、ここで、gain は現在のブロックにおけるマスク パラメーターの名前です。

get_param(gcb, 'gain')
ブロックのコールバック パラメーターいつ実行されるか

DeleteChildFcn

ブロックまたはラインがサブシステムで削除された後。

ブロックに DeleteFcn または DestroyFcn がある場合、それらのコールバックは DeleteChildFcn コールバックの前に実行されます。

ErrorFcn

エラーがサブシステム内で発生したとき。

ErrorFcn パラメーターのコールバック コードには、以下の形式を使用します。

newException = errorHandler(subsys, ...
errorType, originalException)

ここで、

  • errorHandler は、関数名です。

  • subsys はエラーが発生したサブシステムのハンドル。

  • errorType は発生したエラーのタイプを示す文字ベクトル。

  • originalException は MSLException (MSLException を使用した Simulink のエラー処理を参照)。

  • newException は、ユーザーに対して表示されるエラー メッセージを指定する文字列。

元の例外を発行する場合は、サブシステムやエラー タイプの指定は不要です。

次のコマンドは、errorHandler コールバックを呼び出すサブシステム subsysErrorFcn を設定します。

set_param(subsys,'ErrorFcn','errorHandler')
そのような set_param の呼び出しでは、コールバック コードの入力引数を含めないでください。Simulink は、コールバックによって返されるエラー メッセージを表示します。

ParentCloseFcn

ブロックを含むサブシステムを閉じる前または以下を使用してブロックを新しいサブシステムの一部にする際

  • 関数 new_system

  • Simulink エディターの [複数] タブの [サブシステムの作成] アイコン

モデルを閉じたときに、Simulink がルート モデル レベルでブロックの ParentCloseFcn コールバックを呼び出すことはありません。

関連するトピック