ドキュメンテーション

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Data Store Memory

  • Memory

  • Merge

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

  • Rate Transition

  • Unit Delay

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

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

  • 可変サイズの信号

  • フレームベース信号

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

バス信号の初期化を有効にするには、シミュレーションを開始する前に、指定不足の初期化の検出コンフィギュレーション パラメーターを [簡易] に設定します。

初期条件構造体の作成

バス信号の初期値を表すには、部分的または完全な初期条件 (IC) 構造体を作成できます。IC 構造体を作成するには、次のいずれかの方法を使用します。

  • MATLAB® ベースまたは Simulink モデル ワークスペースで MATLAB 構造体を定義する。構造体を定義するか、完全な構造体の場合は、関数 Simulink.Bus.createMATLABstruct を使用できます。

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

MATLAB 構造体の定義の詳細については、構造体配列の作成 (MATLAB)を参照してください。

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

  • 名前

  • 次元

  • 実数/複素数

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

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

構造体フィールドのデータ型の制御

ターゲット バスの信号要素が double 以外のデータ型を使用している場合、異なる手法を使用して、初期条件構造体のフィールドのデータ型を制御できます。選択する手法は、生成されたコードの効率性と可読性に影響します。初期条件構造体フィールドのデータ型の制御を参照してください。

初期化用の完全な構造体の作成

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

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

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

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

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

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

  • バス オブジェクト名

  • 端子ハンドルの配列

バス エディターから関数を起動することができます。完全な MATLAB 構造体を作成するバス オブジェクトを選択し、[ファイル][MATLAB 構造体の作成] メニュー項目を選択します。

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

構造体を作成した後に、MATLAB エディターで編集できます。

初期化用の部分構造体の作成

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

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

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

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

  • バスにある 1 つ以上のフィールドを省略します。

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

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

メモ

IC 構造体の値は、対応するバス要素の設計の最小値と最大値の範囲内になければなりません。Simulink は、この範囲のチェックをブロック線図の更新時、モデルのシミュレーションの実行時に行います。

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

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

  • B は単一信号です。

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

ex_bus_initial_conditions モデルには入れ子にされた 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)

以下の例では、KUnit Delay ブロックの初期値に指定された IC 構造体です。IC 構造体は ex_bus_initial_conditions モデルの Top バスに対応しています。以下に、有効な初期条件の指定を示します。

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

3 を使用してバス要素 Top.A.A1 を初期化します。

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

バス要素 Top.C.C1int16 です。対応する構造体フィールドでは、int16(4) が明示的に指定されます。あるいは、明示的なデータ型を指定せずに、フィールドの値を 4 として指定することもできます。

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

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

無効な部分 IC 構造体

以下の例では、KUnit Delay ブロックの初期値に指定された IC 構造体です。IC 構造体は ex_bus_initial_conditions モデルの Top バスに対応しています。

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

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

値の次元と実数/複素数が一致していません。バス要素 Top.A.A25x1 ですが、K.A.A21x1 です。Top.A.A2 は複素数ですが、K.A.A2 は実数です。

K.C.C2 = 3

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

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

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

ブロック パラメーターを使用したバス信号の初期化

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

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

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

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

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

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

  • 生成されたコードで調整可能なパラメーターとして IC 構造体を使用できる

初期化用の 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 を定義できます (前のセクションで説明した ex_bus_initial_conditions モデルを反映します)。

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 ブロックの [初期条件] パラメーターとして指定できます。

参考

ブロック

関数

クラス

関連するトピック