ドキュメンテーション

目次

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

バス信号の初期条件の指定

バス信号の初期化

バス信号の初期化は、特殊な信号初期化です。信号の初期化に関する一般的な情報は、「信号と離散状態の初期化」を参照してください。

バス信号の初期化では、そのバス信号を使用するブロックの最初の実行で Simulink® が使用するバス要素の値を指定します。既定の設定では、バス要素の初期値は、グラウンド値 (0 で表す) です。このセクションで説明するバスの初期化では、ゼロ以外の初期条件 (IC) を指定しなければなりません。

バス信号の初期化機能を使用すると、以下の操作が可能です。

  • 異なるデータ型の信号の初期条件を指定する

  • バスの各信号に異なる初期条件を適用する

  • すべての信号に初期条件を指定することなくバスの信号のサブセットに初期条件を指定する

  • 複数のブロック、信号、またはモデルに同じ初期条件を使用する

バス信号の初期化をサポートするブロック

ブロックが以下の両方の条件を満たす場合は、そのブロックに入力するバス信号の値を初期化できます。

  • 初期値または初期条件ブロック パラメーターをもつ

  • バス信号をサポートしている

バス信号の初期化は、以下のブロックでサポートされます。

  • データ ストア メモリ

  • Memory

  • Merge

  • Outport (ブロックが条件付きで実行されたコンテキスト内にある場合)

  • Rate Transition

  • Unit Delay

たとえば、Unit Delay ブロックはバス対応ブロックで、Unit Delay ブロックの [ブロック パラメーター] ダイアログ ボックスには、[初期条件] パラメーターがあります。

初期化は可変サイズの要素またはフレームベースの要素をもつバス信号でサポートされていない

以下をもつバスは初期化できません。

  • 可変サイズの信号

  • フレームベース信号

初期条件構造体を使用したバス信号の初期化のワークフロー

初期条件構造体を使用してバス信号を初期化するには、モデルを正しく設定しなければなりません。一般的なワークフローには、次の表に示したタスクが含まれます。タスクの順序は変更できますが、ブロック線図の更新またはシミュレーションの実行の前にモデルが正しく設定されていることを確認しなければなりません。

タスクドキュメンテーション
IC 構造体の定義初期条件 (IC) 構造体の作成
IC 構造体を使用してゼロ以外の初期条件を指定します。ブロック パラメーターを使用してバス信号を初期化する 3 つの方法
[コンフィギュレーション パラメーター] ダイアログ ボックスの診断の設定バス信号の初期化をサポートするための診断の設定

初期条件 (IC) 構造体の作成

バス信号の初期値を表すには、部分 IC 構造体または完全 IC 構造体を作成できます。以下のいずれかの操作により IC 構造体を作成します。

  • MATLAB® ベースまたは Simulink モデル ワークスペースで MATLAB 構造体を定義する

  • バス信号の初期化をサポートするブロックの [ブロック パラメーター] ダイアログ ボックスで初期条件パラメーターの構造体を評価する式を指定する

MATLAB 構造体の定義についての詳細は、MATLAB ドキュメンテーションの「構造体配列の作成」を参照してください。

完全 IC 構造体と部分 IC 構造体

完全 IC 構造体は、バス信号の要素ごとに初期値を指定します。この IC 構造体はバス階層を映し出したもので、バス要素の属性が反映されています。

部分 IC 構造体は、バス信号の要素のサブセットの初期値を指定します。部分 IC 構造体を使用する場合、Simulink はシミュレーション中に、バス信号要素のすべてを表す完全な IC 構造体を作成し、部分 IC 構造体では値が明示的に割り当てられない各要素に個別のグラウンド値を割り当てます。

ブロック パラメーター値の部分構造体を指定すると、モデルを繰り返し作成するプロセスで役立ちます。部分構造体を使用することにより、バス内の信号のサブセットに照準を合わせた作業が可能になります。部分構造体を使用すると、Simulink は未指定の信号を暗黙的に初期化します。

コード生成で完全構造体を指定すると、次のような利点があります。

  • 読みやすいコードを生成できます。

  • すべての信号を明示的に初期化するモデリング方法がサポートされます。

IC 構造体の値と対応するバス要素データ特性の適合

IC 構造体で指定するフィールドは、バス要素の以下のデータ属性と完全に一致しなくてはなりません。

  • 名前

  • データ型

  • 次元

  • 実数/複素数

たとえば、バス要素を実数の [2x2] 倍精度配列として定義する場合は、IC 構造体でそのバス要素を実数の [2x2] 倍精度配列とに初期化するための値を定義します。

列挙型 (enum) データをもつ各バス要素に対して IC 構造体のフィールドを明示的に指定しなければなりません。

部分 IC 構造体を定義する場合

  • バスにあるフィールドのみ含めます。

  • バスにあるフィールドを省略できます。

  • IC 構造体内のフィールドがバス要素の入れ子レベルに対応するようにします。

  • 構造体とバスの両方の同じ入れ子レベル内で、バス内の要素の順序とは異なる順序で構造体フィールドを指定できます。

    メモ:    IC 構造体の値は、対応するバス要素の設計の最小値と最大値の範囲内になければなりません。Simulink は、この範囲のチェックをモデルの更新中、およびモデルの実行時に行います。

部分構造体の例

Top というバスがあり、これに 3 つの要素、すなわちAB、および C があるとします。これらの要素にはそれぞれ次の特性があります。

  • A は 2 つの信号要素をもつ入れ子型バスです。

  • B は単一信号です。

  • C はバス A を入れ子として含んでいる入れ子型バスです。

次のモデル busic_example には入れ子になった Top バスが含まれます。下のスクリーン キャプチャでは、更新後のモデルを示しています。(モデルを開く)(モデルを開く)

次の図は、バス要素の Top バス階層、データ型、次元、および実数/複素数をまとめています。

Top
   A (sub1)
      A1 (double)
      A2 (int8, 5x1, complex)
   B (double)
   C (sub2)
      C1 (int16)
      C2 (sub1)  
         A1 (double)
         A2 (int8, 5x1, complex)

有効な部分 IC 構造体-  以下の例では、K は Unit Delay ブロックの初期値に指定された IC 構造体です。IC 構造体は busic_example モデルの Top バスに対応しています。

次の表は、有効な初期条件の仕様を示しています。

有効な構文説明
K.A.A1 = 3

バス要素 Top.A.A1 は double 型です。対応する構造体フィールドは、同じく double 型の 3 です。

K = struct('C',struct('C1',int16(4)))

データ型の一致ためには、型のキャストが必要な場合があります。バス要素 Top.C.C1int16 です。対応する構造体フィールドでは、int16(4) が明示的に指定されます。

K = struct('B',3,'A',struct('A1',4))

バス要素 Top.BTop.A は、バス内で同じ入れ子レベルにあります。同じ入れ子レベルのバス要素の場合、対応する構造体フィールドの順序は重要ではありません。

無効な部分 IC 構造体-  以下の例では、K は Unit Delay ブロックの初期値に指定された IC 構造体です。IC 構造体は busic_example モデルの Top バスに対応しています。

次の 3 つの初期条件の指定は有効ではありません

無効な構文構文が無効である理由
K.A.A2 = 3

値データ型、次元、および実数/複素数が一致しません。Top.A.A2int8 ですが、K.A.A2 は倍数型です。Top.A.A25x1 ですが、K.A.A21x1 です。さらに Top.A.A2 は実数/複素数ですが、K.A.A2 は実数です。

K.C.C2 = 3

スカラーを使用して IC サブ構造体を初期化できません。

K = struct('B',3,'X',4)

バスに含まれないフィールドは指定できません (X はバス内に存在しません)。

Simulink.Bus.createMATLABStruct を使用した完全 IC 構造体の作成

バス信号と同じ階層、名前、およびデータ属性をもつ完全 MATLAB 初期条件構造体の作成プロセスを効率化するには、関数 Simulink.Bus.createMATLABStruct を使用します。この関数は、指定しなかったすべての要素にそれらのグラウンド値を指定します。

関数 Simulink.Bus.createMATLABStruct では、次のような複数の異なる種類の入力を使用できます。

  • バス オブジェクト名

  • 端子ハンドルの配列

バス エディターから次のいずれかの方法で Simulink.Bus.createMATLABStruct 関数を呼び出すことができます。

  • [ファイル][MATLAB 構造体の作成] メニュー項目を選択します。

  • 完全な MATLAB 構造体を作成するバス オブジェクトを選択し、ツール バーから [MATLAB 構造体の作成] アイコンを選択します ( )。

MATLAB エディターで MATLAB 構造体を編集できます。

詳細は、Simulink.Bus.createMATLABStruct のドキュメンテーションを参照してください。

モデル アドバイザーを使用した部分構造体のチェック

構造体パラメーターが関連するバス信号と形状が合っていない場合を検出するには、Simulink エディターで [解析][モデル アドバイザー][製品別][Simulink]「部分構造体パラメーターの利用状況をバス信号で確認」 チェックを使用します。このチェックによって、部分 IC 構造体を特定できます。

ブロック パラメーターを使用してバス信号を初期化する 3 つの方法

入力としてバス信号を受け取り、バス初期化をサポートするブロックの初期条件パラメーターを設定することによって、バス信号を初期化します (「バス信号の初期化をサポートするブロック」を参照)。

たとえば、Unit Delay ブロックの [ブロック パラメーター] ダイアログ ボックスには、[初期条件] パラメーターがあります。

バス信号の初期化をサポートするブロックの場合は、以下のいずれかの方法を使用して、既定値 0 を次の値に置き換えることができます。

これら 3 つの方法のいずれにおいても IC 構造体の定義が必要です (「初期条件 (IC) 構造体の作成」を参照)。バス信号の初期化には、ゼロ以外のスカラー値は指定できません。さらに 0、IC 構造体、 Simulink.Parameter オブジェクト以外の他のタイプの値は指定できません。

IC 構造体を [ブロック パラメーター] ダイアログ ボックスで直接する代わりに、IC 構造体を MATLAB 変数として定義すると、以下のような利点があります。

  • 複数のブロックで IC 構造体を再利用できる

  • シミュレーション中に調整可能パラメーターとして IC 構造体を使用できる

Simulink.Parameter オブジェクトの値はシミュレーション中に調整することができます。

初期化用の MATLAB 構造体

バス信号の初期条件を明示的に定義した MATLAB 構造体を使用して、バス信号を初期化できます。

たとえば、Unit Delay ブロックの [初期条件] パラメーターには、以下に示したような構造体を入力できます。

初期化用の MATLAB 変数

正しい値による IC 構造体として定義した MATLAB 変数を使用して、バス信号を初期化できます。

たとえば、以下の部分構造体をベース ワークスペース内に定義できます。

K = struct('A', struct('A1', 3), 'B', 4);

その後、K 構造体を Unit Delay ブロックの [初期条件] パラメーターとして指定できます。

初期化用 Simulink.Parameter

Value 用の IC 構造体を使用した Simulink.Parameter オブジェクトを使用して、バス信号を初期化できます。

たとえば、ベース ワークスペースに部分構造体 P を定義できます (前のセクションで説明した busic モデルを反映します)。

P = Simulink.Parameter;
P.DataType = 'Bus: Top';
P.Value = Simulink.Bus.createMATLABStruct('Top');
P.Value.A.A1 = 3;
P.Value.B = 5; 

その後、P 構造体を Unit Delay ブロックの [初期条件] パラメーターとして指定できます。

バス信号の初期化をサポートするための診断の設定

バス信号の初期化を可能にするには、シミュレーションを開始する前に、以下の 2 つのコンフィギュレーション パラメーター診断を設定します。

これらの診断に関するドキュメンテーションには、診断で生成されるエラー メッセージに対応するためのモデルの変換方法について説明されています。

この情報は役に立ちましたか?