Main Content

バーチャル バスへの信号またはメッセージのグループ化

ブロック線図における線の複雑さと煩雑さを低減し、インターフェイスの段階的変更を容易にするには、バーチャル バスを使用します。"バーチャル バス" は、タイ ラップで結束されるワイヤーのバンドルに似ています。比較のために示すと、"非バーチャル バス" は C コードの構造体に似ています。バス全体にアクセスすることもバスから特定の要素を選択することもできます。

バーチャル バスを作成する際は、線をその機能に基づいてグループ化します。信号またはメッセージを論理グループに整理することで、大幅なリファクタリングが必要になる可能性を低減します。

すべてのブロックでバスが受け入れられるわけではなく、バスをベクトルに暗黙的に変換するブロックもあります。どのブロックがどのバスのタイプをサポートするかについては、バス対応ブロックを参照してください。バス変換を特定するには、自動バス変換の特定を参照してください。

バーチャル バスを作成する方法は、グループ化する信号またはメッセージの位置によって異なります。

  • コンポーネント内にある場合 — Bus Creator ブロックを使用します。

  • コンポーネントの出力インターフェイスにある場合 — Out Bus Element ブロックを使用します。

  • コンポーネントの入力インターフェイスにある場合 — In Bus Element ブロックを使用します。

基本ステップに集中するために、これらの例はシンプルです。ただし、バスは、多くの信号またはメッセージをグループ化する場合に最も役立ちます。

ヒント

モデルを開くか、バスを作成する場合、Simulink® エディターにバス ライン スタイルは表示されません。このライン スタイルを更新するには、モデルをコンパイルします。Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックします。

関数を使用してコンポーネントの入力インターフェイスまたは出力インターフェイスでバスを作成するには、Programmatically Create Bus Element Portsを参照してください。

コンポーネント内の信号線のグループ化

Bus Creator ブロックを使用してコンポーネント内で信号をバーチャル バスにグループ化できます。

3 つのブロックを含む VirtualBusCreation という名前のモデルを開きます。

Model with three source blocks

複数のブロックの出力を含むバスを作成するには、ブロックをクリックおよびドラッグして選択します。この例では、Chirp Signal ブロックと Sine Wave ブロックを選択します。表示された操作バーで、[バスの作成] をクリックします。

Pointer paused on Create Bus button in action bar

Bus Creator ブロックが追加され、そのブロックに入力が接続されます。Bus Creator ブロックの出力は、バーチャル バスです。

First two source blocks connected to a Bus Creator block

バスの要素を特定しやすくするために、Bus Creator ブロックへの入力にラベルを付けます。Chirp Signal ブロックと Bus Creator ブロックの間のラインをダブルクリックします。次に、「Chirp」と入力します。Sine Wave ブロックと Bus Creator ブロックの間のラインをダブルクリックします。次に、「Sine」と入力します。

2 番目のバスを作成して、それに最初のバスと Step ブロックの出力を含めるには、Bus Creator ブロックと Step ブロックをクリックおよびドラッグして選択します。表示された操作バーで、[バスの作成] をクリックします。Sine 信号と Chirp 信号は入力バスの要素であるため、Sine Wave ブロックと Chirp Signal ブロックを選択したかどうかに関係なく、同じバスが作成されます。

別の Bus Creator ブロックが追加され、そのブロックに入力が接続されます。Bus Creator ブロックの出力は、入れ子にされたバスを含むバーチャル バスです。

First Bus Creator block and third source block connected to another Bus Creator block

バスは任意の深さの入れ子にできます。Bus Creator ブロックへの入力の 1 つがバスである場合、その出力は、少なくとも 1 つの入れ子のバスを含むバス階層です。

新しい Bus Creator ブロックへの入力にラベルを付けます。Step ブロックと Bus Creator ブロックの間のラインをダブルクリックします。次に、「Step」と入力します。Bus Creator ブロック間のラインをダブルクリックします。次に、「NestedBus」と入力します。オプションで、ブロックを配置してモデルの可読性を改善します。

2 番目の Bus Creator ブロックの出力を Scope ブロックに接続し、出力 TopBus にラベルを付けます。バスを視覚的に特定するには、Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックしてモデルをコンパイルします。モデルをコンパイルするとライン スタイルが更新されます。

Compiled model with bus line style at output of Bus Creator blocks

複数の出力信号を 1 つの端子に接続

この例では、Out Bus Element ブロックを使用して、サブシステムまたはモデルの出力信号をバーチャル バスにグループ化する方法を示します。

3 つのソース ブロックを含む VirtualBusOutputCreation という名前のモデルを開きます。

Model with three source blocks

Out Bus Element ブロックをモデルに追加します。次に、Chirp Signal ブロックを Out Bus Element ブロックに接続します。

First source block connected to an Out Bus Element block labeled OutBus.signal1

ブロックのコピーを 2 つ作成するために、"Ctrl" キーを押しながら Out Bus Element ブロックをドラッグするのを 2 回行います。このようにブロックをコピーするときに、新しい端子を作成するか既存の端子を使用するかを指定します。すべての信号を含む出力バスを 1 つ作成するには、ブロックをコピーするたびに [新規要素] を選択します。

Menu with pointer on New Element

Sine Wave ブロックおよび Step ブロックを Out Bus Element ブロックに接続します。

Each source block connected to a default Out Bus Element block

各 Out Bus Element ブロックの横にあるラベルには、2 つの部分があります。ラベルの最初の部分は端子について説明し、既定の名前 OutBus が使用されます。ラベルの 2 番目の部分はバス要素について説明し、既定の名前 signal1 が使用されます。

端子の要素の特定を容易にするには、要素の名前を変更します。オプションとして、バス要素を他のバス内に入れ子にすることで階層を作成します。各バス名の後にドットを追加します。以下に例を示します。

  • signal1 をダブルクリックします。次に、「NestedBus.Chirp」と入力します。

  • signal2 をダブルクリックします。次に、「NestedBus.Sine」と入力します。

  • signal3 をダブルクリックします。次に、「Step」と入力します。

Out Bus Element blocks labeled OutBus.NestedBus.Chirp, OutBus.NestedBus.Sine, and OutBus.Step with cursor after Step

端子のバス階層を検査するには、任意の Out Bus Element ブロックをダブルクリックします。ダイアログ ボックスには、NestedBus および Step という名前の要素を含む OutBus という名前の最上位バスが表示されます。NestedBus は、Chirp および Sine という名前の要素を含む、入れ子にされたバスです。

Bus hierarchy with NestedBus and Step under OutBus and Chirp and Sine under NestedBus

この例では信号を各 Out Bus Element ブロックに接続していますが、バスを Out Bus Element ブロックに接続することもできます。

3 つの Out Bus Element ブロックは、モデルの出力端子でバーチャル バスを作成します。バーチャル バスを確認するには、別のモデル内のモデルを参照するか、Out Bus Element ブロックをサブシステムに移動します。モデルをコンパイルするとライン スタイルが更新されます。モデルをコンパイルするために、Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックします。

Bus output from a Model block that references the example model

端子の複数要素の指定

モデル ファイルまたはサブシステム ファイルで端子にバスが必要な場合、In Bus Element ブロックまたは Out Bus Element ブロッで端子を定義します。

インターフェイスでバス要素端子の要素を指定するには、次の方法があります。

  • ブロック線図にブロックを追加して要素をインターフェイスに追加するかブロックを追加せずに要素をインターフェイスに追加する。

  • Simulink.Bus オブジェクトでバス階層を定義する。

メモ

バス要素端子のバスのデータ型として Simulink.Bus オブジェクトを指定するには、バスまたはバスの要素を In Bus Element ブロックまたは Out Bus Element ブロックで表す必要があります。

この例では、1 つのブロックをもつインターフェイスで Simulink.Bus オブジェクトなしで入力バス要素端子を定義する方法を示します。

NestedBus という名前の入れ子にされたバスと Step という名前の信号を含むバスが端子に必要であるとします。入れ子にされたバスには ChirpSine という名前の信号が含まれます。モデルまたはサブシステムで、現在は Step という名前の信号のみを使用しています。

空のモデルまたはサブシステムに、In Bus Element ブロックを追加します。このブロックで入力端子を作成します。

Default In Bus Element block with block label that says InBus.signal1

ブロックで表す要素の名前を変更するために、ブロック ラベルで signal1 をダブルクリックします。次に、signal1Step に置き換えます。

In Bus Element block with block label that says InBus.Step. The part of the label that says Step is in edit mode.

プロパティ インスペクターを開きます。その後、In Bus Element ブロックを選択します。あるいは、ブロックをダブルクリックしてダイアログ ボックスを開きます。

プロパティ インスペクターまたはダイアログ ボックスで、InBus という名前の最上位バスを選択します。その後、Add element ボタンの矢印をクリックし、[ブロックなしの要素の追加] を選択します。

Pointer paused on Add element without block button

前に選択した要素の下に新しい要素が入れ子になります。ブロック線図は変わりません。

InBus with new element named signal1

In Bus Element ブロックで直接表現された要素でないことを示すために、新しい要素の名前がグレーのイタリックで表記されます。

新しい要素の名前をダブルクリックします。次に、「NestedBus」と入力します。

Bus hierarchy with NestedBus in edit mode

入れ子にされたバスに要素を追加するために、NestedBus を選択します。その後、Add element ボタンの矢印をクリックし、[ブロックなしの要素の追加] を選択します。

NestedBus selected and pointer paused on Add element without block button

バス要素をもう 1 つ追加するために、NestedBus を選択します。その後、Add element ボタンの矢印をクリックし、[ブロックなしの要素の追加] を選択します。

NestedBus selected and pointer paused on Add element without block button

バス要素の名前を signalsignal2 から ChirpSine にそれぞれ変更するために、新しい各要素の名前をダブルクリックして新しい名前を入力します。

Bus hierarchy with Chirp and Sine under NestedBus

ブロックを追加せずに要素を追加することで、1 つの In Bus Element ブロックだけを使用し、Simulink.Bus オブジェクトなしで、バス階層全体を定義できます。

ヒント

ブロックを使用せずに多くの要素を追加する場合は、ダイアログ ボックスを使用するより関数 Simulink.Bus.addElementToPort を使用する方が迅速に行えます。例については、Programmatically Create Bus Element Portsを参照してください。

要素のプロパティを指定するには、要素名をポイントします。次に、表示される鉛筆ボタン Specify attributes をクリックします。

Pencil button next to element name

既定以外の属性が要素名の横に表示されます。属性をさらに編集するには、要素名の横にある属性の概要をクリックします。

Bus hierarchy that has elements with nondefault properties

インターフェイスの要素のプロパティを定義すると、再利用のためにファイルを作成する際に役立ちます。参照サブシステムまたはモデルでサポートされる入力は、インターフェイスの定義によって決定されます。入力バスの階層およびプロパティは対応する端子における定義に一致している必要があります。

ブロックなしで要素を追加してから、In Bus Element ブロックでそれらの要素を選択することを決定するとします。入力要素のブロックを追加するには、要素名をクリックするか、Ctrl キーを押したまま複数の要素名をクリックします。次に、Add blocks for selected elements をクリックします。たとえば、ChirpSine のブロックを追加します。

Pointer paused on Add blocks for selected signals button

対応する In Bus Element ブロックがブロック線図に表示されます。

In Bus Element blocks labeled InBus.NestedBus.Chirp and InBus.NestedBus.Sine

ブロック ラベルの各ドットは新しいレベルの階層を示します。

出力バス要素端子の場合、要素のブロックを追加する方法が少し異なります。出力バス要素端子のブロックを追加するには、既存の Out Bus Element ブロックで表されていない要素を選択します。その後、Add block for selected element をクリックして Out Bus Element ブロックを追加します。競合を避け、複数の Out Bus Element ブロックで同じ要素を表すことがないように、Out Bus Element ブロックは一度に 1 つしか追加できません。

その他の例と詳細については、In Bus Element および Out Bus Element を参照してください。

バスの要素へのアクセス

バス全体にアクセスすることも、バスから特定の信号、メッセージ、または入れ子にされたバスを選択することもできます。

バスから要素を抽出する方法は、バスの場所によって異なります。

  • コンポーネント内 — Bus Selector ブロックを使用します。

  • コンポーネント インターフェイス内 — In Bus Element ブロックを使用します。

参考

| | |

関連するトピック