Main Content

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

編集時のモデリング エラーの検出

編集時のチェックが有効にされている場合、チャートの作業を行う際に Stateflow® エディターによって潜在的なエラーや警告が検出されます。これらの問題を設計プロセスの早期に解決することで、コンパイル時や実行時の警告およびエラーを回避できます。

Stateflow エディターで、編集時のチェックに違反するオブジェクトが赤 (エラー) またはオレンジ (警告) で強調表示されます。強調表示されたオブジェクトにカーソルを合わせてエラーまたは警告のバッジをクリックすると、ツールヒントには詳細と、考えられる解決方法が表示されます。

編集時のチェックの管理

既定では、編集時のチェックと構文エラーの強調表示は有効にされています。編集時のチェックを無効にするには、[デバッグ] タブで、[診断][編集時のエラーと警告] チェック ボックスをオフにします。

次の表は、[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断][Stateflow] ペインの診断のコンフィギュレーション パラメーターに関連付けられた編集時のチェックの一覧です。

これらの編集時のチェックについて、診断アクションのレベルを制御するには、そのコンフィギュレーション パラメーターの値を [エラー][警告][なし] のいずれかに設定します。コンフィギュレーション パラメーターの設定を変更すると、対応する編集時のチェックの診断レベルも変更されます。たとえば、[到達不能の実行パス] コンフィギュレーション パラメーターを none に設定した場合、Stateflow エディターで未接続の遷移、遷移の優先順位低下、および到達不能なステートは強調表示されません。

ステートの編集時チェック

無効な交差

  • 問題点: Stateflow エディターでステートおよびジャンクションがオーバーラップしてはなりません。

  • 診断レベル: エラー。

  • 解決法: ステートとジャンクションを分離して交差を回避します。

パラレル ステートのリーフ ステート アクティビティまたは子ステート アクティビティを監視

  • 問題点: パラレル (AND) 構造をもつチャートおよびステートでは、パラレル サブステートが同時にアクティブになるため、リーフ ステートや子ステートのアクティビティの監視はサポートされません。

  • 診断レベル: 警告。

  • 解決法: プロパティ インスペクターまたはモデル エクスプローラーを開きます。[監視する出力の作成] チェック ボックスをオフにするか、ドロップダウン リストから [自己アクティビティ] を選択します。詳細については、アクティブ ステート データによるステート アクティビティの監視を参照してください。

オブジェクトに構文エラーがある

  • 問題点: Stateflow 構文ルールに従っていないステート アクションがあります。Stateflow エディターでは、構文エラーに赤の波線が引かれます。

  • 診断レベル: エラー。

  • 解決法: ステート アクションの構文エラーを修正します。詳細については、ステートのラベルを参照してください。

    メモ

    親チャートでは、構文エラーのあるサブチャートが赤で強調表示され、エラー バッジによって構文の問題が示されます。サブチャートのエディターでは、構文エラーが赤の波線で表示されますが、問題を示すバッジはありません。

到達不能なステート

  • 問題点: あるステートに通じる有効な実行パスがないため、そのステートが "到達不能" です。

  • 診断レベル: コンフィギュレーション パラメーター到達不能の実行パスによって異なります。

  • 解決法: 到達不能なステートを、到達可能なステートまたはジャンクションからの遷移に接続します。

遷移での編集時チェック

未接続の遷移

  • 問題点: すべての遷移には、有効な遷移先ステートかジャンクションがなくてはなりません。

  • 診断レベル: コンフィギュレーション パラメーター到達不能の実行パスによって異なります。

  • 解決法: 遷移をステートまたはジャンクションに接続します。詳細については、遷移を参照してください。

デフォルト遷移が見つからない

  • 問題点: 排他的 (OR) 構造と少なくとも 2 つのサブステートまたはジャンクションを含むチャートやステートでは、実行の開始位置を示すためにデフォルト遷移が必要です。

  • 診断レベル: エラー。

  • 解決法: デフォルト遷移を追加して開始ステートを指定します。詳細については、デフォルト遷移を参照してください。

デフォルト遷移パスがステートで終了しない

  • 問題点: 排他的 (OR) 構造と、少なくとも 1 つのサブステートをもつチャートまたはステートでは、次のことが必要です。

    • デフォルト遷移に沿ったすべてのパスはサブステートにつながらなければならない

    • 条件で保護されていないか、イベントでトリガーされるデフォルト遷移パスが 1 つなければならない

  • 診断レベル: コンフィギュレーション パラメーター無条件のデフォルト遷移がないによって異なります。

  • 解決法: デフォルト遷移に沿ったすべてのパスをサブステートで終了します。1 つのデフォルト遷移が、条件で保護されておらず、かつイベントによりトリガーされないことを確認します。

無効なデフォルト遷移パス

  • 問題点: デフォルト遷移パスは親ステートから出ることはできません。

  • 診断レベル: エラー。

  • 解決法: デフォルト遷移パスを変更して親ステート内にとどまるようにします。

グラフィカル関数に入る無効な遷移

  • 問題点: 遷移はグラフィカル関数に入ることはできません。Stateflow チャートはグラフィカル関数をステート アクションまたは遷移から呼び出します。

  • 診断レベル: エラー。

  • 解決法: グラフィカル関数に入る遷移を削除します。

オブジェクトに構文エラーがある

  • 問題点: 遷移内の条件またはアクションが、Stateflow の構文ルールに従っていません。Stateflow エディターでは、構文エラーに赤の波線が引かれます。

  • 診断レベル: エラー。

  • 解決法: 遷移条件またはアクションの構文エラーを修正します。詳細については、遷移ラベル表記法を参照してください。

このパスには条件アクションの前に遷移アクションがある

  • 問題点: 遷移アクションがあり、後続の遷移に条件アクションがある場合、これらのアクションは遷移の順序では実行されません。Stateflow チャートは、関連付けられている条件が真と評価されたときに条件アクションを実行します。これとは対照的に、チャートが遷移アクションを実行するのは、遷移パスが完全に実行されたときのみです。その結果、チャートが遷移パスを実行すると、条件アクションが遷移アクションより前に発生します。

  • 診断レベル: コンフィギュレーション パラメーター条件アクションの前に指定された遷移アクションによって異なります。

  • 解決法: 遷移アクションをパスの最後の条件アクションの後に置きます。

遷移がパラレル ステートで開始または終了する

  • 問題点: パラレル (AND) 構造のチャートやステートで、兄弟関係にあるすべてのステートが同時にアクティブ、または同時に非アクティブになっています。

  • 診断レベル: 警告。

  • 解決法: 遷移を削除するか、親ステートの構造を排他 (OR) に変更します。

遷移がボックスに接続する

  • 問題点: 遷移はステートおよびジャンクションにのみ接続できます。

  • 診断レベル: エラー。

  • 解決法: ボックスに接続している遷移を移動または削除します。

遷移がパラレル ステートにまたがっている

  • 問題点: スタンドアロンの Stateflow チャートは、パラレル ステートの境界をまたぐ遷移をサポートしていません。

  • 診断レベル: エラー。

  • 解決法: パラレル ステートへの、またはパラレル ステートからの境界をまたぐ遷移を削除します。

遷移がグラフィカル関数に出入りしている

  • 問題点: 遷移はグラフィカル関数から出ることはできません。グラフィカル関数内のフロー チャートは、関数内に完全に含まれていなければなりません。

  • 診断レベル: エラー。

  • 解決法: グラフィカル関数から出る遷移を削除します。

自然な親を外れた遷移ループ

  • 問題点: 遷移元と遷移先の間で遷移が親ステートの外に出る場合、遷移先ステートがアクティブになる前に、チャートが親ステートの exit アクションと entry アクションを実行します。

  • 診断レベル: コンフィギュレーション パラメーター自然な親以外からの遷移によって異なります。

  • 解決法: 遷移を移動し、親ステートに含まれるようにします。

遷移の優先順位低下

  • 問題点: 同じ遷移元からの他の出力遷移の前に無条件遷移が実行されると、これによって他の遷移の実行が妨げられます。

  • 診断レベル: コンフィギュレーション パラメーター到達不能の実行パスによって異なります。

  • 解決法: 各ステートまたはジャンクションからの無条件遷移は 1 つのみ作成します。無条件遷移がどの条件付き遷移よりも後に実行されるように明示的に指定します。詳細については、遷移の評価順序を参照してください。

during アクションまたは子ステートをもつステート外の無条件パス

  • 問題点: ステートから外に出る無条件遷移により、ステート内の during アクションと、子ステートへのデフォルト遷移の実行が抑制されます。

  • 診断レベル: コンフィギュレーション パラメーター自然な親以外からの遷移によって異なります。

  • 解決法: 遷移の条件を追加するか、ステートから during アクションと子ステートを削除します。

ジャンクションでの編集時チェック

遷移アクションをもつ遷移がサイクルに含まれる

  • 問題点: 遷移アクションをもつ遷移をサイクルに含めることはできません。

  • 診断レベル: エラー。

  • 解決法: 遷移アクションを削除するか、遷移を削除してサイクルを削除します。

無効なヒストリ ジャンクション

  • 問題点: ヒストリ ジャンクションは次の場合に "無効" になります。

    • ヒストリ ジャンクションが階層のチャート レベルに含まれている。

    • ヒストリ ジャンクションがパラレル (AND) 構造をもつステートに含まれている。

    • ヒストリ ジャンクションがグラフィカル関数内に含まれている。

    • 同じステートに複数のヒストリ ジャンクションが含まれている。

    • ヒストリ ジャンクションが遷移元になっている。

  • 診断レベル: エラー。

  • 解決法: ヒストリ ジャンクションを階層のチャート レベル、パラレル (AND) 構造をもつステート、またはグラフィカル関数から削除します。1 つを残してすべてのヒストリ ジャンクションをステートから削除します。遷移元をコネクティブ ジャンクションまたはステートに移動します。詳細については、ヒストリ ジャンクションを使用したステート アクティビティの記録を参照してください。

サイクルからの無条件エスケープがジャンクションにない

  • 問題点: ジャンクションにはサイクルからステートまたは終端ジャンクションへの無条件エスケープ パスがなければなりません。

  • 診断レベル: エラー。

  • 解決法: ジャンクションからステートまたは終端ジャンクションへの無条件パスを作成します。

予期せぬバックトラッキング

  • 問題点: 制御フローの予期しないバックトラッキングは次の場合に発生することがあります。

    • 同じ遷移元からの複数の遷移パスが 1 つのジャンクションに通じている。

    • そのジャンクションに、ステートまたは終端ジャンクションへの無条件パスがない。

  • 診断レベル: コンフィギュレーション パラメーター予期せぬバックトラッキングによって異なります。

  • 解決法: ジャンクションからステートまたは終端ジャンクションへの無条件パスを作成します。詳細については、フロー チャートのバックトラックを参照してください。

    たとえば、このチャートで強調表示されたジャンクションには、ステート A への無条件遷移パスがありません。ConditionAConditionB が真で、ConditionC が偽である場合、チャートはパスの最初のジャンクションに複数回バックトラッキングします。したがって、チャートは 3 つの条件アクションを実行します。

    バックトラッキングを避けるには、条件を組み合わせて 2 番目のジャンクションから遷移先ステートへの無条件パスを作成します。変更後に、チャートは 1 つの条件アクションのみを実行します。

到達不能なジャンクション

  • 問題点: ジャンクションは、そこに通じる有効な実行パスがない場合に "到達不能" になります。

  • 診断レベル: コンフィギュレーション パラメーター到達不能の実行パスによって異なります。

  • 解決法: 到達不能なジャンクションを、到達可能なステートまたはジャンクションからの遷移に接続します。

関数での編集時チェック

関数が未使用

  • 問題点: 関数は、これを呼び出すステートメントがない場合にチャートで "未使用" となります。

  • 診断レベル: 警告。

  • 解決法: ステート、遷移アクション、または別の関数からこの関数を呼び出します。

グラフィカル関数にステートが含まれている

関数の引数としてのキーワードの使用が無効

  • 問題点: 関数定義に予約済みのキーワードが引数として使われています。

  • 診断レベル: エラー。

  • 解決法: 関数の引数の名前を変更します。予約済みキーワードの一覧については、Stateflow オブジェクトの命名ルールを参照してください。

関連するトピック