ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

動的システムのモデル化

ブロック線図のセマンティクス

動的システムの古典的なブロック線図モデルは、ブロックとライン (信号) でグラフィカルに構成されます。ブロック線図モデルの歴史は、フィードバック制御理論や信号処理のような工学分野から派生しています。ブロック線図内のブロックは、動的システム自体を定義します。ブロック線図内の各動的システム要素の関係は、ブロックを結合する信号の使用で説明されます。ブロック線図内のブロックとラインは、まとめて動的システム全体を記述します。

Simulink® 製品は、非バーチャル ブロックとバーチャル ブロックの 2 つのクラスのブロックの意味を含めることによって、これらの古典的ブロック線図モデルを拡張します。非バーチャル ブロックは、基本システムを表します。バーチャル ブロックは、グラフィカルおよび構成上の便宜のためだけに用意されています。ブロック線図モデルによって記述される方程式系には影響がありません。モデルの読みやすさを向上させるためにバーチャル ブロックを使用することができます。

一般に、ブロックとラインは、多くの "計算のモデル" を説明するために使うことができます。1 つの例はフローチャートです。フローチャートは、ブロックとラインで構成されますが、フローチャートのセマンティクスを使って一般的な動的システムは記述できません。

「時間ベースのブロック線図」という用語は、動的システムを記述するブロック線図を他の形式のブロック線図と区別するために使用されます。「ブロック線図」(またはモデル) という用語を使用して、コンテキストが明示的な区別を必要としない限り、時間ベースのブロック線図と呼びます。

時間ベースのブロック線図の意味をまとめると、以下のようになります。

  • Simulink のブロック線図は、信号と状態変数間の時間ベースの関係を定義します。ブロック線図の解は、これらの関係を時間で評価することにより得られます。ここで、時間は、ユーザー指定の「開始時間」で始まり、ユーザー指定の「終了時間」で終わります。これらの関係の各評価は、タイム ステップと呼びます。

  • 信号は、時間によって変化する量を表し、ブロック線図の開始時間と終了時間の間ですべての点に対して定義されます。

  • 信号と状態変数の関係は、ブロックによって表される式で定義されます。各ブロックは、一連の式 (ブロックのメソッド) で表されます。これらの式は、入力信号、出力信号、状態変数関係を定義します。式の定義に固有のパラメーターの概念は、式の内部の係数です。

モデルの作成

Simulink 製品は、ライブラリ ブラウザーによってブロック タイプのライブラリ (ブロック ライブラリを参照) から選択されたブロック タイプのインスタンスを作成および接続することが可能なグラフィカル エディターを提供します。基本ブロックとして使用可能な基本システムを表すブロックのライブラリが提供されています。Simulink が提供するブロックは、組み込みブロックと呼ばれます。ユーザーは、ユーザー独自のブロック タイプを作成し、Simulink エディターを使ってブロック線図内でそれらのインスタンスを作成することができます。ユーザー定義のブロックは、カスタム ブロックと呼ばれます。

時間

時間は、ブロック線図の継承される要素で、ブロック線図のシミュレーション結果は時間と共に変化します。言い換えると、ブロック線図は、動的システムの瞬間的な動作を表します。システムの動作を時間にわたって定義するため、時間スパンの開始から終了までのタイム ステップと呼ばれる区間でモデルを繰り返し実行する必要があります。連続するタイム ステップでのモデルの反復実行は、モデルが表すシステムのシミュレーションと呼ばれます。

状態

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

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

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

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

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

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

状態の取り扱い

シミュレーション中のモデルの状態を決定、初期化、ログを作成するための以下の機能が提供されています。

  • model コマンドは、モデルによって定義される状態の総数、各状態を定義するブロック、各状態の初期値を含むモデルによって定義される状態に関する情報を表示します。

  • Simulink デバッガーは、シミュレーション中の各タイム ステップでの状態の値を表示し、Simulink デバッガーの states コマンドは、モデルの現在の状態を表示します (Simulink デバッガーを参照)。

  • モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペイン (状態情報を参照) を使って、モデルの状態に対する初期値を指定し、シミュレーション中に各タイム ステップで状態の値を MATLAB® ワークスペースの配列または構造体変数として記録することができます。

  • [ブロック パラメーター] ダイアログ ボックス (および ContinuousStateAttributes パラメーター) を使用すると、連続状態を使用するボックス (Integrator など) の状態に名前を付けることができます。これにより、特にブロックの状態が複数ある場合などに、状態に関してログが作成されたデータの解析を単純化できます。

    荷重制約をもつ 2 つのシリンダー モデル」のモデルは、連続状態のログを示しています。

連続状態

連続状態の計算は、変化の割合、つまり導関数を知っている必要があります。連続状態の変化率は、一般に連続的に変化する (つまり、自身が状態である) ので、現在のタイム ステップでの連続状態の値を計算するには、シミュレーションの開始からの導関数の積分が必要です。そのため、連続状態のモデル化は、積分操作の表現と時間内の各ポイントで状態の導関数を計算するプロセスが必要です。Simulink ブロック線図は、Integrator ブロックを使って積分を示し、Integrator ブロックの入力に接続される一連のブロックを使って状態の導関数の計算のためのメソッドを表します。Integrator ブロックの入力に接続される一連のブロックは、常微分方程式 (ODE) のグラフィカルな対応部分です。

一般に、シンプルな動的システムを除いて、常微分方程式によって表される実世界の動的システムの状態を積分するための分析的メソッドは存在しません。状態の積分は、ODE ソルバーと呼ばれる数値的手法を使用する必要があります。これらのさまざまな手法は、計算の精度と計算の負荷のトレードオフです。Simulink 製品は、最も一般的な ODE 積分手法をコンピューターで実装しており、ユーザーはシステムのシミュレーション時に Integrator ブロックで表される状態の積分に使うものを決定することができます。

現在のタイム ステップでの連続状態の値の計算は、シミュレーションの開始時からの値の積分が必要です。数値積分の精度は、タイム ステップ間の間隔のサイズに依存します。一般に、タイム ステップが小さいほどシミュレーションの精度は高くなります。可変タイム ステップ ソルバーと呼ばれる ODE ソルバーは、状態の変化率に基づいて、タイム ステップのサイズを自動的に変え、シミュレーションの進行で指定したレベルの精度に達することができます。固定ステップ ソルバーの場合はタイム ステップ サイズを指定し、可変ステップ ソルバーの場合はステップ サイズを自動決定することができます。計算の作業負荷を最小にするために、可変ステップ ソルバーは最も急激に変化するモデルの状態に対して、ユーザーが指定した全体的なレベルの精度に達するように最大ステップ サイズを選択します。これは、すべてのモデルの状態がユーザー指定の精度で計算されるようにします。

離散状態

離散状態の計算は、現在とその前のタイム ステップの値の関係を知っている必要があります。これは状態の更新関数と呼ばれています。離散状態は、前のタイム ステップでの値だけでなく、モデルの入力の値にも依存します。そのため離散状態のモデル化には、前のタイム ステップでのシステムの入力に対する状態の従属関係のモデル化が必要です。Simulink ブロック線図は、離散ブロックと呼ばれる特定のタイプのブロックを使って、更新関数と離散ブロックの入力に接続される一連のブロックを指定し、システムの入力への離散状態の従属関係をモデル作成します。

連続状態と同様に、離散状態は、シミュレーション タイム ステップ サイズに制約を設定します。特に、ステップ サイズはモデルの状態のすべてのサンプル時間がヒットしなければなりません。この作業は離散ソルバーと呼ばれる Simulink システムの要素に割り当てられます。提供されている 2 つの離散ソルバーは、固定ステップ離散ソルバーと可変ステップ離散ソルバーです。固定ステップ離散ソルバーは、サンプル時間ヒットで実際に状態が値を変化させるかどうかにかかわらず、モデルのすべての離散状態のすべてのサンプル時間にヒットする固定ステップ サイズを決定します。対照的に、可変ステップ離散ソルバーは、ステップ サイズを変化させて、状態が値を変えるときにのみサンプル時間のヒットが発生するようにします。

ハイブリッド システムのモデル化

ハイブリッド システムは、離散と連続の両方の状態をもつシステムです。厳密に言うと、連続サンプル時間と離散サンプル時間の両方をもつモデルは、連続状態と離散状態をもつハイブリッド モデルとして扱われます。そのようなシステムのモデルを解くことは、連続状態積分での精度の制約と、離散状態でのサンプル時間ヒットの制約の両方を満たすステップ サイズを選択する必要があります。Simulink ソフトウェアは、離散ソルバーにより決定される次のサンプル時間ヒットを、連続ソルバーでの追加制約として渡すことにより、この要件を満たします。連続ソルバーは、次のサンプル時間ヒットの時間までで、それを超えない時間にシミュレーションを進めるステップ サイズを選択しなければなりません。連続ソルバーは、その精度の制約を満たす次のサンプル時間ヒットより短いタイム ステップを取ることができますが、精度の制約が許容する場合でも、次のサンプル時間ヒットを超えるステップは取ることができません。

ハイブリッド システムは任意の積分手法を使って、シミュレートすることができますが、積分手法によって効率や精度が異なります。ほとんどのハイブリッド システムでは、ode23ode45 が、効率において他のソルバーよりも優れています。離散ブロックのサンプル ホールドに関連する不連続性のため、ode15s ソルバーと ode113 ソルバーは、ハイブリッド システムには使用しないでください。

ブロック パラメーター

多くの標準ブロックの重要な特性は、パラメーター化されることです。たとえば、Simulink Constant ブロックの定数値はパラメーターです。各パラメーター化されたブロックは、さまざまなパラメーターを設定可能なブロック ダイアログをもちます。MATLAB 式を使用して、パラメーター値を指定することができます。Simulink は、シミュレーションの実行前にその式を評価します。シミュレーション中にパラメーター値を変更することができます。これにより、パラメーターに対して最適の値を対話形式で決定することができます。

パラメーター化されたブロックは、同じブロック群を効率的に表します。たとえば、モデルの作成時に、各 Constant ブロックの定数値パラメーターを個別に設定できるので、各ブロックは別の動作をします。各標準ブロックがブロック群を表すことができるので、ブロックのパラメーター化は、標準 Simulink ライブラリのモデル作成機能を大きく向上させます。詳細については、ブロック パラメーターおよびブロック ライブラリを参照してください。

調整可能なパラメーター

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

調整可能なパラメーターの値を変更した場合、変更内容は次のタイム ステップの開始時に有効になります。詳細については、ブロック パラメーターおよびブロック パラメーター値の調整と試行を参照してください。

ブロックのサンプル時間

すべての Simulink ブロックに、ブロックの実行時間を定義したサンプル時間があります。ほとんどのブロックで、SampleTime パラメーターを使ってサンプル時間を指定することができます。一般的なオプションとして離散サンプル時間、連続サンプル時間、継承されるサンプル時間があります。

一般的なサンプル時間のタイプサンプル時間
離散[Ts, To]Unit Delay, Digital Filter
連続[0, 0]Integrator, Derivative
継承[–1, 0]Gain, Sum

離散ブロックのサンプル時間はベクトル [Ts, To] で、Ts は連続サンプル時間の間隔または期間、To はサンプル時間に対する初期オフセットを示します。対照的に、離散でないブロックのサンプル時間は、ゼロ、負の整数、または無限大を使用して特定のタイプのサンプル時間を使った組み合わせで表されます (サンプル時間情報の表示を参照)。たとえば、連続ブロックは公称サンプル時間が [0, 0] で、状態が連続的に変化するモデル システム (自動車の加速など) で使用されます。継承されたブロックのサンプル時間タイプをシンボリックに [–1, 0] と指定すると、Simulink はモデル内の継承されたブロックのコンテキストに基づいて実際の値を決定します。

すべてのブロックですべてのタイプのサンプル時間を使用できるわけではありません。たとえば、離散ブロックでは連続サンプル時間を使用できません。

Simulink では視覚補助のために、ブロックのサンプル時間のタイプと速度を示すブロック線図の色の設定と注釈オプションが提供されています。凡例内のすべての色および注釈をキャプチャできます (サンプル時間情報の表示を参照)。

サンプル時間の詳細は、サンプル時間を参照してください。

カスタム ブロック

モデルで使用できるカスタム ブロックのライブラリを作成することができます。グラフィカルに、またはプログラム的にカスタム ブロックを作成できます。グラフィカルにカスタム ブロックを作成するには、ブロックの動作を表すブロック線図を描画し、このブロック線図を Simulink Subsystem ブロック内にラッピングし、Simulink ブロックのマスク機能を使ってブロックにパラメーター ダイアログを設定します。ブロックをプログラム的に作成するには、ブロックのシステム関数を含む MATLAB ファイルまたは MEX ファイルを作成します (C/C++ S-Function の基礎を参照)。結果のファイルは、S-Function と呼ばれます。その後その S-Function をモデル内の Simulink の S-Function ブロックと関連付けます。S-Function ブロックを Subsystem ブロック内にラッピングし、パラメーター ダイアログを Subsystem ブロックに追加することにより、パラメーター ダイアログを S-Function ブロックに追加できます。詳細については、ブロックのオーサリングとシミュレーションの統合を参照してください。

システムとサブシステム

Simulink ブロック線図は複数の層で構成されます。1 つのサブシステムで 1 つの層を定義します。各サブシステムはブロック線図全体の中の一部であり、ブロック線図の主機能に悪影響を与えないことが理想です。サブシステムは、主にブロック線図組織化を補助するために提供されます。サブシステムは、個々のブロック線図は定義しません。

Simulink ソフトウェアは、2 つのタイプのサブシステムを区別します。バーチャル サブシステムと非バーチャル サブシステムです。主な違いは、非バーチャル サブシステムは、サブシステムの内容が評価されたときに制御する機能を提供することです。

バーチャル サブシステム

バーチャル サブシステムはモデルにグラフィカルな階層を提供します。実行には影響しません。モデルの実行時、Simulink エンジンはすべてのバーチャル サブシステムをフラット化します (実行前に Simulink で所定のサブシステムを拡張するなど)。この拡張は、C や C++ などのプログラミング言語でのマクロの機能によく似ています。大まかに言うと、ルート システムとして参照される最上位レベルのブロック線図に対する1つのシステムと、非バーチャル サブシステムとブロック線図内の他の要素から得られる低レベルの複数のシステムがあります。これらのシステムは、Simulink デバッガー内で見ることができます。これらの内部システムの作成は、しばしばモデルの階層構造のフラット化と呼ばれます。

非バーチャル サブシステム

非バーチャル サブシステムは、太い境界線で描画され、モデルの実行とグラフィカルな階層を提供します。非バーチャル サブシステムは、Simulink エンジンによって単一ユニットとして実行 (アトミック実行) されます。トリガー、イネーブル、関数呼び出しまたはアクションなどの前処理が発生したときにのみ実行される条件付き実行サブシステムを作成することができます (条件付き実行サブシステムとモデルを参照)。Simulink は、サブシステムを実行する前に、非バーチャル サブシステムの実行中に使用されたすべての入力を常に計算します。Simulink は、次の非バーチャル サブシステムを定義します。

Atomic Subsystem-  Atomic Subsystem の主な特徴は、Atomic Subsystem 内の各ブロックが単一ユニットとして実行されることです。モデルの機能面を実行レベルでグループ化できるのが利点です。実行速度の異なるブロックなど、任意の Simulink ブロックを Atomic Subsystem に配置できます。バーチャル サブシステムの [Atomic サブシステムとして扱う] オプションを選択して Atomic サブシステムを作成することができます (詳細については、「Atomic Subsystem ブロック」を参照)。

Enabled Subsystem-  Enabled Subsystem は Atomic Subsystem と同様に機能しますが、サブシステムのイネーブル端子を駆動する信号がゼロよりも大きい場合にのみ実行されます。Enabled Subsystem を作成するには、Enable 端子ブロックを Subsystem ブロック内に配置します。サブシステムのアクションをイネーブルする前に、Enabled Subsystem 内のブロックの状態を保持またはリセットするように Enabled Subsystem を構成できます。それには、Enable 端子ブロックの [イネーブル時の状態] パラメーターを選択します。同様に、サブシステムを無効にする前に、Enabled Subsystem のそれぞれの出力端子を保持またはリセットするようにも構成できます。その場合、Outport ブロックの [ディセーブル時の出力] パラメーターを選択します。

Triggered Subsystem-  トリガー端子ブロックをサブシステム内に配置することによって Triggered Subsystem を作成できます。結果として得られる Subsystem は、ゼロについての立ち上がりエッジまたは立ち下がりエッジがサブシステムのトリガー端子を駆動する信号と見なされたときに実行されます。トリガー エッジの方向は、トリガー端子ブロックのトリガー タイプ パラメーターで定義されます。Triggered Subsystem の内容は非周期的に実行されるため、Simulink は Triggered Subsystem に配置されたブロックのタイプを、明示的なサンプル時間がないブロックに制限します (サブシステム内のブロックは -1 のサンプル時間をもたなければなりません)。Stateflow® の Chart にも、Stateflow エディターを使用して定義されるトリガー端子を含めることができます。Simulink は Triggered Subsystem とトリガー チャートを区別しません。

Function-Call Subsystem-  Function-Call Subsystem は、シミュレーション時に別のブロックが直接呼び出せるサブシステムです。これは手続きプログラミング言語の関数と同じです。Function-Call Subsystem の起動は、並べ替えられた順序でサブシステムに含まれるブロックの出力および更新メソッドを呼び出す方法と同じです。Function-Call Subsystem を起動するブロックは、関数呼び出しイニシエーターと呼ばれます。Stateflow、Function-Call Generator、S-Function ブロックはすべて関数呼び出しイニシエーターとして機能します。Function-Call Subsystem を作成するには、Function-Call Subsystem ブロックを Ports & Subsystems ライブラリからモデルにドラッグし、そのサブシステムの上に表示される関数呼び出し端子に関数呼び出しイニシエーターを接続します。また、最初にモデルに Subsystem ブロックを作成し、次にサブシステムに Trigger ブロックを作成して Trigger ブロックの Trigger typefunction-call に設定することにより、Function-Call Subsystem を新たに作成することもできます。

サンプル時間タイプをトリガー、または [周期的] に設定することで、Function-Call Subsystem をトリガーされるシステム (既定の設定) または周期的なサブシステムに構成することができます。関数呼び出しイニシエーターでは、トリガーされた Function-Call Subsystem をタイム ステップごとに 0 回、1 回、または複数回呼び出すことができます。トリガーされた Function-Call Subsystem のすべてのブロックのサンプル時間は、継承 (-1) されるように設定しなければなりません。

関数呼び出しイニシエーターではタイム ステップごとに 1 回だけ周期的な Function-Call Subsystem を呼び出すことができ、サブシステムを周期的に呼び出さなければなりません。イニシエーターで Function-Call Subsystem を非周期的に呼び出すと、Simulink はシミュレーションを停止し、エラー メッセージを表示します。周期的な Function-Call Subsystem 内の各ブロックには、継承されないサンプル時間または継承される (-1) サンプル時間を指定できます。継承されないサンプル時間を指定するすべてのブロックは、同じサンプル時間を指定しなければなりません。たとえば 1 つのブロックで 0.1 をサンプル時間に指定した場合、他のすべてのブロックでもサンプル時間を 0.1 または -1 に指定しなければなりません。関数呼び出しイニシエーターがサブシステムのブロックで指定されたサンプル時間と異なる速度で周期的な Function-Call Subsystem を呼び出すと、Simulink はシミュレーションを停止し、エラー メッセージを表示します。

Enabled and Triggered Subsystem-   Subsystem ブロックの内部に Trigger Port ブロックと Enable 端子ブロックを配置することにより、Enabled and Triggered Subsystem を作成できます。結果として得られる Subsystem は、サブシステムが実行可能状態で、ゼロについての立ち上がりエッジまたは立ち下がりエッジがサブシステムのトリガー端子を駆動する信号と見なされたときに実行される Triggered Subsystem です。トリガー エッジの方向は、Trigger Port ブロックの Trigger type パラメーターによって定義されます。Triggered Subsystem の内容は非周期的に実行されるため、Simulink は、Enabled and Triggered Subsystem に配置されたブロックのタイプを、明示的なサンプル時間がないブロックに制限します。つまり、Subsystem 内のブロックには、-1 というサンプル時間が設定されていなければなりません。

Resettable Subsystem-  Resettable Subsystem はサンプル時間ヒットごとにその出力を計算しますが、トリガーによってサブシステムの状態のリセットも行います。Resettable Subsystem は、ゼロに対する立ち上がりエッジまたは立下りエッジでトリガーされると、その中に含まれるすべてのブロックの状態をリセットします。トリガーにより、Resettable Subsystem はその状態をリセットし、出力の計算も行います。

Resettable Subsystem は、その中に含まれるすべてのブロックに対して単一のサンプル時間のみサポートします。サブシステム内の各ブロックのサンプル時間が異なると、エラーが発生します。詳細については、Resettable Subsystem を参照してください。

アクション サブシステム-  アクション サブシステムは、Enabled Subsystem と Function-Call Subsystem の特性の共通部分と考えることができます。Action Subsystem は、サンプル時間を 1 つしか (たとえば、連続サンプル時間、離散サンプル時間、または継承されるサンプル時間など) 設定できないように制限されています。アクション サブシステムは、アクション サブシステム イニシエーターで実行しなければなりません。これは、 If ブロックまたは Switch Case ブロックのいずれかです。与えられたアクション サブシステム イニシエーターに接続されたすべてのアクション サブシステムは同じサンプル時間をもたなければなりません。Action Subsystem を作成するには、Action Port ブロックを Subsystem ブロック内に配置します。サブシステム アイコンは、Action Subsystem を実行中のブロックのタイプ (If ブロックまたは Switch Case ブロック) に合わせて自動的に変更されます。

アクション サブシステムは、アクション サブシステム イニシエーターによって最大 1 回だけ実行できます。Action Subsystem を使用すると、Action Port ブロックの [実行を再開時の状態] パラメーターを使用して状態をリセットする時期を制御できます。アクション サブシステムでは、Outport ブロックの [Output when disabled] パラメーターを使用して Outport 値を保持するかどうかも制御できます。これは Enabled Subsystem と同じです。

Action Subsystem は、イニシエーター ブロックを使用して実行しなければならない点で Function-Call Subsystem とよく似ています。Function-Call Subsystem は与えられたタイム ステップで複数回実行できますが、アクション サブシステムは 1 回までしか実行できません。この制約のため、Function-Call Subsystem と比べて大きいブロック セット (周期的ブロック) をアクション サブシステムに配置できます。また、状態と出力の動作を制御できるということにもなります。

While Iterator Subsystem-  While Iterator Subsystem は、各モデルのタイム ステップで複数回の反復を実行します。反復回数は、While Iterator ブロックの条件によって制御されます。While Iterator Subsystem を作成するには、While Iterator ブロックを Subsystem ブロック内に配置します。

While Iterator Subsystem は、任意のタイム ステップで任意の回数の反復を実行できるという点で、Function-Call Subsystem と非常によく似ています。While Iterator Subsystem が Function-Call Subsystem と異なるのは、Stateflow チャートなどの独立したイニシエーターがないことです。さらに、While Iterator Subsystem は、While Iterator ブロックがオプションで生成する現在の反復回数にアクセスすることもできます。While Iterator Subsystem では、While Iterator ブロックの [開始時の状態] パラメーターを使用して開始するときに状態をリセットするかどうかも制御できます。

For Iterator Subsystem-  For Iterator Subsystem は、各モデルのタイム ステップで固定回数の反復を実行します。反復回数には、For Iterator Subsystem に対する外部入力を使用することも For Iterator ブロックで内部指定することもできます。For Iterator Subsystem を作成するには、For Iterator ブロックを Subsystem ブロック内に配置します。

For Iterator Subsystem は、For Iterator ブロックがオプションで生成する現在の反復回数にアクセスできます。For Iterator Subsystem では、For Iterator ブロックの [開始時の状態] パラメーターを使用して開始するときに状態をリセットするかどうかも制御できます。For Iterator Subsystem は While Iterator Subsystem によく似ていますが、与えられたタイム ステップの反復回数が固定されているという制約があります。

For Each Subsystem-  For Each Subsystem を使用すると、入力信号の個別要素 (またはサブ配列) に対して、同じアルゴリズムを反復実行できます。ここで、アルゴリズムとはサブシステム内のブロックセットであり、信号の 1 つの要素 (またはサブ配列) に適用されます。サブシステム内の For Each ブロックを使用して、サブシステム入力を要素 (またはサブ配列) に分解する処理を構成できます。For Each ブロックを使用すれば、個別の結果を連結して出力信号にする処理も構成できます。このサブシステムの利点は、処理対象の各要素またはサブ配列ごとに独立した状態セットを維持できることです。また、一部のモデルでは、Simulink Coder™ によりサブシステムごとに生成されたコードの再利用性が向上します。

信号

信号という用語は、時間内のすべての点で値をもつ量が変化する時間を指しています。信号名、データ型 (たとえば、8 ビット、16 ビット、32 ビット整数)、数値型 (実数または複素数)、大きさ (1 次元、2 次元、多次元配列) を含む多くの信号の属性を指定することができます。多くのブロックは、任意のデータ型または数値型、大きさの信号を受け入れ、出力できます。他のブロックは、扱うことができる信号の属性に制限があります。

ブロック線図で、信号は矢じりをもつラインで表されます。信号のソースは、ブロックのメソッド (式) の評価中に信号に書き込むブロックに対応します。信号の行く先は、ブロックのメソッド (式) の評価中に信号を読み込むブロックです。

信号の定義を理解する良い方法として、教室を考えてみましょう。教師は黒板に書き、生徒は黒板に書かれたものをノートに書こうとしたときに読みます。これは、Simulink の信号でも同じです。信号の読み込み頻度は、信号の読み手 (ブロックのメソッド) が必要に応じて自由に選択できます。

信号の詳細は、信号を参照してください。

ブロックのメソッド

ブロックは、複数の式を表します。これらの式は、ブロックのメソッドとして表されます。これらのブロックのメソッドは、ブロック線図の実行中に評価 (実行) されます。これらのブロックのメソッドの評価は、シミュレーション ループ内で行われ、シミュレーション ループの各サイクルは、各時点でのブロック線図の評価を表します。

メソッドのタイプ

ブロックのメソッドにより実行される関数のタイプに名前が割り当てられます。共通のメソッド タイプには、以下が含まれます。

  • Outputs

    現在のタイム ステップでの入力と前のタイム ステップでの状態からブロックの出力を計算

  • Update

    現在のタイム ステップでの入力と前のタイム ステップでの離散状態から、現在のタイム ステップでのブロックの離散状態の値を計算

  • Derivatives

    ブロックの入力と前のタイム ステップでの状態の値から、現在のタイム ステップでのブロックの連続状態の導関数を計算

メソッドの命名規則

ブロックのメソッドは、異なるタイプのブロックに対して、同じタイプの操作を異なる方法で実行します。Simulink ユーザー インターフェイスとドキュメンテーションは、ドット表記を使って、ブロックのメソッドで実行される特定の関数を示します。

BlockType.MethodType

たとえば、Gain ブロックの出力を計算するメソッドは、以下のように参照されます。

Gain.Outputs 

Simulink デバッガーは 1 段進んだ命名規則を使用し、以下のように、メソッド タイプと、メソッドがシミュレーション中に呼び込まれるブロック インスタンスの両方を指定するために、ブロックのインスタンス名を使用します。

g1.Outputs

モデルのメソッド

ブロックのメソッドに加えて、モデルのプロパティとその出力を計算する一連のメソッドも提供されています。Simulink ソフトウェアは、モデルのプロパティと出力を決定するために、シミュレーション中に同様にこれらのメソッドを呼び込みます。モデルのメソッドは、一般に、同じタイプのブロックのメソッドを呼び込むことによってこれらの作業を行います。たとえば、モデルの Outputs メソッドは、出力を計算するためにモデルによって指定される順番で、含んでいるブロックの Outputs メソッドを呼び込みます。モデルの Derivatives メソッドは、同様に、状態の導関数を決定するために、含んでいるブロックの Derivatives メソッドを呼び込みます。

参考

|

関連する例

詳細