Main Content

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

初期化関数、リセット関数および終了関数の使用

ブロックの中にはシミュレーションで使用する状態情報を保持するものがあります。たとえば、Unit Delay ブロックはブロックの現在の状態を使用して、次のシミュレーションのタイム ステップの出力信号の値を計算します。

Subsystem ブロックは既定の初期化ルーチンと終了ルーチンをもちます。Initialize Function ブロックと Terminate Function ブロックを使用した既定のルーチンにカスタム ルーチンを追加し、ブロックの状態を変更または読み取ることができます。これらの Function ブロックには次が含まれます。

  • 初期化または終了関数呼び出しイベントの受信時に結合されたルーチンを実行する Event Listener ブロック。

  • ブロックの状態量を初期化する State Writer ブロックと状態量を取得する State Reader ブロック。

状態をもつモデル コンポーネントの作成

Simulink® ブロックを使用してモデル アルゴリズムを定義できます。この例では、単一の Discrete-Time Integrator ブロックによって、入力信号を統合するためのアルゴリズムを定義します。

  1. 新しい Simulink モデルを開きます。このモデルを Model01 という名前で保存します。

  2. Discrete-Time Integrator ブロックを追加します。既定のパラメーター値として、1.0[ゲイン値] に、0[初期条件] に、[状態 (最も効率的)][初期条件設定] に、-1[サンプル時間] に設定されていることを確認します。

  3. Constant ブロックを Discrete-Time Integrator ブロックの入力に接続して、入力信号をモデル化します。Scope ブロックを出力信号に接続します。

  4. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。ソルバーのシミュレーション パラメーター [タイプ][固定ステップ] に、[ソルバー][自動] に、[固定ステップ サイズ]1 に設定します。

  5. Scope ブロックを開き、シミュレーションを実行します。出力信号は各タイム ステップで 1 ずつ増加します。

ブロックの状態の初期化

一部のモデル アルゴリズムに含まれている状態は初期化することができます。たとえば、センサーの値を読み取るアルゴリズムでは、センサーの初期状態を設定する計算を実行できます。

シミュレーションの最初に、State Writer ブロックを使用してブロックの状態を初期化します。初期化が発生するタイミングを制御するには、State Writer ブロックを含む Initialize Function ブロックを使用します。

  1. Initialize Function ブロックを追加します。

    既定では、Initialize Function ブロックには [イベント タイプ] パラメーターが [初期化] に設定された Event Listener ブロックが含まれます。ブロックには State Writer ブロックと、初期状態値のソースのプレースホルダーとして Constant ブロックも含まれます。

  2. モデルの初期条件。この例では、Constant ブロックの [定数値] パラメーターを 4 に設定します。

  3. 状態ライターを状態オーナーに接続します。[State Writer] ダイアログ ボックスを開きます。状態オーナー セレクター ツリーを展開して [Discrete-Time Integrator] を選択し、[適用] をクリックします。

    State Writer ブロックに状態オーナー ブロックの名前が表示されます。状態オーナー ブロックに State Writer ブロックへのリンクを示すタグが表示されます。タグの上のラベルをクリックすると、State Writer ブロックに移動するリンクが示されたリストが開きます。

  4. シミュレーションを実行し、モデルがエラーなしにシミュレートされることを確認します。

    Initialize Function ブロックはシミュレーションの最初に実行されます。出力信号は初期値 4 で開始され、シミュレーションの終わりまでに 1 ずつ増加します。

ブロックの状態のリセット

シミュレーション中は、State Writer ブロックを使用してブロックの状態をリセットできます。リセットが発生するタイミングを制御するには、Reset Function ブロックに対して再構成する Initialize Function ブロックを使用します。

  1. Initialize Function ブロックを追加します。

  2. 新しい Initialize Function ブロックを開きます。

  3. リセット用にブロックを構成します。Event Listener ブロックのブロック パラメーターのダイアログ ボックスを開きます。[イベント タイプ] ドロップダウン リストから [リセット] を選択します。[イベント名] ボックスで、イベント名を入力します。たとえば、「reset」と入力します。ダイアログ ボックスを閉じます。

  4. モデルのリセット条件。この例では、Constant ブロックの [定数値] パラメーターを 2 に設定します。

  5. 状態ライターを状態オーナーに接続します。[State Writer] ダイアログ ボックスを開きます。状態オーナー セレクター ツリーを展開して [Discrete-Time Integrator] を選択し、[適用] をクリックします。

  6. 最上位レベルの Model01 に移動します。ブロックの名前を Initialize Function1 から Reset Function に変更します。

    モデルを更新すると、Reset Function ブロックのイベント名がブロック上に表示されます。

    タグ上をクリックすると、Initialize Function ブロックと Reset Function ブロックに配置された State Writer ブロックに移動するリンクが示されたリストが開きます。

  7. シミュレーションを実行し、モデルがエラーなしにシミュレートされることを確認します。

    シミュレーション中は Reset Function ブロックは実行されません。関数呼び出しイベント信号が必要です。

    Reset Function ブロックの関数呼び出しイベント信号を作成するには、関数呼び出しを生成するテスト ハーネスの作成を参照してください。

ブロックの状態の読み取りと保存

シミュレーションの最後に、ブロックの状態を読み取り、その状態を保存することができます。

  1. Terminate Function ブロックを追加します。

    既定では、Terminate Function ブロックには [イベント タイプ] パラメーターが [終了] に設定された Event Listener ブロックが含まれます。ブロックには State Reader ブロックと、状態値を保存するためのプレースホルダーとして Terminator ブロックも含まれます。

  2. 状態リーダーを状態オーナーと接続します。[State Reader] ダイアログ ボックスを開きます。状態オーナー セレクター ツリーから [Discrete-Time Integrator] を選択し、[適用] をクリックします。

  3. シミュレーションを実行し、モデルがエラーなしにシミュレートされることを確認します。Terminate Function ブロックはシミュレーションの最後に実行されます。

  4. テスト用に追加したブロックを削除します。Constant ブロックを Inport ブロックで置き換え、Scope ブロックを Outport ブロックで置き換えます。

テスト用のモデル コンポーネントの準備

以下の変更を加えて、シミュレーション テスト用にコンポーネント モデルがエクスポート関数モデルに配置されたときのシミュレーション エラーを回避します。

  1. Discrete-Time Integrator ブロックの [ブロック パラメーター] ダイアログ ボックスを開きます。[積分手法][累積:前進型オイラー] に設定します。

  2. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。ソルバーの [タイプ][固定ステップ] に、[ソルバー][自動] に設定されていることを確認します。[固定ステップ サイズ]1 から auto に変更します。

    この変更によって、Function-Call Subsystem に複数のサンプル時間をもつことで引き起こされるシミュレーション エラーが回避されます。

エクスポート関数モデルの作成

初期化関数、リセット関数および終了関数のテスト用にモデル コンポーネントをテスト ハーネスに配置する場合、モデルはエクスポート関数ルールに従わなければなりません。エクスポート関数モデルの概要および関数呼び出しを生成するテスト ハーネスの作成を参照してください。

エクスポート関数モデルを作成するには、Model ブロックを使用してモデル コンポーネントを Function-Call Subsystem ブロックに配置します。入力端子と出力端子をモデルからサブシステムの入力端子と出力端子に接続します。

  1. Simulink モデルを作成します。このモデルを Model02 という名前で保存します。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。ソルバーのシミュレーション パラメーター [タイプ][固定ステップ] に設定します。[ソルバー][自動] に、[固定ステップ サイズ]auto に設定されていることを確認します。

  3. Function-Call Subsystem ブロックを追加します。ブロックをダブルクリックしてサブシステムを開きます。

  4. Model ブロックをサブシステムに追加し、[モデル名]Model01 に設定します。Inport ブロックおよび Outport ブロックを追加します。

  5. モデルの最上位レベルに移動します。

  6. Inport ブロックを追加します。このブロックは、サブシステムの実行に関する制御信号です。ブロックの名前を Run に変更し、それを function() 端子に接続します。

    Inport ブロックのダイアログ ボックスを開き、[信号属性] タブで [関数呼び出しの出力] チェック ボックスをオンにします。

  7. 2 番目の Inport ブロックを追加し、名前を Signal In に変更します。それをサブシステムの In1 端子に接続します。このブロックは積分アルゴリズムの信号です。

    Outport ブロックを追加し、名前を Signal Out に変更します。その後、それをサブシステムの Out1 端子に接続します。このブロックは統合された信号です。

  8. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[モデル参照] ペインで、[最上位モデルごとに可能なインスタンスの総数][1] に設定します。

  9. Ctrl-D を押してモデルを更新し、エラーが表示されないことを確認します。

次の手順でテスト ハーネスを作成します。関数呼び出しを生成するテスト ハーネスの作成を参照してください。

参考

ブロック

関連するトピック