メインコンテンツ

ノーマル モードでの複数の参照モデル インスタンスのシミュレーション

複数の Model ブロックで同じモデルを参照できます。同じモデルを参照する各 Model ブロックでは、モデルの階層構造内の参照モデルの "インスタンス" を作成します。

次の両方の条件が当てはまっている場合、参照モデル インスタンスはノーマル モードでシミュレートされます。

  • 対応する Model ブロックの [シミュレーション モード] ブロック パラメーターが [ノーマル] に設定されている。

  • 最上位モデルおよびすべての中間 Model ブロックが、ノーマル モードでシミュレートするように構成されている。

追加の要件については、モデル参照の要件と制限を参照してください。

複数の参照モデル インスタンスをノーマル モードでシミュレートした場合、"ノーマル モードの可視性" をもつインスタンスは 1 つだけです。

ノーマル モードの可視性

ノーマル モードでシミュレーションを実行する参照モデルのインスタンスはすべてシミュレーションの一部です。ただし、参照モデルのノーマル モードの 1 つのインスタンスだけがすべてのデータ可視化をサポートします。たとえば、スコープと端子の値ラベルのデータは、ノーマル モードの可視性が有効になっているインスタンスについてのみ表示されます。参照モデルのすべてのインスタンスについてのシミュレーション結果を表示するには、シミュレーション データ インスペクターを使用します。ノーマル モードでシミュレーションを実行するモデルのインスタンスごとにインスタンス固有のデータを表示するには、参照モデルで Display ブロックを使用します。

ノーマル モードの可視性を設定するには、Simulink® ツールストリップの [シミュレーション] タブで、[準備] セクションの一番右にある下矢印をクリックします。ギャラリーの [信号の監視] で、[ノーマル モードの可視性] をクリックします。この設定によりノーマル モードの可視性が有効になっているインスタンスが決まります。参照モデルのインスタンスについてノーマル モードの可視性を指定しなかった場合、ノーマル モードの可視性が有効な参照モデルのインスタンスが選択されます。

複数の参照モデル インスタンスの確認

モデル例を開きます。このモデルには CounterACounterBCounterC という名前の Model ブロックがあり、いずれも BasicCounterAlgorithm という名前のモデルを参照しています。

mdl = "NormalModeVisibility";
open_system(mdl);

モデルをコンパイルする前、各 Model ブロック アイコンの隅は白または黒です。異なる隅の色により、シミュレーション モードが示されます。

  • 白の隅 — ノーマル モード

  • 黒の隅 — アクセラレータ モード

モデルをコンパイルした後、各 Model ブロック アイコンの隅は白、グレー、または黒です。異なる隅の色により、シミュレーション モードとノーマル モードの可視性設定が示されます。

  • 白の隅 — ノーマル モード、ノーマル モードの可視性は有効

  • グレーの隅 — ノーマル モード、ノーマル モードの可視性は無効

  • 黒の隅 — アクセラレータ モード

モデルをコンパイルするには、Simulink® ツールストリップの [モデル化] タブで、[モデルの更新] をクリックします。あるいは、以下のコマンドを入力します。

set_param(mdl,SimulationCommand="Update")

NormalModeVisibility model with updated Model block icon corner colors and different sample time colors for each Model block

この例では、Model ブロック アイコンの隅の色は以下を示します。

  • CounterA という名前の Model ブロックはノーマル モードでシミュレートされ、ノーマル モードの可視性が有効になっています。

  • CounterB という名前の Model ブロックはノーマル モードでシミュレートされ、ノーマル モードの可視性が無効になっています。

  • CounterC という名前の Model ブロックはアクセラレータ モードでシミュレートされます。

サンプル時間の色は、各 Model ブロックで異なるサンプル時間が使用されることを示しています。

CounterA という名前の Model ブロックをダブルクリックします。あるいは、以下のコマンドを入力します。

refmdlA = "NormalModeVisibility/CounterA";
open_system(refmdlA)

BasicCounterAlgorithm model

参照モデルで、UpdatedCount という名前の信号がログ記録用にマークされています。

モデルの階層構造をシミュレートします。

sim(mdl);
### Searching for referenced models in model 'NormalModeVisibility'.
### Total of 1 models to build.
### Starting serial model build.
### Model reference simulation target for BasicCounterAlgorithm is up to date.

Build Summary

0 of 1 models built (1 models already up to date)
Build duration: 0h 0m 0.13872s

参照モデルの各インスタンスのログ データを表示するには、シミュレーション データ インスペクターを開きます。Simulink ツールストリップの [シミュレーション] タブで [データ インスペクター] をクリックします。次に、対象の信号を選択します。

Simulation Data Inspector with different data for each instance of the UpdatedCount signal in the model hierarchy

UpdatedCount という名前の信号のデータは、参照モデルのインスタンスごとに異なります。これは、それらのサンプル時間が異なるためです。

ノーマル モードの可視性が有効になっているインスタンスの判別

モデルをコンパイルした後、Model ブロック アイコンの隅を調べることで、インスタンスでノーマル モードの可視性が有効になっているかどうかを判別できます。隅が白の場合、インスタンスでノーマル モードの可視性が有効になっています。大規模なモデルの階層構造では、Model ブロック アイコンに基づいて当該インスタンスを見つけようとすると、時間がかかることがあります。代わりに、以下のプログラムによるパラメーターを使用します。

  • ModelReferenceNormalModeVisibilityBlockPath — 参照モデルについて、ノーマル モードの可視性が有効になっている Model ブロックを検索します。

  • CompiledModelBlockNormalModeVisibility — モデルの階層構造内のすべての参照モデルについて、ノーマル モードの可視性が有効になっている Model ブロックを検索します。

たとえば、ModelReferenceHierarchy という名前のプロジェクトを開きます。

openProject("ModelReferenceHierarchy");

プロジェクトで sldemo_mdlref_depgraph を最上位モデルとしたモデルの階層構造が開きます。

sldemo_mdlref_F2C モデルを参照しており、かつノーマル モードの可視性が有効になっている Model ブロックを検索するとします。

最上位モデルを更新します。

set_param("sldemo_mdlref_depgraph",SimulationCommand="Update");

Model ブロック パスを取得します。

get_param('sldemo_mdlref_F2C',...
'ModelReferenceNormalModeVisibilityBlockPath')
ans = 
  Simulink.BlockPath
  Package: Simulink

  Block Path:
    sldemo_mdlref_depgraph/thermostat
      sldemo_mdlref_heater/Fahrenheit to Celsius

  Use the getBlock method to access block path strings from this object.

  Methods

ノーマル モードの可視性が有効になっている、モデルの階層構造内のすべての Model ブロックを検索するとします。

モデル名 sldemo_mdlref_depgraph をプログラムによるインターフェイスとして使用して、シミュレーションのコンパイル フェーズを実行します。

sldemo_mdlref_depgraph([],[],[],'compile');
### Searching for referenced models in model 'sldemo_mdlref_depgraph'.
### Total of 5 models to build.
### Starting serial model build.
### Model reference simulation target for sldemo_mdlref_heat2cost is up to date.
### Model reference simulation target for sldemo_mdlref_thermostat is up to date.
### Model reference simulation target for sldemo_mdlref_house is up to date.
### Model reference simulation target for sldemo_mdlref_F2C is up to date.
### Model reference simulation target for sldemo_mdlref_outdoor_temp is up to date.

Build Summary

0 of 5 models built (5 models already up to date)
Build duration: 0h 0m 0.34729s

Model ブロック パスを取得します。

blocks = get_param('sldemo_mdlref_depgraph',...
'CompiledModelBlockNormalModeVisibility')
blocks = struct with fields:
       sldemo_mdlref_F2C: [1×1 Simulink.BlockPath]
    sldemo_mdlref_heater: [1×1 Simulink.BlockPath]

Model ブロック パスを検査します。

blocks.sldemo_mdlref_F2C
ans = 
  Simulink.BlockPath
  Package: Simulink

  Block Path:
    sldemo_mdlref_depgraph/thermostat
      sldemo_mdlref_heater/Fahrenheit to Celsius

  Use the getBlock method to access block path strings from this object.

  Methods
blocks.sldemo_mdlref_heater
ans = 
  Simulink.BlockPath
  Package: Simulink

  Block Path:
    sldemo_mdlref_depgraph/thermostat

  Use the getBlock method to access block path strings from this object.

  Methods

コンパイル フェーズを終了します。

sldemo_mdlref_depgraph([],[],[],'term');

ノーマル モードの可視性が有効なインスタンスの指定

モデルの階層構造の編集時に、ノーマル モードの可視性が有効な参照モデルのインスタンスを指定できます。

  1. Simulink ツールストリップの [シミュレーション] タブで、[準備] セクションの一番右にある下矢印をクリックします。次に、[信号の監視] で、[ノーマル モードの可視性] をクリックします。

    [Model ブロックのノーマル モードの可視性] ダイアログ ボックスが開きます。たとえば、sldemo_mdlref_basic モデルのこのダイアログ ボックスでは、階層ペインが展開されています。

    Model Block Normal Mode Visibility dialog box with no model instance selected

    ダイアログ ボックスでは、保護されているモデルを参照する Model ブロックは表示されません。また、モデルの階層構造に表示されている各分岐は、ノーマル モードではない最初の Model ブロックで止まります。参照モデルのノーマル モード インスタンスには、チェック ボックスが付いています。

    ヒント

    ダイアログ ボックスでモデルの階層構造を更新して現在のモデルの階層構造が反映されるようにするには、[リフレッシュ] をクリックします。

  2. ノーマル モードの可視性をオンにするモデルのインスタンスを選択します。

    Model Block Normal Mode Visibility dialog box with a model instance selected

    インスタンスを選択すると、その親も選択されます。インスタンスをクリアすると、その子もクリアされます。

    ヒント

    ダイアログ ボックスからモデルを開くには、モデルを右クリックします。次に、[開く] をクリックします。

  3. ノーマル モードの可視性の設定を適用するには、モデルの階層構造をシミュレートします。

あるいは、ModelBlockNormalModeVisibility パラメーターを使用して、ノーマル モードの可視性が有効になっているインスタンスを変更します。このパラメーターは次の値のいずれかに設定します。

  • Simulink.BlockPath オブジェクトの配列。

    bp1 = Simulink.BlockPath({'TopModel/Model',...
        'ReferencedModelA/Model'});
    bp2 = Simulink.BlockPath({'TopModel/Model1',...
        'ReferencedModelB/Model'});
    bps = [bp1, bp2];
    set_param('TopModel','ModelBlockNormalModeVisibility',bps);
    

    メモ

    ノーマル モードの可視性を指定する Simulink.BlockPath オブジェクトを作成する場合、以下が適用されます。

    • 最初の文字ベクトルは、モデル参照階層の最上位モデルにある 1 つのブロックを示していなければなりません。

    • 各文字ベクトルは、ノーマル モードの Model ブロックを表していなければなりません。

    • バリアント モデルまたはバリアント サブシステムを示す文字ベクトルは、アクティブなバリアントを参照していなければなりません。

  • 文字ベクトルの cell 配列の cell 配列。文字ベクトルは個々のブロックとモデルのパスです。

    bp1 = {'TopModel/Model','ReferencedModelA/Model'};
    bp2 = {'TopModel/Model1','ReferencedModelB/Model'};
    bps = {bp1, bp2};
    set_param('TopModel','ModelBlockNormalModeVisibility',bps);
    
  • 空の配列。ノーマル モードの可視性をもつインスタンスの既定の選択を使用します。

    set_param('TopModel','ModelBlockNormalModeVisibility',[]);

    空の配列を使用すると、[Model ブロックのノーマル モードの可視性] ダイアログ ボックスですべてのチェック ボックスをクリアするのと同じ結果になります。

参考

トピック