Main Content

Simulink 関数のステートへのバインド

Simulink® 関数は、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。

Simulink 関数がステート内にある場合、関数はそのステートにバインドします。バインドすると、以下の動作が生じます。

  • 関数呼び出しは、そのステートとそのサブステート内のステート アクションとステート遷移においてのみ行うことができます。

  • 状態が入力されると、関数は有効になります。

  • 状態が出力されると、関数は無効になります。

たとえば、以下の Stateflow チャートは、ステートにバインドする Simulink 関数を示しています。

Stateflow chart with a Simulink function inside a state.

関数 queue はステート A1 にあるため、ステート A1 にバインドします。

  • ステート A1 とそのサブステート A2 および A3 は関数 queue を呼び出すことができますが、ステート B1 は呼び出すことができません。

  • ステート A1 が入力されると、queue が有効になります。

  • ステート A1 が出力されると、queue が無効になります。

Simulink 関数が無効である場合のサブシステム変数の制御

Simulink 関数がステートにバインドした場合は、サブシステム変数の値を前回の実行からの値に保持することも、初期値にリセットすることもできます。サブシステムについて目的の動作を選択するには、以下の手順に従います。

  1. Simulink 関数で、トリガー端子をダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。

  2. [イネーブル時の状態] の場合は以下のオプションを選択します。

    オプション説明
    保持前回の実行からのサブシステム変数の値を保持します。
    リセットサブシステム変数を初期値にリセットします。

ステートへの Simulink 関数のバインド

以下の例は、ステートへのバインド時に Simulink 関数の動作がどのようになるかを示しています。

Stateflow chart with a Simulink function inside a state.

関数 queue には、関数が実行されるたびに 1 だけカウンターを増分するブロック線図が含まれています。

Simulink subsystem with a unit delay block.

以下のように、トリガー端子の [ブロック パラメーター] ダイアログ ボックスが表示されます。

Block Parameters dialog box for a trigger port.

ダイアログ ボックスで、[サンプル時間タイプ][周期的] に設定することで、[サンプル時間] フィールドを有効にします。その既定値は 1 です。この設定により、関数が有効な間に、[サンプル時間] フィールドで指定される各タイム ステップごとに実行するための関数が指定されます。

固定ステップ ソルバーを使用する場合、[サンプル時間] フィールドには、固定ステップ サイズの整数倍の値を指定しなければなりません。この制限は可変ステップ ソルバーに適用されません。詳細については、ソルバーの比較 (Simulink)を参照してください。

チャートのシミュレーション動作

Stateflow chart with a Simulink function inside a state.

チャートをシミュレーションを実行すると、以下のアクションが行われます。

  1. チャートでステート A1 へのデフォルト遷移が発生し、ローカル データ u1 が 1 に設定されます。

  2. A1 が入力されると、関数 queue が有効になります。

  3. 条件 after(5, sec) が真になるまで、queue の関数呼び出しが行われます。

  4. 条件が true になると、ステート A1 から B1 への遷移が発生します。

  5. A1 が出力されると、関数 queue が無効になります。

  6. さらに 2 秒が経過した後、B1 から A1 への遷移が発生します。

  7. シミュレーションが終了するまで、手順 2 ~ 6 が繰り返されます。

変数が保持される場合の関数の動作

[イネーブル時の状態][保持] に設定すると、出力 y1 が以下のようになります。

Scope showing simulation results when property States when enabling is set to held.

ステート A1 が t = 5 の時点で非アクティブになると、Simulink 関数はカウンター値を保持します。A1 が t = 7 の時点で再びアクティブになると、カウンターの値が t = 5 の時点と同じになります。このため、出力 y1 が時間の経過とともに増え続けます。

変数がリセットされる場合の関数の動作

[イネーブル時の状態][リセット] に設定すると、出力 y1 が以下のようになります。

Scope showing simulation results when property States when enabling is set to reset.

ステート A1 が t = 5 の時点で非アクティブになると、Simulink 関数はカウンター値を保持しません。A1 が t = 7 の時点で再びアクティブになると、カウンターがゼロにリセットされます。このため、出力 y1 もリセットされます。

関連するトピック