モデル参照インターフェイスの定義
Model ブロック上の端子は参照モデルの最上位レベル、つまりルート レベルのブロックに対応します。端子は、入力端子、出力端子、または制御端子にすることができます。
たとえば、sldemo_mdlref_basic
モデルでは、各 Model ブロックは sldemo_mdlref_counter
モデルを参照し、以下を含んでいます。
upper、input、および lower という名前の 3 つの入力端子
output という名前の 1 つの出力端子
sldemo_mdlref_counter
参照モデルには以下が含まれています。
upper
、lower
、およびinput
という名前の 3 つの Inport ブロックoutput
という名前の 1 つの Outport ブロック
Model ブロックの端子に信号を接続する際には、参照モデルの対応する端子に信号を接続します。Model ブロックの出力は、参照モデルが同じであるのにもかかわらず、異なることがあります。
たとえば、sldemo_mdlref_basic
では、各 Model ブロックの [input] 端子は固有の Pulse Generator ブロックから信号を受け取ります。各 Pulse Generator ブロックからの入力信号は異なるサンプル時間を使用するため、参照モデルが同じであるのにもかかわらず、各 Model ブロックからの出力信号は異なります。
各 Model ブロックの出力信号がどのように異なるかを確認するには、シミュレーション データ インスペクターを使用します。
モデル参照インターフェイスへの端子の追加
モデル参照インターフェイスでは複数の端子のタイプおよび端子ブロックがサポートされています。
次の表では、モデル参照インターフェイスでサポートされている端子のタイプおよび対応する端子ブロックについて説明します。
端子のタイプ | 対応する端子ブロック |
---|---|
信号端子、入力 | Inport ブロック |
信号端子、出力 | Outport ブロック |
バス要素端子、入力 | In Bus Element ブロック |
バス要素端子、出力 | Out Bus Element ブロック |
制御端子、有効 | Enable ブロック |
制御端子、トリガー | Trigger ブロック |
制御端子、関数呼び出し | [トリガー タイプ] が [関数呼び出し] に設定された Trigger ブロック |
関数端子、クライアント | Function Element Call ブロック |
関数端子、サーバー | Function Element ブロック |
端子をモデル参照インターフェイスに追加するには、以下のアクションのいずれかを実行します。
参照モデルの最上位レベルで、端子に対応するブロックを追加します。
親モデルで、モデルを参照する Model ブロックに端子を追加します。
メモ
モデル内の最大端子番号がモデル内の端子数を超えている場合、端子をモデル参照インターフェイスに追加できません。たとえば、モデル内に 5 つの端子ブロックがあり、そのいずれかの端子番号パラメーターを 10
に変更すると、端子をモデル参照インターフェイスに追加できなくなります。
参照モデルを開くには、モデル ファイルを開くか、Model ブロックをダブルクリックします。次に、端子ブロックを参照モデルに追加します。
端子を Model ブロックに追加するには、ブロックの 4 つのエッジのいずれかの上にマウスをポイントします。ポインターが十字形になったらクリックします。クリックしたエッジに、青で強調表示された新しい端子が表示されます。
新しい端子の上にマウスをポイントします。展開されたアクション メニューで、作成する端子のタイプを選択します。たとえば、信号およびバス要素端子を作成できます。
また、Model ブロックのエッジに接続する対象のモデル要素から信号線をドラッグして、端子を Model ブロックに追加することもできます。
端子ブロックからドラッグすると、同じタイプの新しい端子が作成されます。端子ブロックを表す 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 ブロックを使用して入力および出力のサンプル時間を一致させます。
参照モデル インスタンス間でのデータの共有
既定では、各 Model ブロック インスタンスによる読み書きの処理は、モデル内の独立した信号およびブロック状態のコピーに対して行われます。したがって、信号や状態の共有データを通じてインスタンス間で相互にやり取りすることはありません。
すべてのインスタンス (アキュムレータや故障表示器など) でデータを共有するには、データをデータ ストアとしてモデル化します。
参照モデル内のブロックのみが読み書きを行えるようにデータへのアクセスを制限するには、モデルで Data Store Memory ブロックを使用して、[モデル インスタンス間で共有する] パラメーターを選択します。例については、再利用可能なアルゴリズムの複数のインスタンス間でのデータの共有を参照してください。
参照モデルの外部からのデータへのアクセスを許可するには、グローバル データ ストアをベース ワークスペースまたはデータ ディクショナリで
Simulink.Signal
オブジェクトとして使用します。参照モデルの外部からのデータは、親モデルまたは他の参照モデル内にある可能性があります。
データ ストアの詳細については、データ ストアの作成によるグローバル データのモデル化を参照してください。
参考
Model | Inport | Outport | In Bus Element | Out Bus Element