メインコンテンツ

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

マスク初期化コードとマスク パラメーター コールバック コードの概要

マスク初期化コードとマスク パラメーター コールバック コードにより、ブロック マスクをプログラムで制御できます。マスク初期化コードは、ブロックを構成し、サブシステムの内容を動的に変更し、サブシステム内の子ブロックのパラメーターを設定します。Simulink® は、マスク ブロックごとに MATLAB® ワークスペースの固有のインスタンスを作成します。これを "マスク ワークスペース" と呼びます。このマスク ワークスペースにマスク パラメーターの評価済みの値が格納されます。Simulink は、このマスク ワークスペースのコンテキスト内でマスク初期化コードを実行します。

マスク パラメーター コールバック コードは、パラメーターを他のパラメーターの値に基づいて動的に表示または非表示にしたり、ポップアップ オプションを動的に変更したりします。これにより、関連するオプションのみをユーザーに提示することでマスク ダイアログ ボックスが簡略化されます。マスク パラメーター コールバックは一時ワークスペースで実行されます。マスク初期化コードとパラメーター コールバック コードの指定方法については、Author Mask Initialization and Callbacksを参照してください。

Structure of the MATLAB class file

マスク初期化コード

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

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

  • サブシステムの内容の構造を動的に変更する。詳細については、Allow Masked Subsystems Inside a Masked Subsystem Reference to Self-Modifyを参照してください。

  • 子ブロックのパラメーターの値をマスク ダイアログのパラメーターの値に基づいて変更する。<parameter>.value ではなくマスク初期化コードで set_param 関数を使用します。親ブロックの値を子ブロックで使用するには、set_param を使用する代わりに、子ブロックから親ブロックのマスク ダイアログ ボックスにパラメーターをプロモートします。

  • マスク内の既存のパラメーターから計算されたマスク初期化コードで新しい変数を定義する。マスク初期化コードを使用することで、マスクでの調整可能性の消失に起因する既存パラメーターの更新を回避します。マスクで既存のパラメーターを更新する必要がある場合は、Tune Mask Enumeration Parameters - Popup and Radio Buttonで説明されている手順に従って、調整可能性が維持されていることを確認します。

マスク初期化コードの作成を避けるべき状況

マスク初期化コードの使用は、あらゆる状況に適しているわけではありません。

  • マスク初期化コードは、マスク パラメーターの値の検証と妥当性確認には使用しないでください。マスク制約を使用してください。詳細については、制約を参照してください。

  • マスク アイコンは、マスク初期化セクションでマスク描画コマンドを使用して変更しないでください。マスク アイコンを変更する場合はマスク表示を使用してください。あるいは、グラフィカル アイコン エディターを使用してマスク ブロックの SVG アイコンを作成してください。詳細については、Create and Edit Block Mask Iconを参照してください。

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

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

  • ブロック線図を更新する、モデルをシミュレートする、コードを生成する。マスク ワークスペースが最新の状態の場合は、パフォーマンスを最適化するため、Simulink はマスク初期化コードを実行しません。

  • set_param を使用してパラメーターの値を変更し、マスク ダイアログ ボックスで [適用] をクリックする。

  • マスクの定義に何らかの変更を加える。マスク エディターからマスクを保存する場合も含まれます。

  • アイコンの描画が初期化コードに依存する状況。アイコン描画コマンドがないマスク ブロックに対しては、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 などのモデル レベルのパラメーターを変更しないでください。これらのパラメーターはシミュレーションの開始後には変更できないからです。

  • 特定のコードの抜粋を実行するかどうかを判断するためにシミュレーション ステータスをチェックすることは避けてください。

  • slresolve を使用してパラメーターを再評価しないでください。パラメーターはすべて評価済みであり、マスク ワークスペースで使用できます。

  • ブロックのマスク パラメーターを初期化コードで設定しないでください。以降のマスク ワークスペースの更新時にマスク パラメーターの新しい値が Simulink で取得されます。

  • モデルが更新ダイアグラムを使用してコンパイル段階にある間は、モデル ワークスペースを変更しないでください。

マスク パラメーター コールバック コード

マスク パラメーター コールバックは、マスク パラメーターの値の変更に応じて特定の MATLAB コードを実行します。

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

パラメーター コールバック コードを作成する状況

次のような場合、パラメーター コールバック コードを作成します。

  • 従属パラメーターを自動的に更新する。たとえば、パラメーター area が別のパラメーター length に依存している場合、コールバック コードを使用して length に変更があったときに area を再計算して設定します。

  • マスク パラメーターの外観や可視性を別のパラメーターの値に基づいて変更する。

  • パラメーターに変更があったときに初期化や構成のタスクを実行する。

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

Simulink は、パラメーターの値に変更があった場合にパラメーターのコールバック コードを実行します。マスク パラメーター コールバック コードは一時ワークスペースで実行されます。入れ子にされたサブシステム内のコールバック コードは順番に実行されます。マスク ダイアログ ボックスを開くと、最上位のマスク ダイアログ ボックスのコールバック コードが最初に実行されます。

パラメーター コールバック コードは以下の状況で実行されます。

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

  • [コンフィギュレーション パラメーター] ダイアログ ボックスの [診断] ペインで [編集時のエラーと警告] を有効にしてモデルを開く。

  • 変更を保存せずにマスク ダイアログ ボックスを閉じる。各パラメーターのコールバック コードが順番に実行されて初期状態に戻ります。

  • コールバック コードがまだ一度も実行されていないときにモデルの更新を実行する。

  • プロパティ インスペクターを開いてマスク ブロックを選択する。

パラメーター コールバック コードの規則

マスク パラメーター コールバック コマンドは次のルールに従う必要があります。

  • サブシステムの構造はパラメーター コールバック コードを使用して変更しないでください。代わりに、マスクの初期化を使用してください。

  • マスク パラメーターのタイプは変更しないでください。

参考

トピック