Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

バス内のバリアント要素

バリアント条件をもつバスの作成

この例では、異なるバリアント条件をもつ要素のあるバス信号の作成の方法を示します。このモデルには、マージされてバス信号を作成するための 2 つの信号 (‘a’ および ‘b’) があります。これらの 2 つの信号は、V==1 および W == 1 という異なるバリアント条件をもっています。

Bus Selector に 2 つの異なるバリアント条件 (V==1 および W==1) をもつ 2 つの信号を入力します。Bus Selector にバス信号が入力され、バスから個別の信号を選択すると、バリアント条件も選択されます。

メモ

バリアント バスは、入力端子および出力端子として複合端子を使用することをサポートします。

完成したモデルを見るには、slexVariantBus モデルを開きます。

バスを使用したバリアント条件の伝播

Variant Source ブロックは、バーチャル バス入力と非バーチャル バス入力のどちらも受け入れることができます。

このモデルについて考えます。

バスはバリアント条件 V = 1 および W = 1 で作成されています。条件 V および W がバスを経由して伝播されると、個別の要素がバスから選択されるとき、条件も選択されます。

コード生成

モデルのコードを生成できます。そのためには、ツールストリップの [アプリ] タブで、[Embedded Coder] をクリックし、[C コード] タブで、[ビルド] をクリックします。コードを生成するためのモデルの構成の詳細は、コード生成用のバリアントが含まれるモデルの準備 を参照してください。

プリプロセッサ条件を含むコードを生成する場合、すべてのバス入力のバスの種類と階層は同じでなければなりません。

バーチャルおよび非バーチャル バスの動作

バーチャル バスは、ブロック線図での信号の煩雑さを軽減するために、バスの最もシンプルな使用方法を提供します。非バーチャル バスは、明示的に指定されたインターフェイスを必要とするモデリング コンポーネント (S-Function や MATLAB Function ブロックなど) をサポートします。バリアント条件がバーチャル バスまたは非バーチャル バスを経由して伝播されるとき、バリアント条件の伝播の動作に変わりはありません。

バーチャル バス用のコード生成は、以下に示すとおりです。

/* Block states (default storage) for system '<Root>' */
typedef struct {

#if V == 1

real_T UnitDelay_1_DSTATE;           /* '<Root>/Unit Delay' */

#define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS
#endif                                 /* V == 1 */
#if W == 1

int32_T UnitDelay_2_DSTATE;          /* '<Root>/Unit Delay' */
	
#define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS
#endif                                 /* W == 1 */
	
#ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS
	
char _rt_unused;

#endif	
} D_Work_ex_bus_var_cond;

非バーチャル バス用のコード生成は、以下に示すとおりです。

/* Block states (default storage) for system '<Root>' */
typedef struct {
	
#if V == 1 || W == 1

myBus UnitDelay_DSTATE;              /* '<Root>/Unit Delay' */

#define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS
#endif                                 /* V == 1 || W == 1 */

#ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS

char _rt_unused;

#endif
	
} D_Work_ex_bus_var_cond;
	

バスには関連付けられているバス オブジェクトがなければなりません。このバスは、Simulink® がバス信号の検証に使用するプロパティを提供します。バス オブジェクトに関する詳細は、Simulink.Bus オブジェクト データ型でのバス プロパティの指定を参照してください。バスで使用されているバス オブジェクトは無条件であり、次に示すように、保護されていないコードを生成します。

typedef struct {
real_T a;
int32_T b;
} myBus;

Model ブロックを含むバリアント バス

Model ブロックを含むこのモデルについて検討します。

このモデルには異なるバリアント条件 V==1 および V==2 をもつ 2 つの信号 (‘a’、‘b’) があります。

Model ブロックから、Bus Selector に、異なる 2 つのバリアント条件 (V==1 および V==2) をもつ 2 つの信号が入力されます。バスから個別の信号を選択すると、バリアント条件も選択されます。

既知の制限事項

  • ルートのバス要素端子はバリアント要素ではサポートされません。

  • バス オブジェクトはバリアント要素をサポートしません。

  • 状態ログは、一部の要素が削除されているバスを取り込むブロックではサポートされません (たとえば Unit Delay)。

関連するトピック