バス要素の初期条件の指定
バスの初期化は、特殊な形式の信号の初期化です。信号の初期化に関する一般的な情報は、信号と離散状態の初期化を参照してください。バス配列の信号の初期化の詳細については、バス配列の初期化を参照してください。
バスの初期化では、そのバスを使用するブロックの最初の実行で Simulink® が使用するバス要素の値を指定します。既定の設定では、バス要素の初期値は、グラウンド値 (0
で表す) です。バスの初期化では、ゼロ以外の初期条件を指定しなければなりません。
バスの初期化機能を使用すると、以下の操作が可能です。
異なるデータ型の信号の初期条件を指定する。
バスの各要素に異なる初期条件を適用する。
すべての要素に初期条件を指定することなくバスの要素のサブセットに初期条件を指定する。
複数のブロック、信号、またはモデルに同じ初期条件を使用する。
バスの初期化をサポートするブロック
ブロックが以下の両方の条件を満たす場合は、そのブロックに入力するバスの値を初期化できます。
初期値または初期条件ブロック パラメーターをもつ
バスをサポートする
次のブロックは、バスの初期化をサポートします。
Data Store Memory
IC
Memory
Merge
Outport (ブロックが条件付きで実行されたコンテキスト内にある場合)
Receive
Rate Transition
Unit Delay
たとえば、Unit Delay ブロックはバス対応ブロックです。その [ブロック パラメーター] ダイアログ ボックスには、[初期条件] パラメーターがあります。
以下をもつバスは初期化できません。
可変サイズの信号
フレームベース信号
バスの初期化をサポートするための診断の設定
バスの初期化を有効にするには、シミュレーションを開始する前に、[指定不足の初期化の検出] コンフィギュレーション パラメーターを [簡易]
に設定します。
初期条件構造体の作成
バスの初期値を表すために、部分的または完全な初期条件構造体を作成できます。初期条件構造体を作成するには、次のいずれかの方法を使用します。
MATLAB® ベースまたは Simulink モデル ワークスペースで MATLAB 構造体を定義する。構造体を手動で定義するか、完全な構造体の場合は、関数
Simulink.Bus.createMATLABStruct
を使用できます。バスの初期化をサポートするブロックの [ブロック パラメーター] ダイアログ ボックスで、初期条件パラメーターの構造体を評価する式を指定する。
MATLAB 構造体の定義の詳細については、構造体配列を参照してください。
初期条件構造体で指定するフィールドは、バス要素の以下のデータ属性と完全に一致しなければなりません。
名前
次元
実数/複素数
たとえば、実数の [2x2] double 配列であるバス要素を定義する場合、初期条件構造体でそのバス要素を実数の [2x2] double 配列に初期化するための値を定義します。
列挙 (enum
) データ型をもつ各バス要素に対して初期条件構造体のフィールドを明示的に指定します。
構造体フィールドのデータ型の制御
ターゲット バスのいずれかの要素が double
以外のデータ型を使用している場合、異なる手法を使用して、初期条件構造体のフィールドのデータ型を制御できます。選択する手法は、生成されたコードの効率性と可読性に影響します。初期条件構造体フィールドのデータ型の制御を参照してください。
初期化用の完全な構造体の作成
完全初期条件構造体は、バスの要素ごとに初期値を指定します。初期条件構造体はバス階層を映し出したもので、バス要素の属性が反映されています。
コード生成で完全構造体を指定すると、次のような利点があります。
読みやすいコードを生成できます。
すべての信号を明示的に初期化するモデリング方法がサポートされます。
バスと同じ階層、名前、およびデータ属性をもつ完全 MATLAB 初期条件構造体の作成を効率化するには、関数 Simulink.Bus.createMATLABStruct
を使用します。この関数は、指定しなかったすべての要素にそれらのグラウンド値を指定します。
この関数では、次のような複数の異なる種類の入力を使用できます。
Simulink.Bus
オブジェクト名端子ハンドルの配列
型エディターから関数を起動できます。MATLAB 構造体を作成する Simulink.Bus
オブジェクトを右クリックします。次に、[MATLAB 構造体の作成] をクリックします。あるいは、スタンドアロンの型エディターで、Simulink.Bus
オブジェクトを選択します。次に、型エディターのツールストリップで [MATLAB 構造体] をクリックします。例については、Initialize Buses and Arrays of Buses Using MATLAB Structure from Type Editorを参照してください。
構造体パラメーターが関連するバスと形状 (階層と名称) が合っていない場合を検出するには、モデル アドバイザーを使用します。
[モデル化] タブで [モデル アドバイザー] をクリックします。
[OK] をクリックします。
[タスク別] 、 [バスによる信号およびパラメーターのモデル化] で、[バス信号を使った構造体パラメーターの使用のチェック] を選択します。
[このチェックを実行] ボタンをクリックします。
モデル アドバイザーは、部分初期条件構造体を識別します。
構造体を作成した後に、MATLAB エディターで編集できます。
初期化用の部分構造体の作成
部分初期条件構造体は、バスの要素のサブセットの初期値を指定します。部分初期条件構造体を使用する場合、Simulink はシミュレーション中に、バス要素のすべてを表す完全な初期条件構造体を作成します。Simulink は、部分初期条件構造体では値が明示的に割り当てられない各要素に個別のグラウンド値を割り当てます。
ブロック パラメーター値の部分構造体を指定すると、モデルを繰り返し作成するプロセスで役立ちます。部分構造体を使用することにより、バス内の信号のサブセットに照準を合わせた作業が可能になります。部分構造体を使用すると、Simulink は未指定の信号を暗黙的に初期化します。
部分初期条件構造体を定義する場合は、次のようにします。
バスにあるフィールドのみ含めます。
バスにある 1 つ以上のフィールドを省略します。
初期条件構造体内のフィールドがバス要素の入れ子レベルに対応するようにします。
構造体とバスの両方の同じ入れ子レベル内で、バス要素とは異なる順序で構造体フィールドを指定できます。
メモ
初期条件構造体の値は、対応するバス要素の設計の最小値と最大値の範囲内になければなりません。Simulink は、この範囲のチェックをブロック線図の更新時、モデルのシミュレーションの実行時に行います。
Top
というバスがあり、これに 3 つの要素、すなわち A
、B
、および 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)
以下の例では、K
は Unit Delay ブロックの初期値に指定された初期条件構造体です。初期条件構造体は ex_bus_initial_conditions
モデルの Top
バスに対応しています。以下に、有効な初期条件の指定を示します。
有効な構文 | 説明 |
---|---|
K.A.A1 = 3 | 値 |
K = struct('C',struct('C1',int16(4))) | バス要素 |
K = struct('B',3,'A',struct('A1',4)) | バス要素 |
無効な部分初期条件構造体
以下の例では、K
は Unit Delay ブロックの初期値に指定された初期条件構造体です。初期条件構造体は ex_bus_initial_conditions
モデルの Top
バスに対応しています。
次の 3 つの初期条件の指定は有効ではありません。
無効な構文 | 構文が無効である理由 |
---|---|
K.A.A2 = 3 | 値の次元と実数/複素数が一致していません。バス要素 |
K.C.C2 = 3 | スカラー値を使用して初期条件サブ構造体を初期化することはできません。 |
K = struct('B',3,'X',4) | バスに含まれないフィールドは指定できません ( |
ブロック パラメーターを使用したバスの初期化
入力としてバスを受け取り、バス初期化をサポートするブロックの初期条件パラメーターを設定することによって、バスを初期化します (バスの初期化をサポートするブロックを参照)。
たとえば、Unit Delay ブロックの [ブロック パラメーター] ダイアログ ボックスには、[初期条件] パラメーターがあります。
バスの初期化をサポートするブロックの場合は、以下のいずれかの方法を使用して、既定値 0
を置き換えることができます。
これら 3 つの方法のいずれにおいても初期条件構造体の定義が必要です (初期条件構造体の作成を参照)。バスの初期化には、ゼロ以外のスカラー値は指定できません。さらに 0
、初期条件構造体、Simulink.Parameter
オブジェクト以外の他のタイプの値は指定できません。
初期条件構造体を [ブロック パラメーター] ダイアログ ボックスで直接指定する代わりに、初期条件構造体を MATLAB 変数として定義すると、以下のような利点があります。
複数のブロックで初期条件構造体を再利用できる
生成されたコードで調整可能なパラメーターとして初期条件構造体を使用できる
初期化用の MATLAB 構造体
バスの初期条件を明示的に定義した MATLAB 構造体を使用して、バスを初期化できます。
たとえば、Unit Delay ブロックの [初期条件] パラメーターには、構造体を入力できます。
初期化用の MATLAB 変数
正しい値による初期条件構造体として定義した MATLAB 変数を使用して、バスを初期化できます。
たとえば、以下の部分構造体をベース ワークスペース内に定義できます。
K = struct('A', struct('A1', 3), 'B', 4);
その後、K
構造体を Unit Delay ブロックの [初期条件] パラメーターとして指定できます。
初期化用の Simulink.Parameter
オブジェクト
Value
プロパティの初期条件構造体を使用した 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 ブロックの [初期条件] パラメーターとして指定できます。
参考
ブロック
関数
Simulink.BlockDiagram.addBusToVector
|Simulink.Bus.cellToObject
|Simulink.Bus.createMATLABStruct
|Simulink.Bus.createObject
|Simulink.Bus.objectToCell
|Simulink.Bus.save