メインコンテンツ

Simulink ブロックの状態の初期化、リセット、終了

この例は、Initialize Function ブロックと Reset Function ブロックを使用して Discrete-Time Integrator ブロックの状態を初期化およびリセットする方法、Terminate Function ブロックを使用してイベント スケジュールに基づいて積分プロセスを終了する方法を示しています。

Initialize Function ブロック、Reset Function ブロック、Terminate Function ブロックを使用するモデル

ref_IRTFunctionBlocks モデルでは、Initialize Function ブロックを 1 つ、Reset Function ブロックを 2 つ、Terminate Function ブロックを 1 つ使用しています。2 つの Reset Function ブロックで Discrete-Time Integrator ブロックの 2 つの状態がリセットされます。

この例では、Initialize Function ブロックと Reset Function ブロックの内部の State Writer ブロックで Discrete-Time Integrator ブロックの状態を設定します。Terminate Function ブロックの内部の State Reader ブロックで Discrete-Time Integrator ブロックの状態を読み取ります。State Writer ブロックと State Reader ブロックを使用できるブロックの詳細については、State WriterおよびState Readerを参照してください。

  • Initialize Function ブロックは、Initialize Function ブロックが初期化関数呼び出しイベントを受け取ったときに、State Writer ブロックを使用して Discrete-Time Integrator ブロックの状態を設定します。

  • Reset Function ブロックは、Reset Function ブロックがリセット関数呼び出しイベントを受け取ったときに、State Writer ブロックを使用して Discrete-Time Integrator ブロックの状態をリセットします。

ref_IRTFunctionBlocks モデルのルート レベルで 2 つの Reset Function ブロックが使用されています。モデルの階層構造の同じレベルで Reset Function ブロックを複数使用するときは、それらの Reset Function ブロックについて、Event Listener ブロックの [イベント名] パラメーターに一意のイベント名を使用する必要があります。このモデルでは、Reset Integrator 1 ブロックについては [イベント名]resetIntegrator1Reset Integrator 2 ブロックについては resetIntegrator2 です。

  • Terminate Function ブロックは、終了関数呼び出しイベントを受け取ったときに積分を終了します。

詳細については、初期化関数、再初期化関数、リセット関数および終了関数の使用を参照してください。

モデルの動作

モデルは関数呼び出しイベントに基づいてシミュレートされ、データ ストアから Discrete-Time Integrator ブロックの状態値を使用します。

  • ref_IRTFunctionBlocks モデルは、ex_IRTFunctionBlocks モデルのルート レベルにある Model ブロックで参照されます。

  • 関数呼び出しイベントを生成する Stateflow® チャートを使用してイベント スケジューラがモデル化されます。関数呼び出しイベントに基づいてモデルが実行されます。

  • Discrete Integrator1 ブロックと Discrete Integrator2 ブロックは、それぞれ Input 1 および Input 2 という名前の Constant ブロックから入力を受け取ります。

  • Initialize Function ブロックと Reset Function ブロックは、Discrete-Time Integrator ブロックの状態をデータ ストア NVRAM から読み取ります。Terminate Function ブロックは、Discrete-Time Integrator ブロックの状態をデータ ストアに書き込みます。

イベント スケジューラを使用した関数呼び出しイベントのモデル化

Stateflow® チャートを使用して、初期化、リセット、終了の関数呼び出しイベントを生成するイベント スケジュールがモデル化されています。これらの関数呼び出しイベントで ex_IRTFunctionBlocks モデルの実行が制御されます。イベント スケジューラのモデル化と Model ブロックへのチャートの接続の詳細については、関数呼び出しを生成するテスト ハーネスの作成を参照してください。

データ ストアを使用した不揮発性メモリのモデル化

この例では、データ ストアを使用して、ex_IRTFunctionBlocks モデルのルート レベルで Discrete-Time Integrator ブロックの状態を格納する不揮発性メモリがモデル化されています。詳細については、データ ストアの基礎を参照してください。

データ ストアは Data Store Memory ブロックを使用して作成されます。getNVRAM 関数の内部の Data Store Read ブロックがデータ ストアから Discrete-Time Integrator ブロックの状態を読み取り、setNVRAM 関数の内部の Data Store Write ブロックがデータ ストアに書き込みます。データ ストアの作成の詳細については、データ ストアの作成によるグローバル データのモデル化を参照してください。このデータ ストアで使用しているSimulink.Bus NVRAM は、s1 および s2 という名前のSimulink.BusElementオブジェクトで構成されています。s1Discrete Integrator1 ブロックに対応し、s2Discrete Integrator2 ブロックに対応します。詳細については、Data Store MemoryData Store ReadData Store Writeを参照してください。

  • s1 の初期値は 5 に設定されています。s2 の初期値は -5 に設定されています。

  • 関数 getNVRAM は、Data Store Read ブロックを使用して Data Store Memory ブロックからデータを読み取ります。Initialize Function ブロックと Reset Function ブロックの内部の State Writer ブロックで、データ ストアからデータを取得して Discrete-Time Integrator ブロックの状態に書き込みます。

  • Terminate Function ブロックの内部の State Reader ブロックで、Discrete-Time Integrator ブロックの状態値を読み取ります。関数 setNVRAM は、Data Store Writer ブロックを使用して Data Store Memory ブロックにデータを書き込みます。

結果

関数呼び出しイベントに基づいてモデルが実行されます。Discrete-Time Integrator ブロックでは、前進オイラー累積積分法が使用されます。積分法の詳細については、Discrete-Time Integratorを参照してください。

Scope ブロックを使用して、異なるタイム ステップにおける 2 つの Discrete-Time Integrator ブロックの出力を表示できます。Discrete Integrator1 ブロックと Discrete Integrator2 ブロックの出力が Scope ブロックの 1 行目 (channel1) と 2 行目 (channel2) でそれぞれ表されます。

Scope ブロックの出力から以下を確認できます。

  • タイム ステップ 5 で、Initialize Function ブロックが Discrete Integrator1 ブロックの状態を 5、Discrete Integrator2 ブロックの状態を -5 に初期化します。

  • タイム ステップ 10 で、Reset Function ブロックが Discrete Integrator1 ブロックの状態を 5、Discrete Integrator2 ブロックの状態を -5 にリセットします。

  • タイム ステップ 15 で、Terminate Function ブロックが両方の Discrete-Time Integrator ブロックの積分プロセスを終了します。両方のブロックのタイム ステップ 14 で計算された状態値 (Discrete Integrator1 ブロックは 15、Discrete Integrator2 ブロックは -15) が Data Store Memory ブロックに書き込まれます。タイム ステップ 14 で計算された出力は、タイム ステップ 15 からタイム ステップ 19 までの出力を表します。

  • タイム ステップ 20 で、Initialize Function ブロックが再度トリガーされ、両方の Discrete-Time Integrator ブロックの状態が手順 3 で格納された状態値に初期化されます。

  • タイム ステップ 25 で、Reset Function ブロックが両方の Discrete-Time Integrator ブロックの状態を手順 3 で格納された状態値にリセットします。

  • タイム ステップ 30 で、Terminate Function ブロックが両方の Discrete-Time Integrator ブロックの積分プロセスを終了し、タイム ステップ 29 で計算された状態が Data Store Memory ブロックに書き込まれます。

参考

| | |

トピック