Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

ノーマル モードの可視性

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

ノーマル モードの可視性を設定するには、最上位モデルの [シミュレーション] タブにある [準備] ギャラリーの [信号の監視] で、[ノーマル モードの可視性] をクリックします。この設定によりノーマル モードの可視性が有効になっているインスタンスが決まります。参照モデルのインスタンスについてノーマル モードの可視性を指定しない場合、Simulink® ソフトウェアはノーマル モードの可視性が有効になっている参照モデルのインスタンスを選択します。

シミュレーションの後、ノーマル モードの可視性のない Model ブロックから参照モデルを開こうとすると、Simulink ソフトウェアは警告を表示します。

ノーマル モードで参照モデルのどのインスタンスが表示されるかを制御し、シミュレーションが適切に実行されるようにモデルを設定するには、ノーマル モードの可視性をもつインスタンスの指定を参照してください。

参照モデルの複数のインスタンスを含むモデルの調査

sldemo_mdlref_basic モデルには CounterACounterBCounterC という名前の Model ブロックがあり、いずれも sldemo_mdlref_counter モデルを参照しています。ブロック線図を更新すると、sldemo_mdlref_basicModel ブロックごとに別々の角アイコンが表示されます。

sldemo_mdlref_basic after diagram update

Model ブロック角アイコンシミュレーション モードとノーマル モードの可視性設定
CounterAノーマル モード、ノーマル モードの可視性は有効
CounterB灰色の角ノーマル モード、ノーマル モードの可視性は無効
CounterC黒い角アクセラレータ モード (ノーマル モードの可視性は適用できない)

sldemo_mdlref_basic を開いてシミュレーションを実行します。CounterA という名前の Model ブロックをダブルクリックして ScopeA という名前の Scope ブロックを開きます。

ScopeA

スコープには、ノーマル モードの可視性が有効になっている CounterA という名前の Model ブロックのシミュレーション結果が表示されます。

CounterB という名前の Model ブロックをダブルクリックして sldemo_mdlref_counter モデルを開く場合でも、sldemo_mdlref_counter のスコープにはノーマル モードの可視性が有効になっている CounterA という名前の Model ブロックの結果が表示されます。

sldemo_mdlref_basic の詳細については、モデル参照によるコンポーネントベースのモデル化を参照してください。

ノーマル モードで参照モデルの複数のインスタンスを含むモデルの階層構造に依存関係アナライザーを使用する例については、モデル参照階層の可視化を参照してください。

参照モデルの複数のインスタンスを含むモデルの設定

  1. [最上位モデルごとに可能なインスタンスの総数] パラメーターを [複数] に設定します。

  2. ノーマル モードを使用するように参照モデルの各インスタンスを設定します。インスタンスを参照する Model ブロックの [ブロック パラメーター] ダイアログ ボックスで、[シミュレーション モード] パラメーターを [ノーマル] に設定します。その Model ブロックの階層の上位モデルがすべてノーマル モードになっていることを確認します。

    ノーマル モードの Model ブロックのアイコンの角は白 (空白) です。そのブロック線図を更新した後やモデルのシミュレーションを行った後は角が灰色に変わります。

  3. 必要に応じてノーマル モードの参照モデルの複数のインスタンスを使用するように、モデルが使用する S-Function を変更します。詳細については、Supporting the Use of Multiple Instances of Referenced Models That Are in Normal Modeを参照してください。

既定の設定では、Simulink はインスタンスの 1 つにノーマル モードの可視性を割り当てます。構成手順を完了した後で、既定以外のインスタンスがノーマル モードの可視性をもつように指定できます。

参照モデルでの再利用可能なアルゴリズムのカプセル化の詳細については、モデルの再利用を参照してください。

ノーマル モードの可視性をもつインスタンスの識別

現在ノーマル モードの可視性が有効になっているインスタンスを識別するには次を行います。

  1. ノーマル モードの可視性の設定を適用するために、ブロック線図を更新し、モデルに他の変更を行わないようにします。

  2. 対象のモデルを参照する Model ブロックを確認します。角が白い Model ブロックはノーマル モードの可視性が有効になっています。

モデルの編集中やコンパイル中には、ブロック線図を更新した後で ModelReferenceNormalModeVisibilityBlockPath パラメーターを使用します。結果は、ノーマル モードの可視性が有効になっているモデルを参照している Model ブロックのブロック パスを示す Simulink.BlockPath オブジェクトです。次に例を示します。

get_param('sldemo_mdlref_counter',...
'ModelReferenceNormalModeVisibilityBlockPath')
ans = 

  Simulink.BlockPath
  Package: Simulink

  Block Path:
    'sldemo_mdlref_basic/CounterA'

シミュレーション中またはコンパイル済み状態の最上位モデルに対しては、CompiledModelBlockNormalModeVisibility パラメーターを使用できます。次に例を示します。

a = get_param('sldemo_mdlref_depgraph',...
'CompiledModelBlockNormalModeVisibility')
a = 

  struct with fields:

       sldemo_mdlref_F2C: [1×1 Simulink.BlockPath]
    sldemo_mdlref_heater: [1×1 Simulink.BlockPath]

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

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

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

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

ノーマル モードの可視性をもつインスタンスの指定

メモ

シミュレーション中はノーマル モードの可視性を変更できません。

現在ノーマル モードの可視性をもつインスタンス以外に、参照モデルの別のインスタンスに対してノーマル モードの可視性を有効にするには、次を行います。

  1. 最上位モデルに移動します。

  2. [シミュレーション] タブの [準備] セクションで、[信号の監視] の下で [ノーマル モードの可視性] を選択します。

    [Model ブロックのノーマル モードの可視性] ダイアログ ボックスが開きます。たとえば、sldemo_mdlref_basic モデルのダイアログ ボックスは、階層ペインが拡張されると次のように表示されます。

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

    モデル階層ペインには、そのダイアログ ボックスを呼び出したモデルのモデル階層の一部が表示されます。階層はノーマル モードではない最初の Model ブロックで止まります。モデル階層ペインには参照保護されているモデルの Model ブロックは表示されません。

    ダイアログ ボックスには最上位モデルのモデルの階層構造全体が表示されます。参照モデルのノーマル モード インスタンスには、チェック ボックスが付いています。

    ヒント

    [Model ブロックのノーマル モードの可視性] ダイアログ ボックスの [モデルの階層構造] ペインに現在のモデルの階層構造が反映されるようにするには、[更新] をクリックします。

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

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

    Simulink によってそのモデルのすべての上位モデルがオンになり、モデルの他のインスタンスはすべてオフになります。モデルをオフにすると、Simulink によってそのモデルの子モデルがすべてオフになります。

    ヒント

    [Model ブロックのノーマル モードの可視性] ダイアログ ボックスからモデルを開くには、[モデルの階層構造] ペインでモデルを右クリックして [開く] をクリックします。

  4. ノーマル モードの可視性の設定を適用するには、モデルの階層構造の最上位モデルのシミュレーションを実行します。

[Model ブロックのノーマル モードの可視性] ダイアログ ボックスを使用するのとは別の方法として、MATLAB® コマンド ラインで ModelBlockNormalModeVisibility パラメーターを使用できます。次のいずれかの値を入力として指定できます。

  • Simulink.BlockPath オブジェクトの配列。以下に例を示します。

    bp1 = Simulink.BlockPath({'mVisibility_top/Model',  ...
    'mVisibility_mid_A/Model'});
    bp2 = Simulink.BlockPath({'mVisibility_top/Model1', ...
    'mVisibility_mid_B/Model1'});
     bps = [bp1, bp2];
     set_param(topMdl,'ModelBlockNormalModeVisibility',bps);
    
  • 文字ベクトルの cell 配列の cell 配列。文字ベクトルは個々のブロックとモデルのパスです。次の例は、オブジェクト配列の例と同じ効果があります。

    p1 = {'mVisibility_top/Model','mVisibility_mid_A/Model'};
    p2 = {'mVisibility_top/Model1','mVisibility_mid_B/Model1'};
    set_param(topMdl,'ModelBlockNormalModeVisibility',{p1, p2});
    
  • 空の配列。ノーマル モードの可視性をもつインスタンスについての Simulink の既定の選択を使用するように指定します。以下に例を示します。

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

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

関連する例

詳細