Main Content

モデル参照のインターフェイスと境界

Model ブロックには、その参照先モデルのルートレベルの入力端子、出力端子、および制御端子に対応する入力端子、出力端子、および制御端子があります。参照モデルには InportOutportIn Bus ElementOut Bus ElementTriggerEnable ブロックが含まれ、親モデルから入力を取得し、親モデルに出力を提供できます。Model ブロックの入力信号は、参照モデルの対応する入力ブロックに対して有効でなければなりません。Model ブロックの出力信号は、参照モデルのルートレベルの出力ブロック信号です。

sldemo_mdlref_basic では、各 Model ブロックに 3 つの入力 (2 つの Constant ブロックと 1 つの Pulse Generator ブロック) があります。各 Model ブロックには、スコープに記録された 1 つの出力信号があります。各 Pulse Generator ブロックからの入力信号は異なるサンプル時間を使用するため、各 Model ブロックからの出力信号はモデル インスタンスごとに異なります。

Each Model block has input ports named upper, input, and lower and one output port named output.

親モデルに接続するために、参照モデル sldemo_mdlref_counter に 3 つの Inport ブロック (upperlower、および input) と 1 つの Outport ブロック (output) があります。

Blocks that represent model input and output are part of the block diagram for the model.

Model ブロックの出力信号がどのように異なるかを確認するには、シミュレーション データ インスペクターを使用します。

Simulation Data Inspector plot of the output signal for each model instance

Model ブロックの更新

Model ブロックを更新すると、参照モデルのインターフェイスの変更を反映して、その内部表現が更新されます。たとえば、参照モデルが端子を得たとき、または失ったときに、Model ブロックを更新するとその端子が更新されます。

参照モデルが読み込まれると、それを参照する Model ブロックが自動的に更新されます。参照モデルが読み込まれない場合、対応する Model ブロックは次のようなアクションの実行時に更新されます。

  • 親モデルを開く

  • Model ブロックを選択する

  • モデルの階層構造をシミュレーションする

  • モデルの階層構造向けのコードを生成する

Model ブロックを選択するときに、[Model ブロック] タブの [更新] ボタンの矢印をクリックしてから、[ブロックの更新] をクリックすることで、モデルの階層構造内にあるすべての Model ブロックを更新できます。

Simulink® が参照モデルと一致しない可能性がある Model ブロックを検出したときに通知を受け取るには、以下の診断コンフィギュレーション パラメーターの既定の設定を変更します。

モデルでこれらのコンフィギュレーション パラメーターが [エラー] に設定されている場合、そのモデル内の Model ブロックは自動的に更新されません。これらのコンフィギュレーション パラメーターが [エラー] に設定されている場合に Model ブロックを更新するには、以下を行います。

  • Model ブロックを選択します。[Model ブロック] タブで [更新] をクリックします。

  • 関数 Simulink.ModelReference.refresh を使用します。

信号の伝播

参照モデルの信号属性は、Model ブロックのコンテキストから独立しています。たとえば、信号次元とデータ型は Model ブロック境界で伝播されません。参照モデルの信号属性を定義するには、ルートレベルの Inport ブロックと In Bus Element ブロックのブロック パラメーターを定義します。

Outport ブロックに接続されている信号を参照モデルから親モデルに伝播するには、信号名が信号線に明示的に表示されていなければなりません。

インターフェイスのバスでは、入力用の Inport ブロックおよび Bus Selector ブロックと出力用の Outport ブロックおよび Bus Creator ブロックの代わりに、In Bus Element ブロックと Out Bus Element ブロックを使用します。In Bus Element ブロックと Out Bus Element ブロックはマルチレート バーチャル バスをサポートしますが、Inport ブロックと Outport ブロックとは異なり、モデル インターフェイスの Simulink.Bus オブジェクトは必要ありません。そのため、バスのインターフェイスが簡潔になる効果もあります。詳細については、バスを使用したサブシステム インターフェイスとモデル インターフェイスの簡略化を参照してください。

バスを Inport ブロックと共に使用するモデルの階層構造の例については、Bus オブジェクトを使ったインターフェイス指定を参照してください。

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

参照モデルでの信号のログ

参照モデルでは、信号ログ用に設定されたすべての信号を記録することができます。モデルの階層構造の信号ログ用に設定された信号のサブセットまたはすべてを選択するには、信号ログ セレクターを使用します。詳細については、信号ログ設定のオーバーライドを参照してください。

シミュレーション データ インスペクターを使用して、参照モデルで記録された信号を表示して解析することができます。複数のプロット上で信号を表示し、ズームし、データ カーソルを使用してデータを理解および評価できます。また、複数のシミュレーションの信号データを比較することもできます。参照モデルで信号を表示する例については、モデル参照インスタンスの信号の表示を参照してください。

サンプル時間の要件

参照モデルのルート レベルの入力ブロックや出力ブロックに接続されている最初の非バーチャル ブロックは、関連する端子と同じサンプル時間をもたなければなりません。サンプル時間が異なる場合、次のブロック線図に示すように、Rate Transition ブロックを使用して入力と出力のサンプル時間と一致させます。

Simple block diagram with one Rate Transition block after the Inport block and another Rate Transition block before the Outport block

参照モデル インスタンス間でのデータの共有

既定では、各 Model ブロック インスタンスによる読み書きの処理は、モデル内の独立した信号およびブロック状態のコピーに対して行われます。したがって、信号や状態の共有データを通じてインスタンス間で相互にやり取りすることはありません。

すべてのインスタンス (アキュムレータや故障表示器など) でデータを共有するには、データをデータ ストアとしてモデル化します。

  • 参照モデル内のブロックのみが読み書きを行えるようにデータへのアクセスを制限するには、モデルで Data Store Memory ブロックを使用して、[モデル インスタンス間で共有する] パラメーターを選択します。例については、再利用可能なアルゴリズムのインスタンス間でのデータ ストアの共有を参照してください。

  • 参照モデルの外部からのデータへのアクセスを許可するには、グローバル データ ストアをベース ワークスペースまたはデータ ディクショナリで Simulink.Signal オブジェクトとして使用します。参照モデルの外部からのデータは、親モデルまたは他の参照モデル内にある可能性があります。

データ ストアの詳細については、データ ストアの作成によるグローバル データのモデル化を参照してください。

参考

ブロック

関連するトピック