メインコンテンツ

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

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

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

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

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

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

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

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

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

ヒント

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

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

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

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

新しいモデルを開き、ソース ブロックを 3 つ追加します。たとえば、Chirp Signal ブロック、Sine Wave ブロック、Step ブロックを追加します。

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 Wave ブロックと Chirp Signal ブロックは入力バスの要素を提供するものであるため、これらのブロックを選択に含めても結果には影響しません。

Pointer paused on Create Bus button in action bar

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

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

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

新しい Bus Creator ブロックへの入力にラベルを付けます。

  • Bus Creator ブロック間のラインをダブルクリックします。次に、「Sinusoidal」と入力します。

  • Step ブロックと Bus Creator ブロックの間のラインをダブルクリックします。次に、「Step」と入力します。

オプションで、ブロックを配置してモデルの可読性を改善します。

2 番目の Bus Creator ブロックの出力を Scope ブロックに接続し、出力に Sources というラベルを付けます。

バスをライン スタイルで視覚的に識別するには、Simulink ツールストリップの [モデル化] タブで [モデルの更新] または [実行] をクリックします。

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

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

サブシステムまたはモデルの出力をバスにグループ化するには、Out Bus Element ブロックを使用します。Out Bus Element ブロックは、入力として信号、メッセージ、およびバスを受け入れます。

たとえば、3 つの信号を 1 つの出力端子に接続する単純なモデルを作成します。

  1. 新しいモデルを開き、Chirp Signal ブロック、Sine Wave ブロック、および Step ブロックを追加します。

    Model with three source blocks

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

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

  3. Out Bus Element ブロックのコピーを 2 つ作成するために、Ctrl キーを押しながら Out Bus Element ブロックをドラッグするのを 2 回行います。追加の出力信号に同じ端子を使用するには、ブロックをコピーするたびに [新規要素] を選択します。

    Menu with pointer on New Element

  4. 次に、Sine Wave ブロックと Step ブロックを Out Bus Element ブロックに接続します。

    Each source block connected to a default Out Bus Element block

  5. 端子の要素の特定を容易にするには、要素の名前を変更します。各 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 a cursor after Step

Out Bus Element ブロックは、モデルの出力端子でバーチャル バスを作成します。

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

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

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

Bus output from a Model block that references the example model

必要に応じて、Out Bus Element ブロックを追加して、または追加せずに、バス階層に要素をさらに追加します。詳細については、余分なブロックやバス オブジェクトがない出力バスの定義を参照してください。

1 つの端子での複数の入力信号の指定

モデルまたはサブシステム ファイルで入力バスが予期されている場合、1 つ以上の In Bus Element ブロックを使用して端子を定義します。

NestedBus という名前の入れ子にされたバスと Step という名前の信号を含むバスが入力端子に必要であるとします。入れ子にされたバスには ChirpSine という名前の信号が含まれます。入れ子にされたバスやその要素ではなく、Step という名前の信号のみを使用することを想定しています。

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

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

  2. ブロックで表す要素の名前を変更するために、ブロック ラベルで 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 ブロックや Simulink.Bus オブジェクトを使用せずにバス階層の残りを定義するには、ブロックを追加せずに要素を追加します。

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

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

    Pointer paused on Add element without block option

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

    InBus with new element named signal1

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

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

    Bus hierarchy with NestedBus in edit mode

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

    NestedBus selected and pointer paused on Add element without block option

    R2026a より前: 複数の要素をバスに追加するには、各要素を追加する前に親を選択します。選択が親にとどまらず、新しい要素に変わります。

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

    Bus hierarchy with Chirp and Sine under NestedBus

ヒント

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

バス要素端子のブロックの追加

バス要素端子のブロックを追加するとします。

入力要素のブロックを追加するには、要素名をクリックするか、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 ブロックを使用します。

参考

| | |

トピック