暗黙的イベントを使用したチャート動作の制御
"暗黙的イベント" は、次の場合にチャートの実行中に発生する組み込みイベントです。
チャートが起動する。
チャートがステートに入り、そのステートがアクティブになる。
チャートがステートから出て、そのステートが非アクティブになる。
チャートが内部データ オブジェクトに値を代入する。
これらのイベントは、明示的に定義またはトリガーされることのない暗黙的イベントです。暗黙的イベントはチャートの子に該当し、親チャートでのみ発生および認識されます。
チャートの実行に基づく暗黙的イベント
キーワード tick
は、離散時間シミュレーションでのチャートの起動時に生成される暗黙的イベントを指定します。
たとえば、次のチャートでは、Fan
と Heater
はパラレル (AND) ステートです。各ステートにはサブステートのペア (On
と Off
) があります。初期状態では、サブステート Fan.Off
および Heater.Off
はアクティブです。チャートが起動するたびに、tick
イベントが生成されます。3 番目の tick
は、Heater.Off
から Heater.On
への遷移をトリガーします。同様に、4 番目の tick
は Fan.Off
から Fan.On
への遷移をトリガーします。8 番目の tick
では、チャートは Fan.Off
および Heater.Off
に遷移して戻ります。
時相論理演算子 after
の詳細については、時相論理を使用したチャート実行の制御を参照してください。
メモ
tick
イベントは、評価対象のアクションを含むチャートを参照しています。イベントは、異なるチャートを参照できません。
データとステートに基づく暗黙的イベント
Simulink® モデルの Stateflow® チャートでは、次の演算子は、チャートが変数の値を設定した時点、またはチャートがステートに入るかステートから出た時点で、暗黙的イベントを生成します。
演算子 | 構文 | 説明 | 例 |
---|---|---|---|
change |
| チャートが変数 data_name の値を設定すると、暗黙的ローカル イベントを生成します。 | ステートまたは遷移アクションにより値が変数 change(Engine.rpm) |
enter |
| 指定したステート state_name がアクティブになると、暗黙的ローカル イベントを生成します。 | チャートの実行がステート enter(Fan.On) |
exit |
| 指定したステート state_name が非アクティブになると、暗黙的ローカル イベントを生成します。 | チャートの実行がステート exit(Fan.Off) |
複数のステートまたはデータ オブジェクトの名前が同じである場合は、ドット表記を使用してステート名を修飾します。詳細については、ドット表記を使用したデータの識別を参照してください。
たとえば、次のチャートでは、Fan
と Heater
はパラレル (AND) ステートです。各ステートにはサブステートのペア (On
と Off
) があります。初期状態では、サブステート Fan.Off
および Heater.Off
はアクティブです。チャートが起動すると、Fan.Off
から Fan.On
への遷移をトリガーする tick
イベントが生成されます。Fan.Off
が非アクティブになると、Heater.Off
から Heater.On
への遷移をトリガーする別の暗黙的イベントが生成されます。チャートの実行が終了すると、サブステート Fan.On
および Heater.On
はアクティブになります。
メモ
パラレル ステートで同じ暗黙的イベントが複数の遷移をトリガーする場合、遷移の実行順序はパラレル ステートの実行順序と一致するとは限りません。予期しない動作を回避し、パラレル ステートに対して指定された順序と同じ順序で遷移を実行するには、暗黙的イベントを使用しないでください。代わりに、in
や hasChanged
などの演算子を呼び出す遷移条件を使用してください。詳細については、in 演算子を使用したステート アクティビティのチェックおよびデータと式の値の変化の検出を参照してください。
参考
after
| change
| enter
| exit
| hasChanged
| in