Simulink 関数のステートへのバインド
Simulink® 関数は、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。
Simulink 関数がステート内にある場合、関数はそのステートにバインドします。バインドすると、以下の動作が生じます。
関数呼び出しは、そのステートとそのサブステート内のステート アクションとステート遷移においてのみ行うことができます。
状態が入力されると、関数は有効になります。
状態が出力されると、関数は無効になります。
たとえば、以下の Stateflow チャートは、ステートにバインドする Simulink 関数を示しています。
関数 queue
はステート A1
にあるため、ステート A1
にバインドします。
ステート
A1
とそのサブステートA2
およびA3
は関数queue
を呼び出すことができますが、ステートB1
は呼び出すことができません。ステート
A1
が入力されると、queue
が有効になります。ステート
A1
が出力されると、queue
が無効になります。
Simulink 関数が無効である場合のサブシステム変数の制御
Simulink 関数がステートにバインドした場合は、サブシステム変数の値を前回の実行からの値に保持することも、初期値にリセットすることもできます。サブシステムについて目的の動作を選択するには、以下の手順に従います。
Simulink 関数で、トリガー端子をダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。
[イネーブル時の状態] の場合は以下のオプションを選択します。
オプション 説明 保持
前回の実行からのサブシステム変数の値を保持します。 リセット
サブシステム変数を初期値にリセットします。
ステートへの Simulink 関数のバインド
以下の例は、ステートへのバインド時に Simulink 関数の動作がどのようになるかを示しています。
関数 queue
には、関数が実行されるたびに 1 だけカウンターを増分するブロック線図が含まれています。
以下のように、トリガー端子の [ブロック パラメーター] ダイアログ ボックスが表示されます。
ダイアログ ボックスで、[サンプル時間タイプ] を [周期的]
に設定することで、[サンプル時間] フィールドを有効にします。その既定値は 1 です。この設定により、関数が有効な間に、[サンプル時間] フィールドで指定される各タイム ステップごとに実行するための関数が指定されます。
固定ステップ ソルバーを使用する場合、[サンプル時間] フィールドには、固定ステップ サイズの整数倍の値を指定しなければなりません。この制限は可変ステップ ソルバーに適用されません。詳細については、ソルバーの比較 (Simulink)を参照してください。
チャートのシミュレーション動作
チャートをシミュレーションを実行すると、以下のアクションが行われます。
チャートでステート
A1
へのデフォルト遷移が発生し、ローカル データu1
が 1 に設定されます。A1
が入力されると、関数queue
が有効になります。条件
after(5, sec)
が真になるまで、queue
の関数呼び出しが行われます。条件が true になると、ステート
A1
からB1
への遷移が発生します。A1
が出力されると、関数queue
が無効になります。さらに 2 秒が経過した後、
B1
からA1
への遷移が発生します。シミュレーションが終了するまで、手順 2 ~ 6 が繰り返されます。
変数が保持される場合の関数の動作
[イネーブル時の状態] を [保持]
に設定すると、出力 y1
が以下のようになります。
ステート A1 が t = 5 の時点で非アクティブになると、Simulink 関数はカウンター値を保持します。A1 が t = 7 の時点で再びアクティブになると、カウンターの値が t = 5 の時点と同じになります。このため、出力 y1
が時間の経過とともに増え続けます。
変数がリセットされる場合の関数の動作
[イネーブル時の状態] を [リセット]
に設定すると、出力 y1
が以下のようになります。
ステート A1 が t = 5 の時点で非アクティブになると、Simulink 関数はカウンター値を保持しません。A1 が t = 7 の時点で再びアクティブになると、カウンターがゼロにリセットされます。このため、出力 y1
もリセットされます。