Main Content

暗黙的イベントを使用したチャート動作の制御

"暗黙的イベント" は、次の場合にチャートの実行中に発生する組み込みイベントです。

  • チャートが起動する。

  • チャートがステートに入り、そのステートがアクティブになる。

  • チャートがステートから出て、そのステートが非アクティブになる。

  • チャートが内部データ オブジェクトに値を代入する。

これらのイベントは、明示的に定義またはトリガーされることのない暗黙的イベントです。暗黙的イベントはチャートの子に該当し、親チャートでのみ発生および認識されます。

チャートの実行に基づく暗黙的イベント

キーワード tick は、離散時間シミュレーションでのチャートの起動時に生成される暗黙的イベントを指定します。

たとえば、次のチャートでは、FanHeater はパラレル (AND) ステートです。各ステートにはサブステートのペア (OnOff) があります。初期状態では、サブステート Fan.Off および Heater.Off はアクティブです。チャートが起動するたびに、tick イベントが生成されます。3 番目の tick は、Heater.Off から Heater.On への遷移をトリガーします。同様に、4 番目の tickFan.Off から Fan.On への遷移をトリガーします。8 番目の tick では、チャートは Fan.Off および Heater.Off に遷移して戻ります。

Stateflow chart that uses the implicit event tick.

時相論理演算子 after の詳細については、時相論理を使用したチャート実行の制御を参照してください。

メモ

tick イベントは、評価対象のアクションを含むチャートを参照しています。イベントは、異なるチャートを参照できません。

データとステートに基づく暗黙的イベント

Simulink® モデルの Stateflow® チャートでは、次の演算子は、チャートが変数の値を設定した時点、またはチャートがステートに入るかステートから出た時点で、暗黙的イベントを生成します。

演算子構文説明
change

change(data_name)

chg(data_name)

チャートが変数 data_name の値を設定すると、暗黙的ローカル イベントを生成します。

ステートまたは遷移アクションにより値が変数 Engine.rpm に書き込まれたときの暗黙的ローカル イベントを定義します。

change(Engine.rpm)

enter

enter(state_name)

en(state_name)

指定したステート state_name がアクティブになると、暗黙的ローカル イベントを生成します。

チャートの実行がステート Fan.On に入った時点で発生する暗黙的ローカル イベントを定義します。

enter(Fan.On)

exit

exit(state_name)

ex(state_name)

指定したステート state_name が非アクティブになると、暗黙的ローカル イベントを生成します。

チャートの実行がステート Fan.Off から出た時点で発生する暗黙的ローカル イベントを定義します。

exit(Fan.Off)

複数のステートまたはデータ オブジェクトの名前が同じである場合は、ドット表記を使用してステート名を修飾します。詳細については、ドット表記を使用したデータの識別を参照してください。

たとえば、次のチャートでは、FanHeater はパラレル (AND) ステートです。各ステートにはサブステートのペア (OnOff) があります。初期状態では、サブステート Fan.Off および Heater.Off はアクティブです。チャートが起動すると、Fan.Off から Fan.On への遷移をトリガーする tick イベントが生成されます。Fan.Off が非アクティブになると、Heater.Off から Heater.On への遷移をトリガーする別の暗黙的イベントが生成されます。チャートの実行が終了すると、サブステート Fan.On および Heater.On はアクティブになります。

Stateflow chart that uses the implicit event exit.

メモ

パラレル ステートで同じ暗黙的イベントが複数の遷移をトリガーする場合、遷移の実行順序はパラレル ステートの実行順序と一致するとは限りません。予期しない動作を回避し、パラレル ステートに対して指定された順序と同じ順序で遷移を実行するには、暗黙的イベントを使用しないでください。代わりに、inhasChanged などの演算子を呼び出す遷移条件を使用してください。詳細については、in 演算子を使用したステート アクティビティのチェックおよびデータと式の値の変化の検出を参照してください。

参考

| | | | |

関連するトピック