Main Content

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

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

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

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

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

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

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

ノーマル モードの可視性

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

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

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

sldemo_mdlref_basic という名前のモデル例を開きます。

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

最上位モデルを更新すると、各 Model ブロック アイコンの隅に異なる色が設定されます。

  • CounterA という名前の Model ブロックの隅は白です。

  • CounterB という名前の Model ブロックの隅はグレーです。

  • CounterC という名前の Model ブロックの隅は黒です。

異なる隅の色により、シミュレーション モードとノーマル モードの可視性設定が示されます。

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

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

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

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

CounterA または CounterB という名前の Model ブロックをダブルクリックします。

ScopeA という名前の Scope ブロックを開きます。

開いた Model ブロックに関係なく、スコープには CounterA のデータが表示されます。これは、CounterA でノーマル モードの可視性が有効になっているためです。

参照モデルの他のインスタンスのデータを表示するには、シミュレーションの実行前にログ記録対象として信号をマークします。次に、シミュレーション データ インスペクターを使用します。

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

モデルをコンパイルした後、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 character vectors from this object.

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

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

sldemo_mdlref_depgraph([],[],[],'compile');
### Searching for referenced models in model 'sldemo_mdlref_depgraph'.
### Found 5 model references to update.
### Starting serial model reference simulation build.
### Model reference simulation target for sldemo_mdlref_F2C is up to date.
### Model reference simulation target for sldemo_mdlref_thermostat is up to date.
### Model reference simulation target for sldemo_mdlref_heat2cost is up to date.
### Model reference simulation target for sldemo_mdlref_house 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 1.2312s

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

blocks = get_param('sldemo_mdlref_depgraph',...
'CompiledModelBlockNormalModeVisibility')
blocks = struct with fields:
       sldemo_mdlref_F2C: [1x1 Simulink.BlockPath]
    sldemo_mdlref_heater: [1x1 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 character vectors from this object.
blocks.sldemo_mdlref_heater
ans = 
  Simulink.BlockPath
  Package: Simulink

  Block Path:
    'sldemo_mdlref_depgraph/thermostat'

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

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

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 ブロックのノーマル モードの可視性] ダイアログ ボックスですべてのチェック ボックスをクリアするのと同じ結果になります。

関連するトピック