Main Content

マスクの初期化とコールバック コードの入門

マスクの初期化により、マスク ブロックのパラメーターを定義または変更できます。これらのパラメーターをブロック線図内で使用して、基となるサブシステムの動作を構成できます。初期化フェーズでは、マスクに関連付けられた任意のコードまたはスクリプトが実行されます。これには、変数の設定、MATLAB コードの実行、サブシステムが正しく機能するために必要な状態の初期化を含めることができます。

マスクの初期化には、ユーザーが指定したパラメーターが有効であることを確認するチェックを含めることができます。これはシミュレーション エラーを防止するのに役立ち、サブシステムが予期されたパラメーター内で確実に動作するようにすることができます。

マスクの初期化を使用すると、他のパラメーター値に基づいてパラメーターを動的に表示または非表示にすることができます。これにより、関連するオプションのみをユーザーに提示することでインターフェイスを簡略化できます。

複数のモデルで使用されるマスク ブロックがある場合、マスクの初期化により、ブロックのすべてのインスタンスが同じ構成で開始されることが保証され、一貫性が促進され、エラーの可能性が低減されます。

マスク初期化コードを作成する状況

次のような場合、マスク初期化コードを作成します。

  • マスク ダイアログ パラメーターの値に基づいて、マスクで新しいパラメーターを作成するか、既存のパラメーターを更新する。この新しいパラメーターを、子ブロックのパラメーターの値として使用できます。

  • マスク ダイアログ パラメーターの値を変更する。

  • サブシステムの内容を構造的に変更するか、マスク ダイアログ パラメーターの値に基づいて子ブロック パラメーターの値を変更する。これを行うには、set_param コマンドを使用します。

マスク初期化コードを実行する状況

モデル内のすべてのマスク ブロックに対する初期化コマンドは、ブロックを正しい状態に維持するために実行されます。ブロック パラメーターの値が変更された場合、ブロックとその入れ子にされたブロックの正しい状態を維持するために、初期化コマンドが実行されます。初期化コードは次のシナリオで実行されます。

  • マスク パラメーターの値を変更してブロック線図を更新するか、コードをシミュレートまたは生成したとき。

  • パラメーターの値を変更し、マスク ダイアログで [適用] をクリックしたとき。

  • set_param を使用してパラメーターの値を変更し、それにより、マスク ダイアログ内のパラメーターが変更されたとき。マスク初期化コードは、Simulink® がパラメーター値の変更を検出したときに実行されます。

  • マスク エディターで [マスクの保存] を使用してマスクを保存したとき。

  • アイコンの描画が初期化コードに依存するシナリオで、マスク ブロックを回転または反転するか、ブロック アイコンを描画または再描画したとき。初期化コードは、マスク エディターのアイコン ペインで [初期化の実行] プロパティが設定されている場合にのみ実行されます。

モデルを開くと、Simulink は、そのモデルの最上位または開いているサブシステムに存在している可視状態のマスク ブロックを見つけます。

Simulink は、以下のいずれかの条件が満たされている場合、これらの可視状態のマスク ブロックおよびその親ブロックの初期コマンドを実行します。

  • マスク設定されたブロックに、アイコン描画コマンドがある。

    メモ

    Simulink は、モデルの読み込み時にマスク ブロックに初期化コマンドがあっても、アイコン描画コマンドがないと初期化しません。

  • マスク サブシステムがライブラリに属しており、[ライブラリ ブロックで内容を変更することを許可] パラメーターが有効になっている。

モデルをグラフィックスとして表示しないでモデルをメモリに読み込んだ場合、自己修正可能なマスクをもつライブラリ ブロックを除き、マスク ブロックに対して初期化コマンドは実行されません。モデルを表示しない読み込みの詳細は、モデルの読み込みおよび load_system を参照してください。

初期化コードの実行順序は、モデル [InitFcn]、ブロック [InitFcn]、ブロック マスク初期化の順です。

メモ

モデルが既にコンパイルされている場合 (初期化済み)、マスク ブロックの調整不可のパラメーターは評価されません。

マスクの初期化のベスト プラクティス

マスク初期化コマンドは、次のルールに従う必要があります。

  • 初期化コードは、動的なマスク ダイアログ ボックス (他のコントロールの設定に行った変更によって外観やコントロールの設定が変化するダイアログ ボックス) の作成には使用しないでください。代わりに、マスク コールバックを使用してください。詳細については、動的なマスク ダイアログ ボックスを参照してください。

  • モデルの読み込み時に初期化コードを使用してブロックを追加または削除しないでください。

  • 入れ子にされたマスク サブシステムの場合、子ブロックから親ブロックに対して set_param を使用しないでください。子ブロックのマスクと親ブロックのマスクの両方がブロックの同じパラメーターを初期化し、予期しない結果になる可能性があります。詳細については、Unsafe Mask Callback Errorを参照してください。

  • set_param コマンドは、初期化している別のマスク サブシステム内のブロックで使用しないでください。子レベルのマスク サブシステムが親レベルのマスク サブシステムによって定義される記号を参照する場合に、子レベルのマスク サブシステムにあるブロックのパラメーターの設定を試みると未解決の記号によるエラーを引き起こす可能性があります。

    たとえば、マスク サブシステム A がマスク サブシステム B を含み、このサブシステムが Gain ブロック C を含み、その Gain パラメーターが B で定義されている変数を参照していると仮定します。また、サブシステム A には次のコマンドを含む初期化コードがあると仮定します。

    set_param([gcb '/B/C'], 'SampleTime', '-1');

    A を含むモデルのシミュレーションまたは更新を実行すると、未解決の記号によるエラーが発生します。

  • マスク初期化コードを使用してデータ オブジェクトを作成しないでください。データ オブジェクトは次のクラスのオブジェクトです。

    • Simulink.Parameter とサブクラス

    • Simulink.Signal とサブクラス

  • 同じマスク ブロックを削除する初期化コードは追加しないでください。

  • ブロックを参照する場合やブロックをモデルにコピーした場合は、マスク ダイアログ ボックスに、指定した既定値が表示されます。マスク初期化コードは、ライブラリ ブロックまたはその他のブロック内でマスク パラメーターの既定値を変更するために使用しないでください。

  • マスク初期化コードは、ブロックのコメント化やコメント解除には使用しないでください。

  • マスク初期化コードからサブシステムの内容を無条件で変更しないでください。このような無条件の変更は、モデル参照を使用した場合は適切に機能しません。

  • マスク初期化コード内の変数をクリアするために clear コマンドを使用しないでください。

  • マスク初期化コード セクションで StartTimeSolverJacobianMethodControl などのモデル レベルのパラメーターを変更しないでください。これらのパラメーターはシミュレーションの開始後には変更できないからです。

マスク コールバック コード

Simulink では、マスク コールバックは関数であるか、特定のアクションまたはイベントに応答して実行されるマスク ブロックに関連付けられたスクリプトです。

マスク コールバックを使用すると、1 つのパラメーターに加えられた変更に基づいて他のパラメーターを動的に更新できます。これは、パラメーターの関係と依存関係を維持するのに役立ちます。

コールバックを使用すると、マスク ダイアログ内のパラメーターの表示、有効化、および対話性を制御できるので、より応答性が高く、ユーザー フレンドリなインターフェイスを実現できます。マスク コールバックにより、表示ラベルの更新、ブロック プロパティの設定、パラメーターが変更されたときの状態の初期化などのタスクを自動化できます。

コールバックにより MATLAB ワークスペースと対話する方法が提供されるため、マスク パラメーターとの間で変数を読み書きできます。マスク コールバックを使用すると、シミュレーションの開始前や終了後など、シミュレーション プロセスの特定の時点でコードを実行し、リソースを設定またはクリーンアップできます。

マスク コールバック コードを実行する状況

マスク パラメーターのコールバック コードはベース ワークスペースではなく一時ワークスペースで実行されます。コールバックで作成された変数を (コールバック処理中ではなく) 後で使用可能にしなければならない場合、該当する変数を明示的にベース ワークスペースに割り当てなければなりません。

Simulink では、パラメーターの値に変更があった場合にコールバック コマンドを実行します。パラメーター コールバックは次のシナリオで実行されます。

  • マスク ダイアログ ボックスを開いたとき。最上位のマスク ダイアログ ボックスから順番にコールバック コマンドが実行されます。

  • マスク ダイアログ ボックスでパラメーターの値を変更し、マウスまたはカーソルの位置を変更するか [適用] を押したとき。たとえば、パラメーターの値を変更してから Tab キーを押すかダイアログ ボックスの別のフィールドをクリックしたとき。

  • set_param コマンドを使用してパラメーターの値を変更したとき。

  • 診断の [編集時のエラーと警告] を有効にしてモデルを開いたとき。

  • 変更を保存せずにマスク ダイアログ ボックスを閉じた場合、パラメーターのコールバック コマンドが順番に実行されます。

  • コールバックが一度も実行されていない場合は、モデル更新の一部として実行されます。

メモ

  • マスク ダイアログ ボックスのボタンは、ボタンに関連付けられたコールバック コードの実行中は無効になります。

  • コールバック コマンドは、ブロックのツール ヒントが表示されるときにマスク ダイアログ ボックスが開いている場合は実行されません。

関連するトピック