Main Content

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

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

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

編集時のチェックの管理

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

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

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

ステートとサブチャートの編集時チェック

Atomic サブチャートにステート アクションが含まれている

  • 問題点: ステート アクションは、Atomic サブチャートではサポートされません。

  • 診断レベル: エラー。

  • 解決法: ステート アクションを削除するか、Atomic サブチャートのサブステートへ移動します。

    Atomic subchart that contains state actions.

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

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

  • 診断レベル: エラー。

  • 解決法: デフォルト遷移を追加して開始ステートを指定します。詳細については、デフォルト遷移を使用した最初のサブステート アクティビティの指定を参照してください。

    Chart with no default transition.

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

無効な交差

  • 問題点: ステートとジャンクションがオーバーラップしてはなりません

  • 診断レベル: エラー。

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

    Invalid intersection between states.

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

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

  • 診断レベル: 警告。

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

    Parallel substates in a state that monitors child state activity.

ステートに構文エラーがある

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

  • 診断レベル: エラー。

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

    State that contains a syntax error.

    メモ

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

到達不能なステート

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

  • 診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。

  • 解決法: 到達不能なステートを、到達可能な遷移元からの遷移に接続します。

    Chart that contains an unreachable state.

遷移での編集時チェック

未接続の遷移

  • 問題点: すべての遷移には、有効な遷移先がなくてはなりません。

  • 診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。

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

    Chart that contains a dangling transition.

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

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

    • デフォルト遷移パスのすべての分岐がサブステートにつながらなければならない。

    • デフォルト遷移パスに条件でガードされず、かつイベントでトリガーされない分岐がなければならない。

  • 診断レベル: コンフィギュレーション パラメーターNo unconditional default transitions (Simulink)によって異なります。

  • 解決法: デフォルト遷移パスのすべての分岐をサブステートで終了します。デフォルト遷移パスの分岐の 1 つが条件でガードされず、かつイベントでトリガーされないことを確認します。

    Chart without an unconditional default transition branch to a state.

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

  • 問題点: デフォルト遷移パスは親ステートから出てはなりません。

  • 診断レベル: エラー。

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

    Chart with an invalid default transition path.

遷移に構文エラーがある

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

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

  • 診断レベル: コンフィギュレーション パラメーターTransition action specified before condition action (Simulink)によって異なります。

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

    Transition path in which a transition action precedes a condition action.

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

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

  • 診断レベル: 警告。

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

    Transitions that begin or end in a parallel states.

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

  • 問題点: 遷移はステートおよびジャンクションにのみ接続しなければなりません。

  • 診断レベル: エラー。

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

    Chart with a transition that connects to a box.

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

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

  • 診断レベル: エラー。

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

    Standalone chart with a transition that crosses the boundary of a parallel state.

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

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

  • 診断レベル: エラー。

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

    Chart containing transitions that enter and exit a graphical function.

遷移が entry/exit 端子に接続されていない

  • 問題点: 遷移が、遷移元または遷移先の付近にある entry 端子または exit 端子に接続されていません。

  • 診断レベル: 警告。

  • 解決法: 遷移を端子に接続するか、遷移元または遷移先を別の位置に移動します。

    Entry port that is located near the destination point of a default transition.

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

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

  • 診断レベル: コンフィギュレーション パラメーターTransition outside natural parent (Simulink)によって異なります。

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

    Transition between substates that goes outside the boundary of the parent state.

遷移の優先順位低下

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

  • 診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。

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

    Chart with an unconditional transition that shadows a conditional transition.

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

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

  • 診断レベル: コンフィギュレーション パラメーターTransition outside natural parent (Simulink)によって異なります。

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

    Chart with one transition out of a state with during actions and another transition out of a state with child states.

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

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

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

  • 診断レベル: エラー。

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

    Flow chart with a transition action in a cycle.

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

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

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

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

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

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

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

  • 診断レベル: エラー。

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

    Chart that contains an invalid history junction.

無効な交差

  • 問題点: ジャンクションとステートがオーバーラップしてはなりません

  • 診断レベル: エラー。

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

    Invalid intersection between junctions.

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

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

  • 診断レベル: エラー。

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

    Junction with no unconditional escape from a cycle.

同じソースからの遷移パスの親が異なる

  • 問題点: 遷移パスが同じ遷移元ステートから始まっていますが、親が異なります。

  • 診断レベル: エラー。

  • 解決法: 親が同じになるように遷移パスを変更します。

    Junction with two incoming transition paths from the same source but with different parents.

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

  • 問題点: 同じ遷移元からの複数の遷移パスが 1 つのジャンクションに通じており、そのジャンクションにステートまたは終端ジャンクションへの無条件パスがない場合に、制御フローの予期せぬバックトラッキングが発生する可能性があります。

  • 診断レベル: コンフィギュレーション パラメーターUnexpected backtracking (Simulink)によって異なります。

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

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

    Chart with unexpected backtracking.

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

    Chart with no unexpected backtracking.

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

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

  • 診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。

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

    Chart that contains an unreachable junction.

関数での編集時チェック

関数が未使用

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

  • 診断レベル: 警告。

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

    Chart containing an unused function.

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

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

  • 診断レベル: エラー。

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

    Function that uses a reserved keyword as an argument.

entry 端子と exit 端子に関する編集時チェック

entry ジャンクションにはステートへの無条件パスが必要

  • 問題点: entry ジャンクションには、条件でガードされていないか、イベントでトリガーされないデフォルト遷移パスが 1 つ必要です。

  • 診断レベル: エラー。

  • 解決法: entry ジャンクションからステートへの無条件パスを追加します。

    Entry junction that connects to a single conditional path to a state.

entry ジャンクションには出力遷移が必要

  • 問題点: entry ジャンクションが出力遷移パスに接続していません。

  • 診断レベル: エラー。

  • 解決法: 遷移を entry ジャンクションに接続するか、そのジャンクションを削除します。

    Entry junction that does not connect to a transition path.

exit 端子にはステートへの無条件パスが必要

  • 問題点: exit 端子には、条件でガードされていないか、イベントでトリガーされない遷移パスが 1 つ必要です。

  • 診断レベル: エラー。

  • 解決法: exit 端子からステートへの無条件パスを追加します。

    Exit port that connects to a single conditional path to a state.

exit 端子には出力遷移が必要

  • 問題点: exit 端子が出力遷移パスに接続していません。

  • 診断レベル: エラー。

  • 解決法: 遷移を exit 端子に接続するか、その端子を削除します。

    Exit port that does not connect to a transition path.

無効な entry または exit ジャンクション

  • 問題点: entry ジャンクションと exit ジャンクションは、排他 (OR) のステートと Atomic サブチャートでのみサポートされます。

  • 診断レベル: エラー。

  • 解決法: ジャンクションを排他 (OR) のステートまたは Atomic サブチャートに移動するか、ジャンクションを削除します。

    Entry and exit junctions in parallel (AND) states.

entry または exit ジャンクションが見つからない

  • 問題点: entry 端子または exit 端子には、一致する entry ジャンクションまたは exit ジャンクションが必要です。

  • 診断レベル: エラー。

  • 解決法: 端子を削除するか、一致する同じラベルのジャンクションを作成します。

    Entry and exit ports that do not have a matching junction.

同じラベルをもつ複数の entry または exit ジャンクション

  • 問題点: 同じ親をもつ entry ジャンクションと exit ジャンクションには、一意のラベルが必要です。

  • 診断レベル: エラー。

  • 解決法: ジャンクションのいずれかを削除するか、ラベルのいずれかを変更します。

    Two entry junctions that have the same label in1.

entry ジャンクションからのパスに終端ジャンクションが含まれている

  • 問題点: entry ジャンクションからの各パスはステートに繋がる必要があります。

  • 診断レベル: エラー。

  • 解決法: 終端ジャンクションをステートに置き換えます。

    Entry junction that connects to a terminal junction.

exit 端子からのパスに終端ジャンクションが含まれている

  • 問題点: exit 端子からの各パスはステートに繋がる必要があります。

  • 診断レベル: エラー。

  • 解決法: 終端ジャンクションをステートに置き換えます。

    Exit port that connects to a terminal junction.

entry ジャンクションからヒストリ ジャンクションへの遷移パス

  • 問題点: entry ジャンクションからの遷移パスをヒストリ ジャンクションに接続してはなりません。

  • 診断レベル: エラー。

  • 解決法: entry ジャンクションからヒストリ ジャンクションへのパスを削除します。

    Entry junction that connects to a history junction.

内部遷移から exit ジャンクションへの遷移パス

  • 問題点: 内部遷移パスを exit ジャンクションに接続してはなりません。

  • 診断レベル: エラー。

  • 解決法: 内部遷移から exit ジャンクションへのパスを削除します。

    State that contains an inner transition to an exit port.

entry ジャンクションからの遷移パス、または exit ジャンクションへの遷移パスは、親に含まれている必要がある

  • 問題点: entry ジャンクションから開始する、または exit ジャンクションで終了する遷移パスは、親ステートに含まれている必要があります。

  • 診断レベル: エラー。

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

    Transition path that exits and re-enters a state before connecting to an exit junction.

到達不能な端子またはジャンクション

  • 問題点: 端子またはジャンクションに有効な実行パスが繋がっていない場合、端子またはジャンクションは "到達不能" です。

  • 診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。

  • 解決法: 到達不能な entry 端子または exit ジャンクションを、到達可能な遷移元からの遷移に接続します。

    Chart that contains an unreachable entry junction and port.

関連するトピック