メインコンテンツ

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

ブロックのコールバック

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

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

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

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

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

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

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

LoadFcnContinueFcnInitFcnModelCloseFcnPauseFcnPostSaveFcnPreSaveFcnStartFcn、および StopFcn の各コールバックは、アクティベーションのタイミングが [ブロック線図の更新] である Variant Subsystem ブロックの非アクティブなバリアント選択肢およびコメント化されたブロックに対しては実行されません。この抑制により、計算のオーバーヘッドが軽減され、現在のモデルの反復に影響しないブロックからの不要な診断メッセージが回避されます。たとえば、find_system 関数で @Simulink.match.allVariants マッチ フィルターを使用してアクティブと非アクティブのバリアント選択肢を特定する場合、Simulink® は非アクティブなバリアント選択肢をリストしますが、LoadFcn コールバックを実行する対象はアクティブなバリアント選択肢のみになります。非アクティブなバリアント選択肢はモデルの実行に影響しないため、それらに対しては LoadFcn コールバックを実行しません。ただし、コメント化されているか非アクティブな Model ブロックや Subsystem Reference ブロック内にあるモデルまたはサブシステム ファイル内のブロックに対しては、これらのコールバックは抑制されません。また、マスクの初期化およびマスクパラメータのコールバックも抑制されません。該当するコールバックの一覧については、Author Mask Initialization and Callbacksおよびマスク パラメーターを参照してください。

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

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

OpenFcn

ブロックを開くとき。

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

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

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

LoadFcn

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

LoadFcn コールバックは、すべてのブロックに対して、そのブロックがアクティブになるかコメント解除されると実行されます。冗長な実行を避けるために、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 コールバックは、ブロックを含むモデルを閉じるときは呼び出されません。PreDeleteFcn コールバックの後に DeleteFcn ブロック コールバックが呼び出されます。ただし、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

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

モデルを閉じるときに、DeleteFcn または DestroyFcn のいずれかが設定されている場合、それらのブロック コールバックの前に ModelCloseFcn ブロック コールバックが呼び出されます。

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

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

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

メモ

マスク サブシステムに対するコールバックでマスク サブシステムのパラメーターを直接参照することはできません。ブロック マスクの作成を参照してください。ソフトウェアでは 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 は、ユーザーに対して表示されるエラー メッセージを指定する文字列。

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

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

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

ParentCloseFcn

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

  • new_system 関数

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

モデルを閉じるとき、ルート モデル レベルにあるブロックの ParentCloseFcn コールバックは呼び出されません。

参考

トピック