bind アクションによる Function-Call Subsystem の制御
bind アクションを使用すると、指定されたデータおよびイベントをステートにバインドできます。ステートにバインドされたイベントは、ステートまたはその子のアクションによってのみブロードキャストが可能です。Function-Call イベントをステートにバインドして、イベントがトリガーする Function-Call Subsystem を有効または無効にすることも可能です。Function-Call Subsystem は、バインドされたイベントを含むステートへ入った場合に有効になり、このステートから出た場合に無効になります。Function-Call Subsystem の実行は、呼び出し元のステートのアクティビティに完全にバインドされています。
Function-Call Subsystem のステートへのバインド
既定の設定では、Function-Call Subsystem は、関連する関数呼び出し出力イベントが定義されているチャートによって制御されます。この関連付けは、Function-Call Subsystem はチャートが起動したときに有効になり、チャートがスリープ状態に移行するまでアクティブなままであることを意味します。さらに詳細に制御するには、bind アクションを使用して、Function-Call Subsystem をチャート階層内のステートにバインドします (bind アクションを参照)。
関数呼び出し出力イベントをステートにバインドできます。このタイプのバインドを設定すると、イベントによって呼び出される Function-Call Subsystem もステートにバインドされます。この場合、Function-Call Subsystem は、ステートへの入力が発生したときに有効になり、ステートからの出力が発生したときに無効になります。
Function-Call Subsystem をステートにバインドする際、以下の節の説明に従って、有効および無効な場合のサブシステムの動作を微調整できます。
サブシステムが無効な場合の出力の処理
Function-Call Subsystem が無効な場合は実行されませんが、その出力信号はモデル内の他のブロックで使用できます。Function-Call Subsystem がステートにバインドされている場合は、前のタイム ステップからの値で出力を保持することも、Function-Call Subsystem が無効な場合の初期値に出力をリセットすることも可能です。以下の手順に従います。
サブシステムの Outport ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。

[ディセーブル時の出力] の場合は以下のオプションを選択します。
選択 目的 保持最新の出力値を保持 リセット出力を初期値にリセット [OK] をクリックし、設定を記録します。
メモ
[ディセーブル時の出力] の設定は、Function-Call Subsystem のステートへのバインド で説明するように、Function-Call Subsystem がステートにバインドされている場合にのみ有効です。
Function-Call Subsystem が有効な場合でのステートの動作の制御
Function-Call Subsystem がステートにバインドされている場合は、前のタイム ステップからの値で Function-Call Subsystem の状態変数を保持することも、Function-Call Subsystem の実行時の初期条件に状態変数をリセットすることも可能です。この方法では、バインド ステートは Function-Call Subsystem の状態変数を完全に制御することになります。以下の手順に従います。
サブシステムのトリガー端子をダブルクリックし、[ブロック パラメーター ダイアログ] ボックスを開きます。

[イネーブル時の状態] の場合は以下のオプションを選択します。
選択 目的 保持トリガー端子を含む Function-Call Subsystem の状態を最新値に保持。 リセットトリガー端子を含む Function-Call Subsystem の状態を初期条件に戻す。 継承この設定を関数呼び出しイニシエーターの親サブシステムから継承。イニシエーターの親がモデルの root に該当する場合は、継承した設定が保持されます。トリガーに複数のイニシエーターが存在している場合は、すべてのイニシエーターの親で設定が同じでなければなりません (すべて
[保持]またはすべて[リセット])。[OK] をクリックし、設定を記録します。
メモ
[イネーブル時の状態] の設定は、Function-Call Subsystem のステートへのバインド で説明するように、Function-Call Subsystem がステートにバインドされている場合にのみ有効です。
Function-Call Subsystem のステートへのバインド
以下のモデルは、チャートのステートにバインドするトリガー イベント E によって、Function-Call Subsystem をトリガーします。このモデルは、固定ステップ サイズ 1 の固定ステップ ソルバーを使用しています。

チャートには 2 つのステートが含まれています。イベント E は、次のアクションでステート A にバインドします。
bind:E
イベント E は、スコープが Output to Simulink、トリガー タイプが function-call のチャートに対して定義されています。

上記の Function-Call Subsystem は、トリガー端子ブロック、入力端子、出力端子、およびシンプルなブロック線図で構成されています。ブロック線図は、Unit Delay ブロックを使用して、タイム ステップごとにカウンターを 1 増分します。

トリガー端子の [ブロック パラメーター] ダイアログ ボックスには、以下の設定が含まれています。
トリガー タイプ:
function-call。イネーブル時の状態:
reset。この設定では、有効な場合に Function-Call Subsystem の状態値がゼロにリセットされます。サンプル時間タイプ:
triggered。この設定では、Function-Call Subsystem は有効な場合に、呼び出し元のイベントによってトリガーされたときにのみ実行されます。
[サンプル時間タイプ] を periodic に設定すると、その下の [サンプル時間] フィールド (既定値 1) が有効になります。この設定により、Function-Call Subsystem は、それが有効な間、[サンプル時間] フィールドで指定されたタイム ステップごとに実行されます。これを行うには、Function-Call Subsystem の呼び出し元イベントをバインドするステートは、[サンプル時間] フィールドで指定されたサンプリング レートと一致するタイム ステップのイベントを送信しなければなりません。ステートは、シミュレーションのサンプル レートで entry アクションまたは during アクションを含むイベントを送信できます。
固定ステップ サンプリングの場合、[サンプル時間] 値には、固定ステップ サイズの整数倍を指定しなければなりません。
可変ステップ サンプリングの場合、[サンプル時間] 値には制限がありません。
バインドされた Function-Call Subsystem をステートがどのように制御するのかを確認するには、モデルのシミュレーションを開始します。
時間 t = 0 で、ステート
Aへのデフォルト遷移が発生します。ステートAが自身の bind アクションと entry アクションを実行します。bind アクションは、イベントEをステートAにバインドし、Function-Call Subsystem を有効にして、その状態変数を 0 にリセットします。entry アクションは Function-Call Subsystem をトリガーし、そのブロック線図を実行します。ブロック線図は、Unit Delay ブロックを使用してカウンターを 1 増分します。Unit Delay ブロックは値 0 を出力し、サブシステムが次回呼び出されるまで新しい値 1 を保持します。時間 t = 1 で、モデルの次回の更新イベントは、ステート
Aの出力遷移をテストします。ステートBへの遷移は発生しません。時相演算子after(10,tick)では、更新イベントが 10 回受信された時点で初めて遷移の実行が可能になるためです。ステートAがアクティブなままとなり、その during アクションによって Function-Call Subsystem がトリガーされます。Unit Delay ブロックは、保持している値 1 を出力します。サブシステムも自身のカウンターを増分して値 2 を生成します。この値が、次回実行がトリガーされるまで、Unit Delay ブロックによって保持されます。次の 8 回の更新イベントで、サブシステムの出力はタイム ステップごとに 1 増分します。
時間 t = 10 で、ステート
AからステートBへの遷移が発生します。ステートAへのバインドは非アクティブになっているため、Function-Call Subsystem は無効であり、出力は 0 に戻ります。時間 t = 11 で、ステート
BからステートAへの遷移が発生します。再度、bind アクションによって Function-Call Subsystem が有効になります。その後の更新イベントで、サブシステムの出力はタイム ステップごとに 1 インクリメントします。これが、時間 t = 21 でステートBへの次の遷移が発生するまで続きます。

バインドによるトリガー イベントの多重化の回避
イベントをバインドすると、チャート内の単一のステートに Function-Call Subsystem の制御が与えられます。Mux による Function-Call Subsystem のトリガーを他のイベントに対して許可した場合は、この制御は動作しません。たとえば、以下のモデルは、Mux ブロックを使用して Function-Call Subsystem をトリガーする 2 つの関数呼び出しイベントを定義しています。

チャートでは、E1 はステート A にバインドしますが、E2 はバインドしません。ステート B は、その entry アクションでトリガー イベント E2 を送信します。

このモデルをシミュレートすると、ステート A からステート B への遷移が発生したときに、出力はリセットされません。

MuxによりFunction-Call Subsystem に対して複数のトリガー イベントを設定している場合は、バインドは推奨されません。トリガー イベントを多重化すると、イベントのバインドが妨げられて、予期しない動作が発生する可能性があります。