Main Content

モデル参照インターフェイスの定義

Model ブロック上の端子は参照モデルの最上位レベル、つまりルート レベルのブロックに対応します。端子は、入力端子、出力端子、または制御端子にすることができます。

たとえば、sldemo_mdlref_basic モデルでは、各 Model ブロックは sldemo_mdlref_counter モデルを参照し、以下を含んでいます。

  • upperinput、および lower という名前の 3 つの入力端子

  • output という名前の 1 つの出力端子

Each Model block receives three input signals and returns one output signal.

sldemo_mdlref_counter 参照モデルには以下が含まれています。

  • upperlower、および input という名前の 3 つの Inport ブロック

  • output という名前の 1 つの Outport ブロック

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

Model ブロックの端子に信号を接続する際には、参照モデルの対応する端子に信号を接続します。Model ブロックの出力は、参照モデルが同じであるのにもかかわらず、異なることがあります。

たとえば、sldemo_mdlref_basic では、各 Model ブロックの [input] 端子は固有の Pulse Generator ブロックから信号を受け取ります。各 Pulse Generator ブロックからの入力信号は異なるサンプル時間を使用するため、参照モデルが同じであるのにもかかわらず、各 Model ブロックからの出力信号は異なります。

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

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

モデル参照インターフェイスへの端子の追加

モデル参照インターフェイスでは複数の端子のタイプおよび端子ブロックがサポートされています。

次の表では、モデル参照インターフェイスでサポートされている端子のタイプおよび対応する端子ブロックについて説明します。

端子のタイプ対応する端子ブロック
信号端子、入力Inport ブロック
信号端子、出力Outport ブロック
バス要素端子、入力In Bus Element ブロック
バス要素端子、出力Out Bus Element ブロック
制御端子、有効Enable ブロック
制御端子、トリガーTrigger ブロック
制御端子、関数呼び出し[トリガー タイプ][関数呼び出し] に設定された Trigger ブロック
関数端子、クライアントFunction Element Call ブロック
関数端子、サーバーFunction Element ブロック

端子をモデル参照インターフェイスに追加するには、以下のアクションのいずれかを実行します。

  • 参照モデルの最上位レベルで、端子に対応するブロックを追加します。

  • 親モデルで、モデルを参照する Model ブロックに端子を追加します。

メモ

モデル内の最大端子番号がモデル内の端子数を超えている場合、端子をモデル参照インターフェイスに追加できません。たとえば、モデル内に 5 つの端子ブロックがあり、そのいずれかの端子番号パラメーターを 10 に変更すると、端子をモデル参照インターフェイスに追加できなくなります。

参照モデルを開くには、モデル ファイルを開くか、Model ブロックをダブルクリックします。次に、端子ブロックを参照モデルに追加します。

端子を Model ブロックに追加するには、ブロックの 4 つのエッジのいずれかの上にマウスをポイントします。ポインターが十字形になったらクリックします。クリックしたエッジに、青で強調表示された新しい端子が表示されます。

新しい端子の上にマウスをポイントします。展開されたアクション メニューで、作成する端子のタイプを選択します。たとえば、信号およびバス要素端子を作成できます。

An input port is added to a Model block and then deleted.

また、Model ブロックのエッジに接続する対象のモデル要素から信号線をドラッグして、端子を Model ブロックに追加することもできます。

An input port is added to a Model block by dragging a signal line from a Constant block to the edge of the Model block.

端子ブロックからドラッグすると、同じタイプの新しい端子が作成されます。端子ブロックを表す Subsystem または Model ブロック端子からドラッグした場合も、端子ブロックと同じタイプの新しい端子が作成されます。

Model ブロックの入力信号は、参照モデルの対応する入力ブロックに対して有効でなければなりません。Model ブロックの出力信号は、対応する出力ブロックに接続される信号です。

既存の端子を削除するには、端子を選択して Delete キーを押します。複数の端子を削除するには、Shift キーを押したまま端子を選択してから、Delete キーを押します。

制御端子をもつ参照モデルの詳細については、参照モデルの条件付き実行を参照してください。

ヒント

同じ方法を使用して、モデルにリンクされている Reference Component (System Composer) ブロックおよび Component (AUTOSAR Blockset) ブロックの端子を追加および削除できます。

Model ブロックの更新

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

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

  • 親モデルを開く

  • Model ブロックを選択する

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

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

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

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

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

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

モデルでこれらのコンフィギュレーション パラメーターが [警告] または [なし] に設定されている場合は、モデルの階層構造内にあるすべての Model ブロックを手動で更新できます。そのためには次のいずれかの操作を実行します。

  • [Model ブロック] タブで [モデルの更新] ボタンの矢印をクリックします。次に、[ブロックの更新] を選択します。

  • 関数 Simulink.BlockDiagram.refreshBlocks を使用します。

信号属性の定義

参照モデルの信号属性は、Model ブロックのコンテキストから独立しています。たとえば、信号次元とデータ型は Model ブロック境界で伝播されません。

参照モデルへの入力の属性を定義するには、ルートレベルの Inport ブロックおよび In Bus Element ブロックのパラメーターを使用します。In Bus Element ブロックでは、Simulink.Bus オブジェクトなしで、入力バスの階層および属性を完全に指定できます。

In Bus Element ブロックと Out Bus Element ブロックはマルチレート バーチャル バスをサポートしますが、Inport ブロックや Outport ブロックとは異なり、モデル インターフェイスの Simulink.Bus オブジェクトは必要ありません。

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

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

モデル インターフェイスでのバスの使用

Model ブロックのバス入力は、参照モデルで想定されるバスと一致しなければなりません。

参照モデルへの入力または参照モデルからの出力としてバスを使用する場合、以下の制限があります。

  • 可変サイズの信号要素を含めることができるのは、非バーチャル バスのみ。

  • コード生成では、非バーチャル バスを使用しているとき、または C++ クラス インターフェイスに [既定] スタイルを使用しているときにのみ、参照モデルの C++ クラス インターフェイスの [I/O 引数 step メソッド] スタイルを設定できる。

  • コード生成で、参照モデルに関数プロトタイプの制御を構成できるのは、非バーチャル バスを使用しているときのみ。

バスのインターフェイスを簡潔にするには、以下を使用します。

  • Bus Selector ブロックに接続された Inport ブロックではなく、In Bus Element ブロック

  • Outport ブロックに接続された Bus Creator ブロックではなく、Out Bus Element ブロック

詳細については、バス要素端子を使用したサブシステム インターフェイスとモデル インターフェイスの簡略化を参照してください。

バスを Inport ブロックと共に使用するモデルの階層構造の例については、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 オブジェクトとして使用します。参照モデルの外部からのデータは、親モデルまたは他の参照モデル内にある可能性があります。

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

参考

| | | |

関連するトピック