ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

バス入門

信号は 1 つのバス信号にまとめることができます。バス全体にアクセスすることもバスから特定の信号を選択することもできます。これらの例は、モデルおよび生成コードでのバスの作成と使用の基本を示しています。詳細については、バスを参照してください。

説明

バーチャル バスの作成と使用

バーチャル バスは、ブロック線図での信号の煩雑さを軽減するために、バスの最もシンプルな使用方法を提供します。
非バーチャル バスの作成と使用非バーチャル バスは、明示的に指定されたインターフェイスを必要とするモデリング コンポーネント (S-Function や MATLAB Function ブロックなど) をサポートします。
バスのコードの生成バーチャル バスと非バーチャル バスで生成されるコードは異なります。非バーチャル バスのコード生成では構造体が生成されます。構造体は、モデルとその生成コード間の対応関係を追跡するのに役立ちます。
slexBusExampleバス信号のスマート編集機能のアニメーションなど、バス関連ブロックの使用を紹介するシンプルな例です。

ヒント

サブシステムに接続する多くのバス要素で構成されるバス信号を含むモデルについては、In Bus Element ブロックと Out Bus Element ブロックを使用することを検討してください。入力用の Bus Selector ブロックをもつ Inport と出力用の Bus Creator ブロックをもつ Outport を使用する代わりに、これらのバス要素端子ブロックを使用できます。これらのバス要素端子ブロックにより、次が可能です。

  • ブロック線図における信号線の複雑さと煩雑さを低減する。

  • インターフェイスの段階的な変更を容易にする。

  • 使用ポイントに近いバス要素へのアクセスを許可して、Bus Selector および Goto ブロック構成の使用を回避する。

詳細については、サブシステム バス インターフェイスの簡略化を参照してください。

これらの例はシンプルで、バスの作成と使用に関する基本ステップに焦点を当てています。バスは、多くの信号を結合して見た目の複雑さを軽減させる場合に最も役立ちます。これらの例では、ブロックと信号にラベルを付ける手順も含め、信号とバス間およびブロック間の関係を明確にします。モデル例を手順ごとにビルドする場合は、必要に応じてこれらの手順を省略できます。

バーチャル バスの作成と使用

この例では、信号をバーチャル バスに結合する方法を示します。このモデルはバーチャル バスから個々の信号 (バス要素) を選択し、バス要素を個々の信号として使用します。

ヒント

バス要素を選択してそれらをバスに再構築する Bus Selector ブロックと Bus Creator ブロックを追加せずに、バス要素の値を変更するには、Bus Assignment ブロックを使用します。詳細については、バスへの信号値の代入を参照してください。

完成したモデルを見るには、ex_bus_tutorial_virtual モデルを開きます。モデルのシミュレーションを実行すると、バス信号線はバスがバーチャルであることを示します。

以下の手順を実行して、バーチャル バスの作成と使用を行います。

  1. Simulink® スタート ページから、空のモデル テンプレートを選択します。

  2. Simulink エディターに、Chirp Signal ブロックおよび Sine Wave ブロックを追加します。

  3. 2 つのブロックから信号のバスを選択します。2 つのブロックをドラッグして選択し、表示された操作バーで、[バスの作成] をクリックします。

    Simulink は Bus Creator ブロックを追加し、入力信号をそのブロックに接続します。

  4. 既定では、Bus Creator ブロック名は表示されません。ブロック名を追加するには、ブロックを選択し、表示された操作バーから [ブロック名を表示] を選択します。次に、名前を編集して Bus Creator から SubBus に変更します。

  5. バスの信号にラベルを付ける必要はありません。ただし、ラベルを付けると、バス要素信号とバス信号の関係を簡単に把握できます。Chirp Signal ブロックの出力信号にラベルを付けます。信号を右クリックし、[プロパティ] を選択します。[信号名] プロパティで、chirp を入力します。同様に、Sine Wave 信号名を sine に設定します。

    メモ

    Bus Creator ブロックへの入力には一意の名前がなければなりません。重複した名前が存在する場合、Bus Creator ブロックは (signal#) をすべての入力信号名に追加します。ここで、# は入力端子インデックスです。

    信号名の先頭の文字に小なり記号 (<) は使用しないでください。

  6. Step ブロックを Sine Wave ブロックの下に追加します。

  7. 入れ子にされたバスを作成するには、Bus Creator ブロックを現在のブロックの右側に追加します。SubBus ブロックからの信号と Step ブロックからの信号を 2 番目の Bus Creator ブロックに接続します。

  8. SubBus ブロックからの出力信号に subBusStep ブロックからの信号に step とラベルを付けます。

  9. 入れ子にされたバスを作成する Bus Creator ブロックのブロック名を表示します。名前を NestedBus に変更します。

  10. Scope ブロックを nestedBus 信号に付加します。

  11. NestedBus ブロックの右側に、Subsystem ブロックを追加し、NestedBus 出力信号をサブシステムに接続します。

  12. Subsystem ブロック出力端子を Scope ブロックに接続します。

  13. サブシステムで、Inport ブロックと Outport ブロックを切断し、Bus Selector ブロックを Inport ブロックの右側に挿入します。Inport ブロックを Bus Selector ブロックに接続します。

  14. Bus Selector ブロック名を表示します。名前を BusSelector に変更します。

  15. Bus Selector ブロックの右側に、Saturation ブロックを追加し、その [下限] パラメーターを -inf に設定します。

  16. chirp 信号と Saturation ブロック出力信号をバスに結合します。

  17. バス信号と step 信号を入れ子にされたバスに結合します。

  18. 入れ子にされたバスを Outport ブロックに接続します。

  19. シミュレーション結果を参照するには、モデルをシミュレーションし、Scope ブロックを開きます。

非バーチャル バスの作成と使用

この例では、ex_bus_tutorial_virtual モデルで使用したバーチャル バスを非バーチャル バスに変更します。完成したモデルを見るには、ex_bus_tutorial_nonvirtual モデルを開きます。特定のモデリング状況で非バーチャル バスが必要になります。非バーチャル バスのコードの生成は、バスを構造体として表します。非バーチャル バスを使用する状況の詳細については、非バーチャル バスの使用ガイドラインを参照してください。

モデルのシミュレーションを実行すると、バス信号線はバーチャル バスが非バーチャル バスに変換されたことを示します。

以下の手順を実行して、非バーチャル バスの作成と使用を行います。

  1. ex_bus_tutorial_virtual モデルを開きます。

  2. バス信号では、それがバーチャルか非バーチャルは指定されず、元のブロックからその仕様が継承されます。非バーチャル バスを作成または要求するブロックには、バス オブジェクトが関連付けられていなければなりません。

    SubBus ブロックに対して、非バーチャル バス出力を生成することを指定します。[ブロック パラメーター] ダイアログ ボックスで、[出力データ型]Bus: subBus に設定します。この設定では subBus バス オブジェクトを使用します。このオブジェクトは、Simulink がバス信号の検証に使用するバス プロパティを提供します。

    [非バーチャル バスとして出力] パラメーターも選択します。

    メモ

    バス オブジェクトを使用して非バーチャル バスを作成する場合は、モデルのシミュレーションを実行する前に、バス オブジェクトがベース ワークスペース内になければなりません。バス オブジェクトを定義するか、既に定義されたバス オブジェクトを使用する必要があります。この例を簡略化するために、モデルを開くと、モデルのコールバックで必要なバス オブジェクトがベース ワークスペースに読み込まれます。コールバックを確認するには、[ファイル][モデル プロパティ][モデル プロパティ] を開き、[コールバック] タブを開きます。

    バス オブジェクトの作成の詳細については、バス オブジェクトの作成を参照してください。

  3. NestedBus ブロックで、[出力データ型]Bus: topBus に設定し、[非バーチャル バスとして出力] パラメーターを選択します。

  4. subBus バス オブジェクトでは、バスの 2 つ目の入力信号が sine という名前であることが必要です。Bus Selector ブロックでバスから sine 信号を選択した場合でも、Saturation ブロックの出力信号の既定の名前は sine になりません。[信号プロパティ] ダイアログ ボックスを使用して、Saturation ブロック出力信号の名前を sine にします。

  5. topBus バス オブジェクトでは、バスの最初の入力信号が subSignal という名前であることが必要です。[信号プロパティ] ダイアログ ボックスを使用して、bus 信号に subSignal の名前を付けます。

  6. シミュレーション結果を参照するには、モデルをシミュレーションし、Scope ブロックを開きます。この結果は、このモデルのベースとして使用した ex_bus_tutorial_virtual モデルのシミュレーションを実行したときと同じになります。

バスのコードの生成

バーチャル バス (ex_bus_tutorial_virtual) を使用するモデルと非バーチャル バス ex_bus_tutorial_nonvirtual を使用するモデルのシミュレーション結果はどちらも同じです。ただし、生成されるコードは異なります。

各モデルの Subsystem ブロックの後に Unit Delay ブロックと Outport ブロックを追加すると、生成されたコードの違いを強調表示するのに役立ちます。

バーチャル バス モデルの生成コード

ex_bus_tutorial_virtual_code_gen モデルからコードを生成します。

バーチャル バスは生成されたコードに影響しません。たとえば、生成されたファイル ex_bus_tutorial_virtual_code_gen.c では、モデルの関数 step のアルゴリズムは 3 つの Unit Delay ブロック (ブロックを通過する chirp などの意味のある信号ごとに 1 つ) を効果的に実装します。

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_chirp = ex_bus_tutorial_virtual_code_DW.UnitDelay_1_DSTATE;

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_signal2 = ex_bus_tutorial_virtual_code_DW.UnitDelay_2_DSTATE;

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_step = ex_bus_tutorial_virtual_code_DW.UnitDelay_3_DSTATE;

非バーチャル バス モデルの生成コード

非バーチャル バス モデルでは、[出力データ型]Bus: topBus に設定されて、Scope ブロックはコメント アウトされます。Scope ブロックは、生成されたコードには不要で、コード生成をサポートしていないからです。

ex_bus_tutorial_nonvirtual_code_gen モデルからコードを生成します。

非バーチャル バスは構造体として生成コードに表示されます。各 Simulink.Bus オブジェクトは構造体型として表示されます。型定義は ex_bus_tutorial_nonvirtual_code_gen_types.h に表示されます。

typedef struct {
  real_T chirp;
  real_T sine;
} subBus;

typedef struct {
  subBus subSignal;
  real_T step;
} topBus;

モデルの関数 step のアルゴリズムでは、Unit Delay ブロックを 1 行のコードとして実装できます。このブロックの状態と出力は topBus 型の構造体です。

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_UnitDelay = ex_bus_tutorial_nonvirtual_c_DW.UnitDelay_DSTATE;

参考

ブロック

関数

クラス

関連するトピック