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 もリセットされます。