ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

参照モデルのシミュレーション モード

参照モデルのシミュレーション モード

Simulink® はモデル参照階層内の最上位のモデルを、参照モデルが存在しないときと同じように実行します。最上位モデルでは、すべての Simulink シミュレーション モードを使用できます。Simulink は、参照モデルの実行に、ノーマル、アクセラレータ、ソフトウェアインザループ (SIL)、プロセッサインザループ (PIL) の 4 つのモードを使用できます。

ノーマル モード

Simulink はノーマル モードのサブモデルをインタープリターで実行します。ノーマル モードを他のシミュレーション モードと比較すると次のような特徴があります。

  • コードの生成やコンパイルで遅くなることがない。

  • 使用できる Simulink ツールと Stateflow® のツールが多く、次のようなツールがサポートされている。

    • スコープ、端子値の表示、その他の出力表示ツール。

      • スコープはアクセラレータ モードで参照されるモデルで使用できますが、信号とスコープのマネージャーを使用し、信号にテスト ポイントを追加しなければなりません。テスト ポイントの追加や削除には、モデルの SIM ターゲットをリビルドする必要があり、時間がかかります。

    • モデル カバレッジ解析。

    • Stateflow のデバッグとアニメーション。

  • より正確な線形化解析を提供。

  • アクセラレータ モードより多くの S-Function をサポート。

ノーマル モードはアクセラレータ モードより遅く実行されます。

モデルのシミュレーション結果は、ノーマル モードでもアクセラレータ モードでもほとんど同じです。使用される最適化やライブラリの違いによって発生する差異はごくわずかです。

ノーマル モードでは 1 つの参照モデルの複数のインスタンスで使用できます。詳細は、「参照モデルの複数インスタンスでのノーマル モードの使用」を参照してください。

アクセラレータ モード

Simulink は、アクセラレータ モードのサブモデルを実行するとき、サブモデルの MEX ファイル (または シミュレーション ターゲット) を作成して実行します。詳細は、「モデル参照のシミュレーション ターゲット」を参照してください。アクセラレータ モードには次の特徴があります。

  • コード生成とコンパイルに時間がかかる。

  • モデル カバレッジ ツールや Simulink デバッガーなど一部の Simulink ツールを完全にサポートしない。

  • ノーマル モードより高速で実行される。

モデルのシミュレーション結果は、ノーマル モードでもアクセラレータ モードでもほとんど同じです。使用される最適化やライブラリの違いによって発生する差異はごくわずかです。

ソフトウェアインザループ (SIL) モード

Simulink は SIL モードで参照されるモデルを、そのサブモデルのモデル参照ターゲットを使用して量産コードを生成することによって実行します。このコードは、ホスト プラットフォーム用にコンパイルされてホスト プラットフォーム上で実行されます。

SIL モードでは次のことができます。

  • 元のモデルを変更せずに、生成されたソースコードを検証できる。

  • 生成されたソース コードで元のモデルのテスト ハーネスを再利用できる。

ターゲット ハードウェアが使用できないとき、SIL モードは PIL シミュレーションの便利な代替手段になります。

このオプションには Embedded Coder® ソフトウェアが必要です。

詳細は、Embedded Coder ドキュメンテーションの「数値的等価性のテスト」を参照してください。

プロセッサインザループ (PIL) モード

Simulink は PIL モードで参照されるモデルを、そのサブモデルのモデル参照ターゲットを使用して量産コードを生成することによって実行します。このコードはターゲット プロセッサまたは同等の命令セット シミュレーターでクロスコンパイルされ実行されます。

PIL モードでは次のことができます。

  • 元のモデルを変更せずに、配布オブジェクト コードをターゲット プロセッサ上で検証できる。

  • 生成されたソース コードで元のモデルのテスト ハーネスを再利用できる。

このオプションには Embedded Coder ソフトウェアが必要です。

詳細は、Embedded Coder ドキュメンテーションの「数値的等価性のテスト」を参照してください。

シミュレーション モードの指定

参照モデルの個々のインスタンスを表す Model ブロックがそのシミュレーション モードを制御します。サブモデルのシミュレーション モードを設定または変更する手順を次に示します。

  1. Model ブロックの [ブロック パラメーター] ダイアログ ボックスにアクセスします (「Model ブロックの動作」を参照)。

  2. [シミュレーション モード] パラメーターを設定します。

  3. [OK] または [適用] をクリックします。

シミュレーション モードの混在

次の表は、親モデルのシミュレーション モードとそのサブモデルのシミュレーション モードとの関係をまとめたものです。

親モデルのシミュレーション モードサブモデルのシミュレーション モード
ノーマル
  • サブモデルはノーマル、アクセラレータ、SIL、PIL の各モードを使用できます。

  • サブモデルは、階層内の上位のモデルがすべてノーマル モードで実行されるときにしかノーマル モードを使用できません。その場合、ノーマル モードのパスが最上位モデルからモデル参照階層内を通してノーマル モードのサブモデルまで続きます。

アクセラレータ
  • すべての下位モデルもアクセラレータ モードで実行しなければなりません。

  • ノーマル モードのモデルがアクセラレータ モード モデルの下位にあると、Simulink は警告を発生し、一時的にそのノーマル モードの指定を無視します。

  • SIL モードまたは PIL モードのモデルがアクセラレータ モード モデルの下位にあると、エラーが発生します。

SIL
  • シミュレーション モードが Normal、Accelerator または SIL であるという条件で、すべての下位モデルが SIL モデルでも実行されます。そうでない場合、エラーが発生します。「Simulation Mode Override Behavior in Model Reference Hierarchy」を参照してください。

  • SIL モードの Model ブロックは、その下位のブロックのモデル参照ターゲットを使用します。

  • SIL モードでは、モデル参照階層の最上位から始めて、複数の Model ブロック を一度に実行できます。ただし、コード カバレッジまたはコード実行プロファイルでは、SIL モードで一度に実行できる Model ブロックは 1 つだけです。

PIL
  • シミュレーション モードが Normal、Accelerator または PIL であるという条件で、すべての下位モデルが PIL モデルでも実行されます。そうでない場合、エラーが発生します。「Simulation Mode Override Behavior in Model Reference Hierarchy」を参照してください。

  • PIL モードの Model ブロックは、その下位のブロックのモデル参照ターゲットを使用します。

  • PIL モードでは、モデル参照階層の最上位から始めて、一度に一つずつしか Model ブロック を実行できません。

SIL と PIL モードの詳細は、Embedded Coder のドキュメンテーションを参照してください。

参照モデルの複数インスタンスでのノーマル モードの使用

ノーマル モードでは、複数の参照があるモデルのシミュレーションができます。

ノーマル モードの可視性

ノーマル モードの参照モデルのインスタンスはすべてシミュレーションの一部です。ただし、Simulink はモデル ウィンドウにインスタンスを 1 つしか表示しません。表示されるインスタンスはノーマル モードの可視性の設定によって決定されます。ノーマル モードの可視性には Scope ブロックとデータ端子の値の表示が含まれます。

[ノーマル モードの可視性] を設定しないでおくと、Simulink は各ノーマル モード モデルのインスタンスを 1 つ選択して表示します。

シミュレーションの後、ノーマル モードの可視性がオフになっている Model ブロックから参照モデルを開こうとすると、Simulink は警告を出します。

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

    メモ:   参照モデルに対する [ノーマル モードの可視性] 設定を変更した場合、最上位のモデルのシミュレーションを実行すると、その設定が使用されるようになります。

ノーマル モードで複数の参照インスタンスをもつモデルの例

sldemo_mdlref_basic-  sldemo_mdlref_basicsldemo_mdlref_basic モデルには 3 つの Model ブロック (CounterACounterBCounterC) があり、いずれも sldemo_mdlref_counter モデルを参照しています。

ブロック線図を更新すると、sldemo_mdlref_basicsldemo_mdlref_counter を参照する 3 つの Model ブロックに別々のアイコンを表示します。

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

次の手順を行うと、次のような ScopeA ブロックが表示されます。

  1. sldemo_mdlref_basic をシミュレートします。

  2. sldemo_mdlref_counter モデルを開きます。

  3. ScopeA ブロックを開きます。

この ScopeA ブロックは、ノーマル モードの可視性がオンになっている CounterA Model ブロックのシミュレーション結果を反映します。

CounterB Model ブロックから mdlref_counter モデルを開こうとすると (たとえば Model ブロックをダブルクリックして)、mdlref_counter の ScopeA にはまだ CounterA Model ブロックの結果が表示されていますが、これはノーマル モードの可視性が on に設定されている Model ブロックが表示されるためです。

sldemo_mdlref_depgraph-  sldemo_mdlref_depgraphsldemo_mdlref_depgraph モデルは、同じ参照モデルのノーマル モード インスタンスを複数もつモデルでの [モデル依存関係ビューアー] の使用方法を示します。このモデルは、複数のノーマル モード参照インスタンスをもつモデルを設定するために必要な手順を示します。

複数のノーマル モード参照インスタンスをもつモデルの設定

ここでは、ノーマル モード参照モデルの複数インスタンスを使用するために必要なモデルの設定方法を説明します。

  1. [コンフィギュレーション パラメーター][モデル参照] [最上位モデルごとに可能なインスタンスの総数] パラメーターを [複数] に設定します。

    「トップのモデルごとに可能なインスタンスの総数」パラメーターのドキュメンテーションに説明されている条件を満たすために複数の設定を使用できないモデルでは、その参照モデルのインスタンスの 1 つしかノーマル モードにできません。

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

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

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

既定の設定では、Simulink がインスタンスの 1 つにノーマル モードを割り当てます。この節の手順を行った後、既定でノーマル モードの可視性がオンになっていないインスタンスの可視性をオンにできます。詳細は、「ノーマル モードの可視性をオンにするインスタンスの指定」を参照してください。

ノーマル モードの可視性をオンにするインスタンスの指定

ここでは、Simulink が自動的に選択してノーマル モードの可視性をオンにしたインスタンス以外のインスタンスにノーマル モードの可視性を指定する方法を説明します。

必要な作業を次に示します。

  1. (必要に応じて)「ノーマル モードの可視性をもつインスタンスの識別」を行います。

  2. 「ノーマル モードの可視性の設定」.

  3. 新しく設定したノーマル モードの可視性を適用するために、最上位のモデルをシミュレートします。

ノーマル モードの可視性をもつインスタンスの識別-  どのインスタンスがノーマル モードの可視性をもっているかがまだわからない場合、次の方法のいずれかを使って調べることができます。

  • ブロック線図を更新した後、モデルに他の変更が加えられていない場合、モデル階層をたどって問題のモデルを参照している Model ブロックを調べることができます。ノーマル モードの可視性がオンになっている Model ブロックは角が白くなっています。

  • モデルの編集中やコンパイル中には、ModelReferenceNormalModeVisibilityBlockPath パラメーターを使用します。

    このパラメーターをモデルの編集中に使用する場合、このパラメーターを使用する前にブロック線図を更新しなければなりません。

    結果は、ノーマル モードの可視性がオンになっているモデルを参照している Model ブロックのブロック パスを示す Simulink.BlockPath オブジェクトです。以下に例を示します。

    get_param('sldemo_mdlref_basic',...
     'ModelReferenceNormalModeVisibilityBlockPath')
    
    ans =
    
       Simulink.BlockPath
       Package: Simulink
    
       Block Path:
          'sldemo_mdlref_basic/CounterA'
  • シミュレーション中またはコンパイル済み状態の最上位モデルに対しては、CompiledModelBlockInstancesBlockPath パラメーターを使用できます。以下に例を示します。

    a = get_param('sldemo_mdlref_depgraph',...
     'CompiledModelBlockInstancesBlockPath')
    
    a = 
    
             sldemo_mdlref_F2C: [1x1 Simulink.BlockPath]
          sldemo_mdlref_heater: [1x1 Simulink.BlockPath]
    sldemo_mdlref_outdoor_temp: [1x1 Simulink.BlockPath]

ノーマル モードの可視性の設定-  現在ノーマル モードの可視性をもっていない参照モデル インスタンスの可視性をオンにするには、次のいずれかの方法を使用します。

  • 最上位モデルに移動して、[ブロック線図][サブシステムとモデル参照][Model ブロックのノーマル モードの可視性] メニュー項目を選択します。

    [Model ブロックのノーマル モードの可視性] ダイアログ ボックスが開きます。このダイアログ ボックスの右側ペインには案内が表示されます。このダイアログ ボックスの詳細は、「[Model ブロックのノーマル モードの可視性] ダイアログ ボックス」を参照してください。

  • MATLAB® コマンド ラインで、ModelReferenceNormalModeVisibility パラメーターを設定する。

    入力には、以下を指定することができます。

    • 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);
      
    • 文字列のセル配列のセル配列。文字列は個々のブロックとモデルのパスです。次の例は前の例 (Simulink.BlockPath オブジェクトの配列を指定する方法を示す) と同じ結果になります。

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

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

[Model ブロックのノーマル モードの可視性] ダイアログ ボックス

ノーマル モードになっている参照モデルのインスタンスを複数含むモデルでは、[Model ブロックのノーマル モードの可視性] ダイアログ ボックスを使って個々のインスタンスの可視性を設定できます。ノーマル モードの可視性は、「ノーマル モードの可視性」で説明されています。

代わりに、ModelReferenceNormalModeVisibility パラメーターを設定することもできます。ノーマル モードになっている参照モデルのインスタンスで、Simulink が自動的に選択するインスタンスではないものを指定する方法は、「ノーマル モードの可視性をオンにするインスタンスの指定」を参照してください。

[Model ブロックのノーマル モードの可視性] ダイアログ ボックスを開く-  [Model ブロックのノーマル モードの可視性] ダイアログ ボックスを開くには、最上位モデルにまで進み、[ブロック線図][サブシステムとモデル参照][Model ブロックのノーマル モードの可視性] を選択します。

sldemo_mdlref_basicsldemo_mdlref_basic モデルのダイアログ ボックスは、階層ペインが拡張されると次のように表示されます。

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

ノーマル モードの可視性を設定するモデルの選択-  

ダイアログ ボックスには最上位モデルのモデル ブロック階層全体が表示されます。参照モデルのノーマル モード インスタンスには、チェック ボックスが付いています。各モデルで、ノーマル モードの可視性をオンにするインスタンスのチェック ボックスを選択します。

モデルを選択すると、Simulink によって次の処理が行われます。

  • そのモデルの上位モデルがすべて選択される。

  • そのモデルの他のインスタンスがすべて選択解除される。

モデルが選択解除されると、Simulink によってそのモデルの子モデルがすべて選択解除されます。

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

モデル参照階層の表示の更新-  [Model ブロックのノーマル モードの可視性] ダイアログ ボックスのモデル階層ペインに最新のモデル階層が確実に反映されるようにするには、[更新] をクリックします。

独立型のモデルまたは最上位モデルの高速化

Simulink アクセラレータ モードやラピッド アクセラレータ モードを使用すると、モデル参照階層の最上位のモデルも含めて、Simulink モデルの実行を高速化できます。アクセラレータ モードの詳細は、ドキュメンテーションの「速度の向上」を参照してください。ラピッド アクセラレータ モードについては、「ラピッド シミュレーション」を参照してください。

Simulink のアクセラレータ モードまたはラピッド アクセラレータ モードで最上位のモデルを実行すると、下位のすべてのモデルがアクセラレータ モードで実行されます。ノーマル モードが指定されているサブモデルがあると、Simulink は警告メッセージを表示します。

参照モデルのアクセラレータ モード実行を次の場合と混同しないように注意してください。

異なるタイプの高速化が共有する機能やテクニックは多数ありますが、その実装方法に違いがあり、要求や制限が異なります。

この情報は役に立ちましたか?