ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

"暗黙的イベント" は、チャートが以下の処理を実行した時に発生する組み込みイベントです。

  • チャートの起動

  • ステートへの入力

  • ステートからの出力

  • 内部データ オブジェクトに対する値の割り当て

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

暗黙的イベントのキーワード

暗黙的イベントを参照する場合は、アクション ステートメントで以下の構文を使用します。

event(object)

event は暗黙的イベントの名前であり、object はイベントが発生したステートまたはデータです。

以下の各キーワードは、ステートおよび遷移に対応するアクション言語の表記法に基づいて、暗黙的イベントを生成します。

暗黙的イベント

意味

change(data_name) または chg(data_name)

Stateflow® ソフトウェアが変数 data_name に対して値を書き込んだときに、ローカル イベントを指定して暗黙的に生成します。Simulink® モデルの Stateflow チャートでのみサポートされます。

変数の data_name は、マシンを親とするデータになることはできません。この暗黙的イベントは階層のチャート レベル またはより低いレベルのデータでのみ動作します。マシンを親とするデータは、変化検出演算子を使用して、いつデータ値が変化するかを見つけ出します。詳細については、データ値の変化の検出を参照してください。

enter(state_name) または en(state_name)

指定された state_name が入力されたときに、ローカル イベントを指定して暗黙的に生成します。Simulink モデルの Stateflow チャートでのみサポートされます。

exit(state_name) または ex(state_name)

指定された state_name が出力されたときに、ローカル イベントを指定して暗黙的に生成します。Simulink モデルの Stateflow チャートでのみサポートされます。

tick

評価対象のアクションのチャートが起動したときに、ローカル イベントを指定して暗黙的に生成します。

wakeup

tick と等価です。Simulink モデルの Stateflow チャートでのみサポートされます。

同じ名前の複数のオブジェクトが存在する場合は、ドット演算子を使用して、オブジェクトの名前をその親の名前で修飾してください。以下の例は、暗黙的イベントに対する有効な参照です。

enter(switch_on)
en(switch_on)
change(engine.rpm)

メモ

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

暗黙的イベントを使用したステート間の遷移

以下は、暗黙的な tick イベントの使用例を示しています。

FanHeater は、パラレル (AND) スーパーステートです。イベントが Stateflow チャートを最初に起動したときに、ステート Fan.OffHeater.Off がアクティブになります。

離散時間シミュレーションを実行すると仮定します。チャートが起動するたびに、tick イベントのブロードキャストが発生します。4 回のブロードキャスト後に、Fan.Off から Fan.On への遷移が発生します。同様に、3 回のブロードキャスト後に、Heater.Off から Heater.On への遷移が発生します。

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

暗黙的イベントをもつ遷移の実行順序

以下を仮定します。

  • チャートにパラレル ステートが含まれています。

  • 複数のパラレル ステートで、あるサブステートから別のサブステートへの遷移をガードするために、同じ暗黙的イベントが使用されています。

同じタイム ステップで複数の遷移が有効な場合、遷移はチャートに作成された順番で実行されます。この順序は、遷移を含むパラレル ステートがアクティブになった順序とは必ずしも一致する必要はありません。たとえば、以下のチャートを考えます。

IV.HERE から IV.THERE への遷移が発生する場合、条件 ex(IV.HERE) はパラレル ステート I、II、および III の A から B への遷移に対して有効です。A から B へのこの 3 つの遷移は、作成された順序で実行されます。つまり、まずステート I、次にステート II、最後にステート III です。この順序は、これらのステートがアクティブになった順序とは一致しません。

有効な遷移をパラレル ステートがアクティブになったのと同じ順序で実行するには、暗黙的な enter イベントや exit イベントの代わりに in 演算子を使用します。

この変更によって、A から B への遷移が、パラレル ステートがアクティブになった順序で実行されるようになります。in 演算子の詳細は、in 演算子を使用したステート アクティビティのチェックを参照してください。