Main Content

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

クラシック初期化モード

クラシック初期化を使用する場合

初期化モードは、Simulink® が条件付き実行サブシステムに対する初期化値をどのように処理するのかを制御します。

[クラシック] モードは R2013b 以前に作成された Simulink モデルの既定の初期化モードでした。以下のような場合は、クラシック モードを引き続き使用できます。

  • 簡易モードによる影響を受けるモデル要素がモデルに含まれていない場合。

  • 簡易モードの動作と要件がモデル化の目的に合わない場合。

  • 簡易モードへの変換に伴う作業量が簡易モードの利点よりも問題になる場合。初期化モードのクラシックから簡易への変換を参照してください。

初期化モードのクラシックへの設定

クラシック初期化モードを設定するには、次を行います。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[モデル化] タブおよび [設定] セクションで、[モデル設定] を選択します。

  2. 検索ボックスで、[指定不足の初期化の検出] を入力します。

  3. ドロップダウン リストから [クラシック] を選択します。

クラシック初期化の問題と制限

クラシック初期化モードを使用すると、以下のような問題の 1 つ以上が発生する場合があります。これらの問題は、簡易モードを使用することによって解決できます。各問題の説明には、クラシック モードでの動作の例、簡易モードを使用した場合の動作、簡易モードを使用するために行う必要のある変更の概要を含めています。

  • 恒等変換によるモデル動作の変化.

    同一のサブシステムを含む各条件付きサブシステムは、以下の両方が該当する場合、最初の実行の前に異なる初期値を表示する場合があります。

    • モデルがクラシック初期化モードを使用している。

    • 1 つ以上の同一サブシステムが恒等変換ブロックに出力する。

  • Discrete-Time Integrator ブロックまたは S-Function ブロックでの出力の不整合

    クラシック初期化モードを使用し、出力が Discrete-Time Integrator ブロックまたは S-Function ブロックに接続している条件付きサブシステムでは、出力の不整合が発生する場合があります。

  • 実行順序による Merge ブロックの出力への影響

    クラシック初期化モードを使用した条件付きサブシステムの実行順序は、Merge ブロックに接続したときに、Merge ブロックの出力に影響を及ぼす場合があります。ブロックの実行順序が変化すると、予期しない結果が得られる場合があります。

  • Merge ブロックのソース サブシステム ブロックの名前を変更すると、Merge ブロックの初期出力が変わる場合があります。

    独自の初期出力値を指定しない Merge ブロックに 2 つ以上のサブシステムが異なる初期出力値を提供している場合、いずれかのサブシステムの名前を変更すると、クラシック初期化モードの Merge ブロックの初期出力値に影響する可能性があります。

  • Simulink では正しい整合性のチェックは提供されない

    Simulink では、モデル参照の境界で接続された 2 つの Outport ブロック間の設定に対して正しい整合性のチェックは提供されません。

モデルをクラシック モードから簡易モードに変換する場合の作業についての詳細は、初期化モードのクラシックから簡易への変換を参照してください。

恒等変換によるモデル動作の変化

同一のサブシステムを含む各条件付きサブシステムは、以下の両方が該当する場合、最初の実行の前に異なる初期値を表示する場合があります。

  • モデルがクラシック初期化モードを使用している。

  • 1 つ以上の同一サブシステムが恒等変換ブロックに出力する。

恒等変換ブロックは、入力信号の値を変更しないブロックです。恒等変換ブロックの例として、Signal Conversion ブロックや値 1 が設定された Gain ブロックが挙げられます。

ex_identity_transform_cl モデルで、サブシステム A および B が同一ですが、B は Gain ブロックに出力し、さらに Outport ブロックに出力しています。

モデルのシミュレーションを実行したときに、A の初期値 (Scope ブロックの最上位の信号) は 2 ですが、サブシステムが同一でも B の初期値は 0 です。

簡易初期化モードを使用するようモデルを更新した場合 (「ex_identity_transform_simpl」を参照)、モデルの外観は同じに見えます。ex_identity_transform_clex_identity_transform_simpl に変換する上で必要なステップは次のとおりです。

  1. [指定不足の初期化の検出][簡易] に設定します。

  2. サブシステム A および B の Outport ブロックについて、[初期出力の値のソース] パラメーターを [入力信号] に設定します。

    [初期出力値のソース] パラメーターを [ダイアログ] に設定して、[初期出力] パラメーターを 3 に設定する方法でも、動作の結果は同じになります。

更新されたモデルのシミュレーションを実行したときに、恒等変換の接続は結果を変更しません。どちらの場合も出力は一致します。

Discrete-Time Integrator ブロックまたは S-Function ブロックでの出力の不整合

クラシック初期化モードを使用し、出力が Discrete-Time Integrator ブロックまたは S-Function ブロックに接続している条件付きサブシステムでは、出力の不整合が発生する場合があります。

ex_discrete_time_cl モデルで、有効なサブシステムに 2 つの Constant ブロックと、Discrete-Time Integrator ブロックへの出力が含まれています。有効なサブシステムは、2 つの Display ブロックに出力しています。

モデルのシミュレーションを実行すると、2 つの Display ブロックに異なる値が表示されます。

条件付きサブシステムが無効な場合でも、Discrete-Time Integrator ブロックに接続している Constant1 ブロックは実行されます。一番上の Display ブロックには、値 2 が表示されます。この値は、Constant1 ブロックの値です。Constant2 ブロックは実行されないので、一番下の Display ブロックには値 0 が表示されます。

簡易初期化モードを使用するようモデルを更新した場合 (「ex_discrete_time_simpl」を参照)、モデルの外観は同じに見えます。更新されたモデルは、簡易モードを使用することで、出力の不整合の問題を解決します。ex_discrete_time_clex_discrete_time_simpl に変換する上で必要なステップは次のとおりです。

  1. [指定不足の初期化の検出][簡易] に設定します。

  2. Outport ブロック Out1 および Out2 について、[初期出力の値のソース] パラメーターを [入力信号] に設定します。この設定により、初期値 (この場合は 2) を明示的に継承します。

    [初期出力値のソース] パラメーターを [ダイアログ] に設定して、[初期出力] パラメーターを 2 に設定する方法でも、動作の結果は同じになります。

更新されたモデルのシミュレーションを実行すると、Display ブロックに同じ出力が表示されます。両方の Outport ブロックがそれぞれの初期値を継承するので、出力値は 2 になります。

実行順序による Merge ブロックの出力への影響

クラシック初期化モードを使用した条件付きサブシステムの実行順序は、Merge ブロックに接続したときに、Merge ブロックの出力に影響を及ぼす場合があります。ブロックの実行順序が変化すると、予期しない結果が得られる場合があります。動作は、[ディセーブル時の出力] パラメーターをどのように設定しているかに依存します。

ex_basic_merge_sorted_order_1_cl モデルには、同一の有効なサブシステムが 2 つ (Enable A と Enable B) 存在し、Merge ブロックに接続しています。モデルのシミュレーションを実行すると、ブロックの並べ替えられた実行順序が赤い数字で表示されます。

モデルのシミュレーションを実行すると、Scope ブロックは以下のようになります。

ex_basic_merge_sorted_order_2_cl モデルは ex_merge_sorted_1_cl と同じです。ただし、ブロックの実行順序は、既定の実行順序の逆になっています。実行順序を変更するには、次のようにします。

  1. Enable A サブシステムの [プロパティ] ダイアログ ボックスを開いて、[優先順位] パラメーターを 2 に設定します。

  2. Enable B サブシステムの [優先順位]1 に設定します。

異なる実行順序を使ってモデルのシミュレーションを実行すると、Scope ブロックは以下のようになります。

実行順序の変更によって、同一の条件付きサブシステムから異なる結果が生成されます。

モデルを更新して簡易初期化モード (「ex_basic_merge_sorted_order_1_simpl」および「ex_basic_merge_sorted_order_2_simpl」を参照) を使用するには、以下のようにします。

  1. [指定不足の初期化の検出][簡易] に設定します。

Merge ブロックの [初期出力] パラメーターは、既定で空行列 ([]) です。このため初期出力値は、このデータ型の既定の初期値 (つまり、0) に設定されます。既定の初期値についての詳細は、信号値の初期化を参照してください。簡易モード モデルのシミュレーションをそれぞれ実行すると、両方のモデルで同じ結果が生成されます。

[リセット] に設定した [ディセーブル時の出力] パラメーターの使用

ex_merge_sorted_1_cl モデルには、Enabled Subsystem が 2 つ (Enable A と Enable B) 存在し、Merge ブロックに接続しています。モデルのシミュレーションを実行すると、ブロックの並べ替えられた実行順序が赤い数字で表示されます。

モデルのシミュレーションを実行すると、Scope ブロックは以下のようになります。

ex_merge_sorted_2_cl モデルは ex_merge_sorted_1_cl と同じです。ただし、ブロックの実行順序は、既定の実行順序の逆になっています。実行順序を変更するには、次のようにします。

  1. Enable A サブシステムの [プロパティ] ダイアログ ボックスを開いて、[優先順位] パラメーターを 2 に設定します。

  2. Enable B サブシステムの [優先順位]1 に設定します。

異なる実行順序を使ってモデルのシミュレーションを実行すると、Scope ブロックは以下のようになります。

実行順序の変更によって、同一の条件付きサブシステムから異なる結果が生成されます。

モデルを更新して簡易初期化モード (「ex_merge_sorted_1_simpl」および「ex_merge_sorted_2_simpl」を参照) を使用するには、以下のようにします。

  1. [指定不足の初期化の検出][簡易] に設定します。

  2. Enable A および Enable B の Outport ブロックについて、[ディセーブル時の出力] パラメーターを [保持] に設定します。簡易モードは、Merge ブロックを駆動する条件付きサブシステムの出力端子に対して [リセット] をサポートしません。

簡易モード モデルのシミュレーションをそれぞれ実行すると、両方のモデルで同じ結果が生成されます。

調整可能なパラメーター

ブロック パラメーターの多くは調整可能です。調整可能パラメーターは、モデルをコンパイルし直さなくてもパラメーターを変更することができます (モデルのコンパイルを参照)。たとえば、Gain ブロックのゲイン パラメーターは調整可能です。シミュレーションが実行されている間に、ブロックのゲインを変更することができます。シミュレーション中にパラメーターの調整ができないパラメーターについては、パラメーターを設定するダイアログ ボックスのコントロールが無効になります。

調整可能なパラメーターの値を変更した場合、変更内容は次のタイム ステップの開始時に有効になります。

ステート

一般的に、システム、そして、モデル、出力の現在値は、一時的な変数の前の値の関数です。そのような変数は、状態と呼ばれます。したがって、ブロック線図からモデルの出力を計算するには、その次のタイム ステップでの出力の計算で使うために、現在のタイム ステップでの状態の値を保存する必要があります。この作業は、状態を定義するモデルに対してシミュレーション中に行われます。

Simulink モデル内では 2 つのタイプの状態が起こりえます。連続と離散の状態です。連続状態は、連続的に変化します。連続状態の例は、自動車の位置と速度です。離散状態は、有限 (周期的または非周期的) 区間を使って状態が更新 (再計算) される連続状態の近似です。離散状態の例は、連続状態とは対照的に、毎秒更新される走行距離計に表示される自動車の位置です。この制限においては、離散状態の区間がゼロに近付くと、離散状態は連続状態に等しくなります。

ブロックは、暗黙的にモデルの状態を定義します。特に現在の出力を計算するために前の出力の一部またはすべてを必要とするブロックは、タイム ステップ間で保存する必要がある状態を暗黙的に定義します。そのようなブロックは状態をもつと言われます。

以下は、状態をもつブロックのグラフィカルな表現です。

連続状態を定義するブロックは、以下の標準の Simulink ブロックを含みます。

モデルの状態の総数は、そのすべてのブロックによって定義されるすべての状態の和です。ブロック線図で状態数を決定することは、それが含むブロックのタイプを決定するためにブロック線図を解釈し、状態を定義するブロック タイプの各インスタンスによって定義される状態の数の総計を取る必要があります。この作業は、シミュレーションのコンパイル段階中に行われます。

Simulink では正しい整合性のチェックは提供されない

Simulink では、モデル参照の境界で接続された 2 つの Outport ブロック間の設定に対して正しい整合性のチェックは提供されません。

Simulink では、以下の条件がすべて true のときに、偽警告または警告なしがスローされます。

  • オプション [指定不足の初期化の検出] 設定が [クラシック] に設定されている。

  • モデルが Model ブロックを含んでいる。

  • 参照モデルで、ルートの Outport ブロックが条件付きで実行されるサブシステムによって直接 (またはバーチャル ブロックを介して間接的に) 駆動される。このシナリオでは、条件付きで実行されるサブシステムの出力に対応する Outport ブロックは "ソース" Outport ブロックです。

  • 最上位モデルで、ソース Outport ブロックによって駆動される Model ブロックの出力端子が、条件付きで実行されるサブシステムの "接続先"Outport ブロックを駆動する。

ソースと接続先の両方の Outport ブロックが同じモデル内にあり、両方の Outport ブロックに対する設定 [初期出力][ディセーブル時の出力] (該当する場合) が異なる場合、Simulink はエラーをスローします。ただし、前述の場合、Simulink は 2 つの Outport ブロックに同じ設定がある場合は偽警告をスローするか、異なる場合は警告またはエラーをスローしません。