メインコンテンツ

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

参照モデルのブロック パラメーターに対するインスタンス固有の値の構成

複数の Model ブロックを使用して同じモデルを参照すると、モデルの各インスタンスで同じ値または異なる値を使用するようブロック パラメーターを設定できます。たとえば、Gain ブロックの [ゲイン] パラメーターに対してインスタンス固有の値を構成できます。異なる値を使用する場合、モデル引数を作成して使用し、ブロック パラメーターの値を設定します。場合によっては、使用するブロック パラメーター (コントローラーの設定点やフィルター係数など) の値をインスタンスごとに個別に設定できないと参照モデルを再利用できないことがあります。

ローカル ソルバーを使用する参照モデルではモデル引数はサポートされません。詳細については、Use Local Solvers in Referenced Modelsを参照してください。

再利用可能なモデルの各インスタンスに異なる値を指定

再利用可能な参照モデルのブロック パラメーターについて、モデルのインスタンスごとに異なる値を指定するには、次を行います。

  1. 参照モデルのモデル ワークスペースで MATLAB® 変数または Simulink.Parameter オブジェクトを作成します。

    • 保守をしやすくするには MATLAB 変数を使用します。

    • 最小値と最大値、データ型などのモデル引数のプロパティをより詳細に制御するには Simulink.Parameter オブジェクトを使用します。

  2. 変数またはパラメーター オブジェクトを使用してブロック パラメーター値を設定します。必要に応じて同じ変数またはオブジェクトを使用して他のブロック パラメーター値を設定します。

  3. モデル データ エディターで、[引数] プロパティを選択して、変数またはオブジェクトをモデル引数として構成します。

  4. 変数または Simulink.Parameter オブジェクトの既定値を指定します。このモデルのシミュレーションを直接実行する場合、変数またはオブジェクトによってモデル ワークスペース内に保存された値がブロック パラメーターとして使用されます。このモデルが参照モデルとしてシミュレートされると、モデル引数として設定されたパラメーターはその値を親モデルから取得します。

    必要に応じて、Simulink.Parameter オブジェクトの値は空のままにすることもできます。既定値を指定せずにモデル引数を定義を参照してください。

  5. 再利用可能なモデルを参照するそれぞれの Model ブロックで、ブロック パラメーターにインスタンス固有の値を指定します。インスタンス固有の値の次元とデータ型はモデル引数定義と一致しなければなりません。値を指定しない場合、モデル階層構造内のその下に指定された最後の値が、引数によって使用されます。最上位モデルに診断コンフィギュレーション パラメーター [モデル引数に明示的な最終値はありません] を設定することで、モデル引数の値を設定できる一番上の Model ブロックに、明示的な値が指定されずに既定値が使用される時点のエラーや警告を生成できます。

  6. 中間モデルでは、ブロック パラメーターにインスタンス固有の値を指定するのに加え、階層の 1 つ上のレベルでパラメーターをオーバーライド可能かどうかを [引数] プロパティを選択することで指定できます。

既定値を指定せずにモデル引数を定義

Simulink.Parameter オブジェクトを使用してブロック パラメーター値を設定する場合、親モデル参照階層のどこかで明示的な値を提供する限り、([値] を '[]' に設定) 空のままにしたオブジェクトの値を使用し、モデルを参照モデルとしてコンパイルおよびシミュレートできます。この場合、モデルを直接シミュレートできません。値が空の場合、オブジェクトの [データ型] および [次元] を指定しなければなりません。[最小値][最大値]、および [実数/複素数] の各プロパティも指定できます。空の値を指定した場合でも、Simulink® は指定されたプロパティを使用して引き続き [値] を合成します (Simulink.Parameter を参照)。

複数の引数を構造体にまとめる

複数のモデル引数を使用するようにモデルを構成する場合、モデル ワークスペースの個別の変数の代わりに構造体を使用することを検討します。この手法により、引数の追加、名前の変更、または削除を行うときに保守の作業を減らすことができます。モデル ワークスペースの引数を Model ブロックの引数の値と手動で同期する代わりに、変数エディターまたはコマンド プロンプトを使用して構造体を変更します。

Simulink.Bus オブジェクトを構造体のデータ型として使用できます。このオブジェクトを使用すると、インスタンス固有の構造体の特性 (名前やフィールドの順序など) をモデル ワークスペース内の構造体の特性と一致させることができます。

Simulink Coder™ ライセンスがある場合は、この手法によって出力関数 (step) などの参照モデルの関数の仮パラメーターが使用する ROM を減らすこともできます。

構造体を作成および使用してブロック パラメーター値を設定するには、関連するブロック パラメーター定義を構造体に整理を参照してください。

モデル引数を使用するように参照モデルを構成する

この例では、圧力センサーのシステムを表すモデル参照階層について詳しく説明します。この例を通じて、参照される圧力センサー モデルのブロック パラメーターにモデルのインスタンスごとに異なる値を使用するよう構成する方法を示します。

コマンド プロンプトで入力するコマンドだけを使用した例については、参照モデルのプログラムによるパラメーター化を参照してください。コード生成を含む例については、再利用可能な参照モデルへのインスタンス固有パラメーター値の指定 (Simulink Coder)を参照してください。

モデルの階層構造の確認

圧力センサー モデル PressureSensor を開きます。

open_system('PressureSensor')

このモデルは、入力圧力を最小圧力と最大圧力の値に照らしてチェックします。指定されたタイムアウト期間の間に圧力がこの範囲から外れると、出力信号が 1 に設定されます。最小圧力、最大圧力、およびタイムアウト期間は、モデル ワークスペース パラメーターの sensor_params.min_presssensor_params.max_press、および sensor_params.timeout で表されています。

モデル SensorArray を開きます。

open_system('SensorArray')

このモデルには、PressureSensor モデルを参照する Model ブロックが 4 つ含まれています。

モデル SensorHarness を開きます。

open_system('SensorHarness')

このテスト ハーネスには、SensorArray モデルを参照する Model ブロックが含まれています。このハーネスで入力圧力が徐々に大きくなるように各圧力センサーを供給し、各センサーの出力信号をスコープに送ります。

PressureSensor モデルでのブロック パラメーターの代入の確認

圧力センサー モデルのインスタンスごとに固有の値をブロック パラメーターに使用するには、ブロック パラメーター値を MATLAB® 変数または Simulink.Parameter オブジェクトを使用して設定する必要があります。代入される変数またはパラメーター オブジェクトがモデル ワークスペースに格納され、モデル引数として構成されていなければなりません。

圧力センサー モデルでのブロック パラメーターの代入を調べるには以下を行います。

  1. モデルの階層構造を更新します。SensorHarness モデルの [モデル化] タブで [モデルの更新] をクリックします。

  2. PressureSensor モデルの [モデル化] タブで [モデル データ エディター] をクリックします。

  3. モデル データ エディターで、[パラメーター] タブを選択します。

  4. フィルター ボックスに「sensor」と入力します。

フィルターが適用されたテーブルで、パラメーター sensor_params がモデル ワークスペースに格納されていることを確認できます。パラメーター sensor_params は、min_pressmax_press、および timeout のフィールドをもつ構造体です。maxPressX ブロックと minPressX ブロック、および出力信号を生成する Compare To Constant ブロックで、この構造体のフィールドがブロック パラメーターへの値として代入されます。

圧力センサー モデルを参照する Model ブロックで既定値をオーバーライドし、それらのブロック パラメーターにインスタンス固有の値を提供するには、sensor_params[引数] チェック ボックスがオンになっていて、パラメーターがモデル引数として構成されていることを確認します。

sensor_params 構造体の既定値を確認するには、[値] 列をクリックします。次に、3 つのドットが縦に並んだボタンをクリックして [変数エディターを開く] を選択します。

センサー アレイでのインスタンス固有のブロック パラメーターの代入の確認

SensorArray モデルには、PressureSensor モデルを参照する Model ブロックが 4 つ含まれています。

参照されるそれぞれの圧力センサー モデルについて、インスタンス固有のブロック パラメーターの代入を調べるには以下を行います。

  1. PressureArray モデルの [モデル化] タブで [モデル データ エディター] をクリックします。

  2. モデル データ エディターで、[パラメーター] タブを選択します。

モデル データ エディターで、p1p2p3、および p4 の 4 つのパラメーターがモデル ワークスペースに格納されていることを確認できます。これらの各パラメーターの値に、min_pressmax_press、および timeout のフィールドをもつ構造体が格納されています。パラメーター p1p2p3、および p4 は、それぞれ Sensor1Sensor2Sensor3、および Sensor4sensor_params パラメーターにインスタンス固有の値を提供します。

p1p2p3、および p4[引数] チェック ボックスがオンになっていることに注意してください。これにより、親の SensorHarness モデルで SensorArray モデルから提供されるブロック パラメーター値をオーバーライドし、テスト用に固有の値を提供できます。

各 Model ブロックのブロック パラメーターに代入される値を確認または変更するには、p1p2p3、または p4[値] 列をクリックします。次に、3 つのドットが縦に並んだボタンをクリックして [変数エディターを開く] を選択します。

テスト ハーネスでのインスタンス固有のブロック パラメーターの代入の確認

この階層の最上位モデルである SensorHarnessSensorArray モデルのテスト ハーネスです。

モデル データ エディターで、パラメーター pSensorArray がモデル ワークスペースに格納されていることを確認できます。このパラメーターに、モデル引数 p1p2p3、および p4 の新しい値を提供する sensor_params 構造体の入れ子配列が格納されています。

変数エディターを使用して、これらの構造体の値を更新し、異なる最小圧力、最大圧力、タイムアウトを使用して配列のセンサーをテストできます。モデル データ エディターで、pSensorArray[値] 列をクリックし、3 つのドットが縦に並んだボタンをクリックして [変数エディターを開く] を選択します。

テストする値を選択したら、[モデル化] タブで [実行] をクリックしてモデルをテストします。接続されたスコープに圧力センサーの出力信号が表示され、各センサーで圧力がいつ範囲から外れるかを確認できます。

モデルの引数名または値の変更

参照モデルのコンテキストでモデル引数の名前を変更するには次を行います。

  • モデルを参照するすべての Model ブロックを見つけ、各ブロックで指定されているインスタンス固有パラメーターの値を保存する。関数 get_param を使用して、各ブロックの InstanceParameters パラメーターをクエリします。これは構造体配列です。この構造体には、NameValuePathArgument の 4 つのフィールドが含まれます。

    名前の変更の操作によって Model ブロックの値が破棄されるため、インスタンス固有パラメーターの値を保存しなければなりません。

  • モデル データ エディターで、参照モデルのモデル ワークスペース内の変数またはオブジェクトを右クリックし、[すべての名前の変更] を選択する。名前の変更の操作は、変数またはオブジェクトの名前を変更し、その参照をモデル全体で変更します。詳細については、ワークスペース変数の作成、編集、管理を参照してください。

  • 引数の新しい名前を使用して引数の値を Model ブロックに再度適用する。Model ブロックで引数の値をプログラムにより設定するには、インスタンス パラメーターを参照してください。

再利用可能なコンポーネントのユーザー インターフェイスのカスタマイズ

チームの他のメンバーが使用する再利用可能な参照モデルを設計する場合、参照モデル全体にマスクを適用できます。そしてインスタンス固有の値の設定などの、ユーザーによる Model ブロックの操作方法をカスタマイズできます。

この手法を使用すると、プログラムによるインスタンス固有の値の指定も容易に行うことができます。gainMask という名前のマスク パラメーターを作成して使用する場合、myModelBlock という名前のモデルのインスタンスに対してプログラムによって値を 0.98 に設定するために、ユーザーはコマンド プロンプトで次のコマンドを使用できます。

set_param('myModelBlock','gainMask','0.98')

参照モデルにマスクを適用すると、モデル マスクには、直接の子モデルからのインスタンス固有パラメーターのみが表示されます。子孫のモデルからプロモートされたインスタンス固有パラメーターは表示されません。

モデルをマスクしない場合、インスタンス固有の値を設定するには、ブロックの InstanceParameters パラメーターを使用します。詳細については、参照モデルのプログラムによるパラメーター化を参照してください。

モデルのマスクの詳細については、システム マスクの概要を参照してください。

Simulink.LookupTable オブジェクトおよび Simulink.Breakpoint オブジェクトのインスタンス固有のデータの構成

Simulink.LookupTable オブジェクトを使用して ASAP2 または AUTOSAR コード生成用のルックアップ テーブル データ (STD_AXIS や CURVE など) を保存および構成する場合、そのオブジェクトをモデル引数として構成できます。また、Simulink.LookupTable で参照される Simulink.Breakpoint オブジェクトもモデル引数として構成できます。そして、コンポーネントのインスタンスごとに一意のテーブル データおよびブレークポイント データを指定できます。

Simulink.LookupTable 引数のインスタンス固有の値を、親モデルの新しい Simulink.LookupTable オブジェクトとして、または単純な MATLAB 構造体または配列として指定できます。

Simulink.LookupTable オブジェクトのインスタンス固有の値は、[ブレークポイントの指定] プロパティの値に基づいて指定します。

  • [ブレークポイントの指定] プロパティが [明示的な値] または [等間隔] に設定されている場合、ルックアップ テーブル オブジェクトのインスタンス固有の値は次のいずれかになります。

    • Simulink.LookupTable オブジェクト

    • Model1_LUT2 など、有効な MATLAB 構造体変数の名前

    • struct(‘Table’, …, ‘BP1’, …, ‘BP2’, …) など、リテラル構造体の式

    • Params.Model1.LUT2 または MATLAB 関数への呼び出しなど、有効な構造体を返すその他の式

  • [ブレークポイントの指定] プロパティが [参照] に設定されている場合、Simulink.LookupTable オブジェクトのインスタンス固有の値は次のいずれかになります。

    • Simulink.LookupTable オブジェクト。この場合、Simulink では、ルックアップ テーブル オブジェクトの [テーブル] プロパティのみを子モデルに渡します。これにより、Simulink.LookupTable オブジェクトと Simulink.Breakpoint オブジェクトのモデル引数を互いに独立して構成し、それらのオブジェクトをインスタンス パラメーターとして複数の Model ブロックに再利用できます。

    • [1 5 7; 2 8 13] など、リテラル数値配列値。

    • Model1_LUT2 など、数値配列変数の名前。

    • Params.Model1.LUT2 または MATLAB 関数への呼び出しなど、有効な数値配列を返すその他の式。

    この場合、Simulink.LookupTable で参照される Simulink.Breakpoint オブジェクトをモデル引数として構成すると、Simulink.Breakpoint オブジェクトのインスタンス固有の値は次のいずれかになります。

    • Simulink.Breakpoint オブジェクト。

    • ブレークポイントを定義する数値の配列。ブレークポイント オブジェクトの設計定義が配列で一致していなければなりません。この配列の値を使用して、Simulink で Simulink.Breakpoint オブジェクトが合成されます。

    • 数値配列変数または構造体のフィールドの名前。

Simulink.LookupTable 引数のインスタンス固有の値を構造体として指定する場合は、次のルールが適用されます。

  • モデル引数定義の各フィールドは構造体で指定しなければならず、フィールドの数とフィールドの名前が一致しなければならない。たとえば、タイプが [参照] である Simulink.LookupTable オブジェクトからはテーブル データしか子モデルに渡されませんが、この場合も構造体でブレークポイント データを指定しないと Simulink でエラーが報告されます。

  • テーブルの次元と構造体のブレークポイント データはモデル引数定義のテーブルの次元と構造体のブレークポイント データと一致しなければならない。

  • 構造体フィールドのデータ型が double の場合、値は対応するモデル引数フィールドのデータ型にキャストされる。それ以外の場合、値は対応するモデル引数フィールドのデータ型と一致しなければならない。

任意のシミュレーション モードおよびコード生成に対して、単純な数値として Simulink.LookupTable オブジェクトの値を指定できます。コード生成の場合、モデル引数を Auto 引数のストレージ クラスで設定すると、構造体または数値配列変数は生成されたコードで維持されません。ストレージ クラスを他の任意の値に設定する場合、他のモデル引数と同じように、構造体または数値配列の値が生成されるコードで調整可能な引数を初期化するために使用されます。

Simulink.LookupTable オブジェクトのインスタンス固有の値の指定

以下の例は、Simulink.LookupTable 引数のインスタンス固有の値を新しい Simulink.LookupTable および MATLAB 構造体として指定する方法を示します。

ルックアップ テーブルとコマンド プロンプトを使用して参照モデルをパラメーター化する例については、インスタンス固有のデータをプログラムでルックアップ テーブルに設定するを参照してください。

最初に、再利用可能なアルゴリズムを表すモデルを作成します。モデルで使用するモデル引数として Simulink.LookupTable オブジェクトを構成します。

  1. 再利用可能なアルゴリズムを表すモデル ex_arg_LUT_ref を作成します。

  2. モデル エクスプローラーを使用して、モデル ワークスペースに Simulink.LookupTable オブジェクトを追加します。[Simulink Lookup Table の追加] ボタン を使用できます。このオブジェクトに LUTArg という名前を付けます。

  3. [コンテンツ] ペインで、LUTArg について、[引数] 列のチェック ボックスをオンにします。

  4. [テーブルの次元数]2 に設定します。表形式の領域 [テーブル] および [ブレークポイント] で、[テーブル][BP1][BP2] データの値を指定します。たとえば、以下の値を MATLAB 式のボックスに入力することで、テーブルとブレークポイント データを設定します。

    • テーブル[3 4;1 2]

    • BP1[1 2]

    • BP2[3 4]

    ex_arg_LUT_ref から直接シミュレーションやコード生成を行う場合、モデルではこれらの値が使用されます。

  5. [構造体の型定義] の下で [名前]LUTArg_Type に設定します。

  6. [適用] をクリックします。

  7. [コンテンツ] ペインで、LUTArg について、[引数] 列のチェック ボックスをオンにします。

  8. 参照モデルの n-D Lookup Table ブロックで、[データの仕様][ルックアップ テーブル オブジェクト] に設定します。[名前]LUTArg に設定します。

  9. モデルを保存します。

次に、再利用可能なアルゴリズムを使用するモデルを作成し、Simulink.LookupTable オブジェクトのインスタンス固有の値を指定します。

  1. 再利用可能なアルゴリズムを 2 回使用するモデル ex_arg_LUT を作成します。

  2. コマンド プロンプトで、Simulink.LookupTable オブジェクトをモデル ワークスペースに作成します。あるいは、Simulink.LookupTable オブジェクトをデータ ディクショナリまたはベース ワークスペースに作成できます。

    LUTForInst1 = Simulink.LookupTable;
    
  3. オブジェクトのブレークポイント データとテーブル データを指定します。

    LUTForInst1.Table.Value = [8 7; 6 5];
    LUTForInst1.Breakpoints(1).Value = [5 6];
    LUTForInst1.Breakpoints(2).Value = [3 4];
    
  4. 構造体型名を指定します。この名前は、参照モデル ワークスペース内のオブジェクトによって指定されている名前と一致させます。

    LUTForInst1.StructTypeInfo.Name = 'LUTArg_Type';
    
  5. 構造体を使用して 2 番目の Model ブロックに対してインスタンス固有の引数値を作成します。構造体のブレークポイント データとテーブル データを指定します。

    StructForInst2.Table = [9 8; 7 7];
    StructForInst2.BP1 = [3 4];
    StructForInst2.BP2 = [5 6];
    
  6. ex_arg_LUT モデルで、モデル インスタンス Model に対し、[インスタンス パラメーター] タブで [LUTArg] の値を LUTForInst1 に設定します。

  7. モデル インスタンス Model1 について、[LUTArg]StructForInst2 に設定します。

ex_arg_LUT_ref の一方のインスタンスは、モデル ワークスペースの Simulink.LookupTable オブジェクトに保存されたテーブル データとブレークポイント データを使用します。もう一方のインスタンスは、構造体に保存されたテーブル データとブレークポイント データを使用します。

Simulink.LookupTable オブジェクトおよび Simulink.Breakpoint オブジェクトのインスタンス固有の値の指定

この例では、Simulink.LookupTable オブジェクトのインスタンス固有の値を新しい Simulink.LookupTable オブジェクトとして指定する方法を示します。また、Simulink.LookupTable オブジェクトで参照される Simulink.Breakpoint オブジェクトのインスタンス固有の値を指定する方法も示します。

最初に、再利用可能なアルゴリズムを表すモデルを作成します。Simulink.Breakpoint オブジェクトと Simulink.Breakpoint オブジェクトを参照する Simulink.LookupTable オブジェクトの両方をモデル引数として構成します。

  1. 再利用可能なアルゴリズムを表すモデル ex_arg_BP_ref を作成します。

  2. モデル エクスプローラーを使用して、モデル ワークスペースに Simulink.LookupTable オブジェクトを追加します。[Simulink Lookup Table の追加] ボタン を使用できます。このオブジェクトに LUTArg という名前を付けます。

  3. [コンテンツ] ペインで、LUTArg について、[引数] 列のチェック ボックスをオンにします。

  4. [テーブルの次元数][1] に設定します。

  5. テーブル データの値を [1 2] と指定します。

  6. [ブレークポイントの指定][参照] に設定します。

  7. [ブレークポイント] セクションで、[名前]BP1 に設定します。

  8. Simulink.Breakpoint オブジェクトをモデル ワークスペースに追加します。オブジェクトに BP1 という名前を付け、値を [3 4] と指定します。

  9. [コンテンツ] ペインで、BP1 について、[引数] 列のチェック ボックスをオンにします。

次に、再利用可能なアルゴリズムを使用するモデルを作成し、Simulink.LookupTable オブジェクトと Simulink.Breakpoint オブジェクトのインスタンス固有の値を指定します。

  1. 再利用可能なアルゴリズムを 2 回使用するモデル ex_arg_BP を作成します。

  2. コマンド プロンプトで、モデル インスタンス ModelSimulink.LookupTable オブジェクトと Simulink.Breakpoint オブジェクトをモデル ワークスペースに作成します。あるいは、これらのオブジェクトをデータ ディクショナリまたはベース ワークスペースに作成できます。

    LUTForInst1 = Simulink.LookupTable;
    BPForInst1 = Simulink.Breakpoint;
    
  3. オブジェクトのブレークポイント データとテーブル データを指定します。インスタンス固有の値の指定とモデル引数の指定が一致するように、LUTForInst1 に対してブレークポイント情報を指定する必要があります。ただし、子モデルにプッシュされるのはテーブル データだけです。

    LUTForInst1.Table.Value = [7 8];
    LUTForInst1.BreakpointsSpecification = 'Reference';
    LUTForInst1.Breakpoints = {'BPForInst1'};
    BPForInst1.Breakpoints.Value = [5 6];
    
  4. ex_arg_BP モデルのモデル インスタンス Model について、[インスタンス パラメーター] タブで [LUTArg] の値を LUTForInst1[BP1] の値を BPForInst1 に設定します。

  5. モデル インスタンス Model1 用に別の Simulink.LookupTable オブジェクトをモデル ワークスペースに作成し、テーブル データとブレークポイント データを指定します。あるいは、Simulink.LookupTable オブジェクトをデータ ディクショナリまたはベース ワークスペースに作成できます。

    LUTForInst2 = Simulink.LookupTable;
    BPForInst2 = Simulink.Breakpoint;
    
    BPForInst2.Breakpoints.Value = [11 12];
    LUTForInst2.Table.Value = [9 10];
    LUTForInst2.BreakpointsSpecification = 'Reference';
    LUTForInst2.Breakpoints = {'BPForInst2'};
    
  6. このモデル インスタンスについて、Simulink.Breakpoint オブジェクトのインスタンス固有の値を配列を使用して指定します。

    BPArrayForInst2 = [11 12];
    
  7. ex_arg_BP モデルのモデル インスタンス Model1 について、[インスタンス パラメーター] タブで [LUTArg] の値を LUTForInst2 に設定します。このモデル インスタンスについては、BP1 の値を配列 BPArrayForInst2 に設定します。

参考

オブジェクト

ブロック

トピック