ドット表記を使用したデータの識別
親ステートからデータ オブジェクトへのパスを指定するために、修飾データ名では "ドット表記" を使用します。ドット表記は、Stateflow® チャート階層の特定レベルにあるデータを識別するための手段です。修飾データ名の最初の部分は、親オブジェクトを識別します。後続の部分は、階層パスに沿って子を識別します。
たとえば、以下のチャートでは、シンボル data
は、ステート a
のサブステート aa
内に存在します。ステート アクションとトランザクション アクションは、修飾データ名を使用して、このシンボルを参照します。
デフォルト遷移では、アクションは、修飾データ名
a.aa.data
を使用して、チャートから最上位のステートa
へ、サブステートaa
へ、最後にdata
へのパスを指定します。ステート
a
では、entry アクションが修飾データ名aa.data
を使用して、サブステートaa
からdata
へのパスを指定します。ステート
b
では、entry アクションが修飾データ名a.aa.data
を使用して、チャートからステートa
へ、サブステートaa
へ、さらにdata
へのパスを指定します。
修飾データ名の解決
シミュレーション中、Stateflow は、チャート階層で一致するデータ オブジェクトの局所的な検索を実行することにより、修飾データ名を解決します。検索は、修飾データ名が存在する階層レベルから開始されます。
ステート アクションの場合、開始点はアクションを含むステートです。
遷移ラベルの場合、開始点は遷移元の親です。
解決プロセスでは、チャート階層の各レベルで、データへのパスを検索します。パスに一致するデータ オブジェクトがある場合、プロセスはそのデータ オブジェクトを一致候補のリストに追加します。その後、プロセスは階層の 1 つ上のレベルで検索を続けます。階層のチャート レベルの検索が終了すると、解決プロセスは停止します。一致が 1 つのみ存在する場合、修飾データ名は一致するパスに解決されます。それ以外の場合、解決プロセスは失敗します。シミュレーションは停止し、エラー メッセージが表示されます。
以下のフロー チャートは、修飾データ名を解決するプロセスのさまざまな段階を説明しています。
ドット表記を使用する場合のベスト プラクティス
修飾データ名の解決は、
すべてのデータの網羅的探索は行いません。
最初の一致が見つかった後も停止しません。
修飾データ名を解決するときに一意な検索結果が見つかる可能性を高くするには、次を行います。
修飾データ名で特定のパスを使用します。
ステートに一意の名前を付けます。
ステートやボックスを囲いとして使用して、パス解決の検索範囲を制限します。
修飾データ名解決の例
検索で一致が見つからない場合
次のチャートでは、ステート b
内の entry アクションに、修飾データ名 aa.data
が含まれています。シンボル data
がステート aa
内に存在する場合、Stateflow は修飾データ名を解決できません。
次の表は、修飾データ名 aa.data
の解決プロセスのさまざまな段階を示しています。
段階 | 説明 | 結果 |
---|---|---|
1 | ステート b から始めて、data を含むオブジェクト aa を検索します。 | 一致なし。 |
2 | 階層の 1 つ上のレベル (チャート レベル) に移動します。data を含むオブジェクト aa を検索します。 | 一致なし。 |
aa.data
の一致が検出されずに、検索はチャート レベルで終了し、エラーになります。
このエラーを回避するには、ステート b
の entry アクションで、より具体的な修飾データ名 a.aa.data
でデータを指定します。
検索で複数の一致が見つかる場合
次のチャートでは、ステート a
内の entry アクションに、修飾データ名 aa.data
の 2 つのインスタンスが含まれています。aa
という名前のステートの両方に data
という名前のデータ オブジェクトが含まれている場合、Stateflow は修飾データ名を解決できません。
次の表は、修飾データ名 aa.data
の解決プロセスのさまざまな段階を示しています。
段階 | 説明 | 結果 |
---|---|---|
1 | ステート a から始めて、data を含むオブジェクト aa を検索します。 | 一致あり。 |
2 | 階層の 1 つ上のレベル (チャート レベル) に移動します。data を含むオブジェクト aa を検索します。 | 一致あり。 |
aa.data
の一致が 2 つ検出されて、検索はチャート レベルで終了し、エラーになります。
このエラーを回避するには、次を行います。
より具体的な修飾データ名を使用します。たとえば、次のようになります。
ステート
a
のサブステート内のデータ オブジェクトを指定するには、修飾データ名a.aa.data
を使用します。最上位のステート
aa
内のデータ オブジェクトを指定するには、修飾データ名/aa.data
を使用します。
data
を含むステートのうちいずれかの名前を変更します。最上位のステート
aa
を、ボックスまたは別のステートで囲みます。囲いを追加することにより、検索プロセスは最上位のステート内のデータを検出しなくなります。