Main Content

モデル参照の要件と制限

モデルを参照する前に、モデル参照の要件と制限について考慮します。要件と制限を事前に把握することで、モデル参照を適切に行うための準備ができます。

モデルの再利用

参照モデルに以下のいずれかのプロパティがない限り、モデルの階層構造内で 1 つのモデルを複数回参照できます。

  • 単一インスタンスを設定する他のモデルを参照している。

  • モデルには、To File ブロックが含まれている。

  • モデルにマルチインスタンス モデルでサポートされていないストレージ クラスを使用する内部信号または状態が含まれている。内部信号と状態には、Auto または Model default に設定されたストレージ クラスがなければならない。また、内部データの既定のストレージ クラスはマルチインスタンス ストレージ クラスでなければならない。

  • モデルでエクスポートされた Stateflow® グラフィカル関数が使用される。

  • 参照モデルがアクセラレータ モードで実行され、インライン化されていないか、インライン化されているがオプション SS_OPTION_WORKS_WITH_CODE_REUSE が設定されていない S-Function を含んでいる。

  • 次のような Function-Call Subsystem を含む。

    • Simulink® ソフトウェアによって強制的に関数にされる

    • 幅の広い信号によって呼び出される

参照モデルに以下のいずれかのプロパティがある場合、モデルの 1 つのインスタンスのみモデルの階層構造に表示できます。モデルの [最上位モデルごとに可能なインスタンスの総数][1] に設定されなければなりません。

モデル マスク

参照モデルでマスク ブロックを使用することができます。また、参照モデルをマスクすることもできます (マスクしたモデルの作成と参照を参照)。

マスクを正常に使用するには、以下の要件と制限について考慮します。

  • 参照モデルの名前をマスクが指定する場合、マスクは参照モデルの名前を直接指定しなければなりません。ワークスペース変数を使用して名前を指定することはできません。

  • Model ブロックのマスク ワークスペースは参照モデルで利用できません。参照モデルが使用している変数は、次のワークスペースのいずれかに解決されなければなりません。

    • 参照モデルが定義するワークスペース

    • MATLAB® ベース ワークスペース

  • マスク コールバックは Model ブロックを追加したり、Model ブロック名を変更したり、Model ブロックのシミュレーション モードを変更することはできません。

参照モデルにおける S-Function

S-Function の種類ごとに、モデル参照の異なるレベルのサポートが提供されます。

S-Function のタイプノーマル モードで参照されるモデルアクセラレータ モードで参照されるモデルと保護モデル
Level-1 MATLAB S-Functionサポートなしサポートなし
Level-2 MATLAB S-Functionサポートありサポートあり — TLC ファイルが必要
手書きの C MEX S-Function

サポートあり — TLC ファイルでインライン化が可能

サポートあり — TLC ファイルでインライン化が可能
S-Function Builderサポートありサポートあり
レガシ コード ツールサポートありサポートあり

参照モデルで S-Function を使用する場合、以下の要件と制限を考慮します。

S-Function の考慮事項要件と制限
サンプル時間の継承

S-Function が継承されたサンプル時間に依存する場合、S-Function は継承されたサンプル時間への依存関係を明示的に制限しなければなりません。サンプル時間の継承を制御するには、S-Function が継承を許可するかどうかに基づいて、ssSetModelReferenceSampleTimeInheritanceRule を別の方法で使用します。詳細については、サンプル時間継承ルールを指定する S-Function (Simulink Coder)を参照してください。

アクセラレータ モードで参照されるモデル

アクセラレータ モードの参照モデルに Target Language Compiler (TLC) ファイルを使用してインライン化する必要がある S-Function が含まれている場合、S-Function はその mdlInitializeSizes メソッド内で ssSetOptions マクロを使用して SS_OPTION_USE_TLC_WITH_ACCELERATOR オプションを設定しなければなりません。このオプションが設定されていないと、シミュレーション ターゲットは S-Function をインライン化しません。

参照モデルは、次の場合、インラインでない S-Function を使用できません。

  • モデルの階層構造の中で、複数回参照されているモデル。この制限を回避するには、ノーマル モードを使用するか、次の方法で対処します。

    1. 参照モデルのコピーを作成します。

    2. 別の名前をコピーに割り当てます。

    3. モデルを必要とする場所ごとに別々のコピーを参照します。

  • S-Function が文字ベクトル パラメーターを使用する。

アクセラレータ モードの参照モデルは Simulink Coder™ ソフトウェアによって生成された S-Function を使用できません。

ノーマル モードで参照されるモデル

条件によっては、ノーマル モードで実行される参照モデル内に C S-Function があると、正常な実行が不可能になります。詳細については、S-Functions in Normal Mode Referenced Modelsを参照してください。

ノーマル モードの参照モデル内で S-Function を使用できるかどうかを指定するには、関数 ssSetModelReferenceNormalModeSupport SimStruct を使用します。

S-Function がノーマル モードで参照モデルの複数のインスタンスを処理するには、複数の exec インスタンスをサポートすることを S-Function で明示的に示さなければなりません。詳細については、Supporting the Use of Multiple Instances of Referenced Models That Are in Normal Modeを参照してください。

保護モデル

保護モデルに Target Language Compiler (TLC) ファイルを使用してインライン化する必要がある S-Function が含まれている場合、S-Function はその mdlInitializeSizes メソッド内で ssSetOptions マクロを使用して SS_OPTION_USE_TLC_WITH_ACCELERATOR オプションを設定しなければなりません。

モデル アーキテクチャの要件と制限

要素要件と制限
Goto ブロックと From ブロック

Goto ブロックおよび From ブロックはモデル参照の境界を越えることはできません。

反復サブシステム

参照モデルに Assignment ブロックが含まれる場合、Assignment ブロックが反復サブシステムにも含まれる場合に限り、Model ブロックを反復サブシステムに配置できます。

InitFcn コールバック

最上位モデルの InitFcn コールバックは、参照モデルによって使用されるパラメーターを変更できません。

参照モデルの印刷

最上位モデルから参照モデルを印刷できません。

信号の要件と制限

信号要件と制限
0 ベースまたは 1 ベースのインデックス情報の伝播

次の 2 つの例では、Simulink はブロックに接続されている参照モデルのルートレベルの端子に 0 ベースまたは 1 ベースのインデックス情報を伝播しません。

  • インデックスを受け入れる (Assignment ブロックなど)

  • インデックスを生成する (For Iterator ブロックなど)

Assignment ブロックは、インデックスを受け入れるブロックの例です。インデックスを生成するブロックの例として、For Iterator ブロックがあります。

伝播の欠如が原因となって、互換性のないインデックス接続を Simulink が検出できない場合があります。これらの 2 つの例は次のようになります。

  • 参照モデルのルート レベルの入力端子が、異なるインデックス設定 (0 または 1 から始まる) をもつモデル内の複数のインデックス入力に接続されている場合、Simulink は、ルート レベルの Inport に 0 ベースのインデックス プロパティも 1 ベースのインデックス プロパティも設定しません。

  • 参照モデルのルート レベルの出力端子が、異なるインデックス設定 (0 または 1 から始まる) をもつモデル内の複数のインデックス出力に接続されている場合、Simulink は、ルート レベルの Outport ブロックに 0 ベースのインデックス プロパティも 1 ベースのインデックス プロパティも設定しません。

非同期レート

次の 2 つの条件が両方成立するモデルについては、参照モデルは非同期レートのみを使用できます。

  • ルートレベルの Inport ブロックを通して外部ソースが非同期レートを主導している。

  • ルートレベルの Inport ブロックが関数呼び出し信号を出力している。Asynchronous Task Specification (Simulink Coder) を参照してください。

ユーザー定義のデータ型の入力と出力

参照モデルはユーザー定義のデータ型を使用する場合、入力にも出力にも、固定小数点数、Simulink.DataType オブジェクトまたは Simulink.Bus オブジェクトが定義したデータ型しか使用できません。

バス

参照モデルの入力または出力としてバーチャル バスを使用する場合、バスに可変サイズの信号要素を含めることはできません。モデル インターフェイスでのバスの使用を参照してください。

信号オブジェクト

Model ブロックに接続する信号は、ブロックの外でも中でも機能的には同じ信号です。このため、信号には制限があり、特定の信号は最大 1 つの Signal オブジェクトに関連付けられます。詳細については、Simulink.Signal を参照してください。

シミュレーションの要件と制限

シミュレーションのプロパティ要件と制限
連続サンプル時間の伝播

連続サンプル時間は、サンプル時間に依存しない Model ブロックに伝播できません。

サンプル時間とソルバー

最上位モデルのソルバーは、モデルの階層構造内のすべての連続サンプル時間を制御します。たとえば、固定ステップ ソルバーの場合は、参照モデル内のすべての連続レートが最上位モデルの固定ステップ サイズで実行されます。サンプル時間がソルバーに与える影響の詳細については、サンプル時間のタイプを参照してください。

状態の初期化

状態を含む他のモデルを参照するモデルの状態を初期化するには、初期状態を構造体形式または時間付き構造体形式で指定します。

パラメーターの調整可能性

他のモデルを参照するモデルのシミュレーションでは、一部の状況でブロック パラメーター (Gain ブロックの [ゲイン] パラメーターなど) を調整できないことがあります。詳細については、その他のモデル化の目的に関する調整可能性の考慮事項と制限を参照してください。

コード生成の要件と制限

コード生成の要件と制限を事前に把握すると、コード生成用にモデルの階層構造を正しく設定する準備を適切に行うことができます。モデルの階層構造のコード生成のためのコンフィギュレーション パラメーターの設定 (Simulink Coder)およびモデル参照のコード生成の制限 (Simulink Coder)を参照してください。

関連するトピック