Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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

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

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

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

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

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

ヒント

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

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

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

3 つのブロックを含むモデル例を開きます。

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

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

バスの要素を特定しやすくするために、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 ブロックの出力は、入れ子にされたバスを含むバーチャル バスです。

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

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

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

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

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

3 つのソース ブロックを含むモデル例を開きます。

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

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

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

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

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

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

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

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

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

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

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

入力端子での複数の要素の指定

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

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

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

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

メモ

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

この例では、Simulink.Bus オブジェクトを使用せずにインターフェイスの入力バス要素端子を定義する方法を示します。

NestedBus という名前の入れ子にされたバスと Step という名前の信号を含む入力バスがモデル コンポーネントで必要であるとします。入れ子にされたバスには ChirpSine という名前の信号が含まれます。

空のモデルまたはサブシステムに、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 をクリックします。

Bus hierarchy with InBus selected and pointer over Add element button

新しいブロックのラベルで、signal1 をダブルクリックします。次に、「NestedBus.Chirp」と入力します。

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

ドットは階層の別のレベルを指定し、Chirp という名前の要素を NestedBus という名前の入れ子にされたバスに入れます。

Bus hierarchy with Chirp under NestedBus under InBus

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

Bus hierarchy with NestedBus selected and pointer over Add element without block button

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

Bus hierarchy with Sine in edit mode

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

ヒント

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

作成後に要素を並べ替えるには、要素を新しい位置にドラッグします。たとえば、NestedBusStep の上にドラッグします。

Reordered bus hierarchy

オプションとして、要素のプロパティを指定するには、要素名の上にマウスをポイントします。次に、表示される鉛筆ボタン をクリックします。

Bus hierarchy that has elements with nondefault properties

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

プロパティを編集するか追加のプロパティを指定するには、要素名の横にあるプロパティをクリックします。

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

Pointer paused on Add blocks for selected signals button

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

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

バスの要素へのアクセス

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

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

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

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

参考

| | |

関連するトピック