編集時のモデリング エラーの検出
編集時のチェックが有効にされている場合、チャートの作業を行う際に Stateflow® エディターによって潜在的なエラーや警告が検出されます。これらの問題を設計プロセスの早期に解決することで、コンパイル時や実行時の警告およびエラーを回避できます。
Stateflow エディターで、編集時のチェックに違反するオブジェクトが赤 (エラー) またはオレンジ (警告) で強調表示されます。強調表示されたオブジェクトにカーソルを合わせてエラーまたは警告のバッジをクリックすると、ツールヒントには詳細と、考えられる解決方法が表示されます。
編集時のチェックの管理
既定では、編集時のチェックと構文エラーの強調表示は有効にされています。編集時のチェックを無効にするには、[デバッグ] タブで、[診断] 、 [編集時のエラーと警告] チェック ボックスをオフにします。edittime.setDisplayIssues
(Simulink)を使用して編集時のチェックを無効にすることもできます。
次の表は、[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断] 、 [Stateflow] ペインの診断のコンフィギュレーション パラメーターに関連付けられた編集時のチェックの一覧です。
編集時チェックの問題 | 診断のコンフィギュレーション パラメーター |
---|---|
未接続の遷移 | Unreachable execution path (Simulink) |
デフォルト遷移パスがステートで終了しない | No unconditional default transitions (Simulink) |
このパスには条件アクションの前に遷移アクションがある | Transition action specified before condition action (Simulink) |
自然な親を外れた遷移ループ | Transition outside natural parent (Simulink) |
遷移の優先順位低下 | Unreachable execution path (Simulink) |
during アクションまたは子ステートをもつステート外の無条件パス | Transition outside natural parent (Simulink) |
予期せぬバックトラッキング | Unexpected backtracking (Simulink) |
到達不能なジャンクション | Unreachable execution path (Simulink) |
到達不能な端子またはジャンクション | Unreachable execution path (Simulink) |
到達不能なステート | Unreachable execution path (Simulink) |
これらの編集時のチェックについて、診断アクションのレベルを制御するには、そのコンフィギュレーション パラメーターの値を [エラー]
、[警告]
、[なし]
のいずれかに設定します。コンフィギュレーション パラメーターの設定を変更すると、対応する編集時のチェックの診断レベルも変更されます。たとえば、[到達不能の実行パス] コンフィギュレーション パラメーターを none
に設定した場合、Stateflow エディターで未接続の遷移、遷移の優先順位低下、および到達不能なステートは強調表示されません。
ステートとサブチャートの編集時チェック
Atomic サブチャートにステート アクションが含まれている
問題点: ステート アクションは、Atomic サブチャートではサポートされません。
診断レベル: エラー。
解決法: ステート アクションを削除するか、Atomic サブチャートのサブステートへ移動します。
デフォルト遷移が見つからない
問題点: 排他的 (OR) 構造と少なくとも 2 つのサブステートまたはジャンクションを含むチャートやステートでは、実行の開始位置を示すためにデフォルト遷移が必要です。
診断レベル: エラー。
解決法: デフォルト遷移を追加して開始ステートを指定します。詳細については、デフォルト遷移を使用した最初のサブステート アクティビティの指定を参照してください。
グラフィカル関数にステートが含まれている
問題点: グラフィカル関数は単一のタイム ステップで完全に実行されるため、ステートを含めてはなりません。
診断レベル: エラー。
解決法: ステートをジャンクションに置き換えます。詳細については、グラフィカル関数の定義によるロジック パターンの再利用を参照してください。
無効な交差
問題点: ステートとジャンクションがオーバーラップしてはなりません
診断レベル: エラー。
解決法: ステートとジャンクションを分離して交差を回避します。
パラレル ステートのリーフ ステート アクティビティまたは子ステート アクティビティを監視
問題点: パラレル (AND) 構造をもつチャートおよびステートでは、パラレル サブステートが同時にアクティブになるため、リーフ ステートや子ステートのアクティビティの監視はサポートされません。
診断レベル: 警告。
解決法: [プロパティ インスペクター] またはモデル エクスプローラーを開きます。[監視する出力の作成] チェック ボックスをオフにするか、ドロップダウン リストから
[自己アクティビティ]
を選択します。詳細については、アクティブ ステート データによるステート アクティビティの監視を参照してください。
ステートに構文エラーがある
問題点: Stateflow 構文ルールに従っていないステート アクションがあります。Stateflow エディターでは、構文エラーに赤の波線が引かれます。
遷移に構文エラーがある
も参照してください。診断レベル: エラー。
解決法: ステート アクションの構文エラーを修正します。詳細については、ステートのアクションの定義を参照してください。
メモ
親チャートでは、構文エラーのあるサブチャートが赤で強調表示され、エラー バッジによって構文の問題が示されます。サブチャートのエディターでは、構文エラーが赤の波線で表示されますが、問題を示すバッジはありません。
到達不能なステート
問題点: あるステートに通じる有効な実行パスがないため、そのステートが "到達不能" です。
診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。
解決法: 到達不能なステートを、到達可能な遷移元からの遷移に接続します。
遷移での編集時チェック
未接続の遷移
問題点: すべての遷移には、有効な遷移先がなくてはなりません。
診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。
解決法: 遷移をステート、ジャンクション、または端子に接続します。詳細については、動作モード間の遷移を参照してください。
デフォルト遷移パスがステートで終了しない
問題点: 排他的 (OR) 構造と少なくとも 1 つのサブステートをもつチャートまたはステートでは、次のことが必要です。
デフォルト遷移パスのすべての分岐がサブステートにつながらなければならない。
デフォルト遷移パスに条件でガードされず、かつイベントでトリガーされない分岐がなければならない。
診断レベル: コンフィギュレーション パラメーターNo unconditional default transitions (Simulink)によって異なります。
解決法: デフォルト遷移パスのすべての分岐をサブステートで終了します。デフォルト遷移パスの分岐の 1 つが条件でガードされず、かつイベントでトリガーされないことを確認します。
無効なデフォルト遷移パス
問題点: デフォルト遷移パスは親ステートから出てはなりません。
診断レベル: エラー。
解決法: デフォルト遷移パスを変更して親ステート内にとどまるようにします。
遷移に構文エラーがある
問題点: 遷移内の条件またはアクションが、Stateflow の構文ルールに従っていません。Stateflow エディターでは、構文エラーに赤の波線が引かれます。
ステートに構文エラーがある
も参照してください。診断レベル: エラー。
解決法: 遷移条件またはアクションの構文エラーを修正します。詳細については、遷移のアクションの定義を参照してください。
このパスには条件アクションの前に遷移アクションがある
問題点: 遷移アクションがあり、後続の遷移に条件アクションがある場合、これらのアクションは遷移の順序では実行されません。Stateflow チャートは、関連付けられている条件が真と評価されたときに条件アクションを実行します。これとは対照的に、チャートが遷移アクションを実行するのは、遷移パスが完全に実行されたときのみです。その結果、チャートが遷移パスを実行すると、条件アクションが遷移アクションより前に発生します。
診断レベル: コンフィギュレーション パラメーターTransition action specified before condition action (Simulink)によって異なります。
解決法: 遷移アクションをパスの最後の条件アクションの後に置きます。
遷移がパラレル ステートで開始または終了する
問題点: パラレル (AND) 構造のチャートやステートで、兄弟関係にあるすべてのサブステートが同時にアクティブ、または同時に非アクティブになっています。
診断レベル: 警告。
解決法: 遷移を削除するか、親ステートの構造を排他 (OR) に変更します。
遷移がボックスに接続する
問題点: 遷移はステートおよびジャンクションにのみ接続しなければなりません。
診断レベル: エラー。
解決法: ボックスに接続している遷移を移動または削除します。
遷移がパラレル ステートにまたがっている
問題点: MATLAB® のスタンドアロン チャートは、パラレル ステートの境界をまたぐ遷移をサポートしていません。
診断レベル: エラー。
解決法: パラレル ステートへの、またはパラレル ステートからの境界をまたぐ遷移を削除します。
遷移がグラフィカル関数に出入りしている
問題点: 遷移はグラフィカル関数に入る、またはグラフィカル関数から出てはなりません。グラフィカル関数内のフロー チャートは、関数内に完全に含まれていなければなりません。
診断レベル: エラー。
解決法: グラフィカル関数に入る、またはグラフィカル関数から出る遷移を削除します。
遷移が entry/exit 端子に接続されていない
問題点: 遷移が、遷移元または遷移先の付近にある entry 端子または exit 端子に接続されていません。
診断レベル: 警告。
解決法: 遷移を端子に接続するか、遷移元または遷移先を別の位置に移動します。
自然な親を外れた遷移ループ
問題点: 遷移元と遷移先の間で遷移が親ステートの外に出る場合、遷移先ステートがアクティブになる前に、チャートが親ステートの
exit
アクションとentry
アクションを実行します。診断レベル: コンフィギュレーション パラメーターTransition outside natural parent (Simulink)によって異なります。
解決法: 遷移を移動し、親ステートに含まれるようにします。
遷移の優先順位低下
問題点: 同じ遷移元からの他の出力遷移の前に無条件遷移が実行されると、これによって他の遷移の実行が妨げられます。
診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。
解決法: 各ステートまたはジャンクションからの無条件遷移は 1 つのみ作成します。無条件遷移がどの条件付き遷移よりも後に実行されるように明示的に指定します。詳細については、遷移の評価順序を参照してください。
during アクションまたは子ステートをもつステート外の無条件パス
問題点: ステートから外に出る無条件遷移により、ステート内の
during
アクションと、子ステートへの遷移の実行が妨げられます。診断レベル: コンフィギュレーション パラメーターTransition outside natural parent (Simulink)によって異なります。
解決法: 遷移の条件を追加するか、ステートから during アクションと子ステートを削除します。
ジャンクションでの編集時チェック
遷移アクションをもつ遷移がサイクルに含まれる
問題点: 遷移アクションをもつ遷移をサイクルに含めることはできません。
診断レベル: エラー。
解決法: 遷移アクションを削除するか、遷移を削除してサイクルを削除します。
無効なヒストリ ジャンクション
問題点: ヒストリ ジャンクションは次の場合に "無効" になります。
ヒストリ ジャンクションが階層のチャート レベルに含まれている。
ヒストリ ジャンクションがパラレル (AND) 構造をもつステートに含まれている。
ヒストリ ジャンクションがグラフィカル関数内に含まれている。
同じステートに複数のヒストリ ジャンクションが含まれている。
ヒストリ ジャンクションが遷移元になっている。
診断レベル: エラー。
解決法: ヒストリ ジャンクションを階層のチャート レベル、パラレル (AND) 構造をもつステート、またはグラフィカル関数から削除します。1 つを残してすべてのヒストリ ジャンクションをステートから削除します。遷移元をコネクティブ ジャンクションまたはステートに移動します。詳細については、ヒストリ ジャンクションを使用した前のサブステート アクティビティの再開を参照してください。
無効な交差
問題点: ジャンクションとステートがオーバーラップしてはなりません
診断レベル: エラー。
解決法: ジャンクションとステートを分離して交差を回避します。
サイクルからの無条件エスケープがジャンクションにない
問題点: ジャンクションにはサイクルからステートまたは終端ジャンクションへの無条件エスケープ パスがなければなりません。
診断レベル: エラー。
解決法: ジャンクションからステートまたは終端ジャンクションへの無条件パスを作成します。
同じソースからの遷移パスの親が異なる
問題点: 遷移パスが同じ遷移元ステートから始まっていますが、親が異なります。
診断レベル: エラー。
解決法: 親が同じになるように遷移パスを変更します。
予期せぬバックトラッキング
問題点: 同じ遷移元からの複数の遷移パスが 1 つのジャンクションに通じており、そのジャンクションにステートまたは終端ジャンクションへの無条件パスがない場合に、制御フローの予期せぬバックトラッキングが発生する可能性があります。
診断レベル: コンフィギュレーション パラメーターUnexpected backtracking (Simulink)によって異なります。
解決法: ジャンクションからステートまたは終端ジャンクションへの無条件パスを作成します。詳細については、フロー チャートのバックトラックを参照してください。
たとえば、このチャートで強調表示されたジャンクションには、ステート
A
への無条件パスがありません。ConditionA
とConditionB
が真で、ConditionC
が偽である場合、チャートはパスの最初のジャンクションに複数回バックトラッキングします。したがって、チャートは 3 つの条件アクションを実行します。バックトラッキングを避けるには、条件を組み合わせて 2 番目のジャンクションから遷移先ステートへの無条件パスを作成します。変更後に、チャートは 1 つの条件アクションのみを実行します。
到達不能なジャンクション
問題点: ジャンクションは、そこに通じる有効な実行パスがない場合に "到達不能" になります。
診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。
解決法: 到達不能なジャンクションを、到達可能な遷移元からの遷移に接続します。
関数での編集時チェック
関数が未使用
問題点: 関数は、これを呼び出すステートメントがない場合にチャートで "未使用" となります。
診断レベル: 警告。
解決法: ステート、遷移アクション、または別の関数からこの関数を呼び出します。
関数の引数としてのキーワードの使用が無効
問題点: 関数定義に予約済みのキーワードが引数として使われています。
診断レベル: エラー。
解決法: 関数の引数の名前を変更します。予約済みキーワードの一覧については、Stateflow オブジェクトの命名のガイドラインを参照してください。
entry 端子と exit 端子に関する編集時チェック
entry ジャンクションにはステートへの無条件パスが必要
問題点: entry ジャンクションには、条件でガードされていないか、イベントでトリガーされないデフォルト遷移パスが 1 つ必要です。
診断レベル: エラー。
解決法: entry ジャンクションからステートへの無条件パスを追加します。
entry ジャンクションには出力遷移が必要
問題点: entry ジャンクションが出力遷移パスに接続していません。
診断レベル: エラー。
解決法: 遷移を entry ジャンクションに接続するか、そのジャンクションを削除します。
exit 端子にはステートへの無条件パスが必要
問題点: exit 端子には、条件でガードされていないか、イベントでトリガーされない遷移パスが 1 つ必要です。
診断レベル: エラー。
解決法: exit 端子からステートへの無条件パスを追加します。
exit 端子には出力遷移が必要
問題点: exit 端子が出力遷移パスに接続していません。
診断レベル: エラー。
解決法: 遷移を exit 端子に接続するか、その端子を削除します。
無効な entry または exit ジャンクション
問題点: entry ジャンクションと exit ジャンクションは、排他 (OR) のステートと Atomic サブチャートでのみサポートされます。
診断レベル: エラー。
解決法: ジャンクションを排他 (OR) のステートまたは Atomic サブチャートに移動するか、ジャンクションを削除します。
entry または exit ジャンクションが見つからない
問題点: entry 端子または exit 端子には、一致する entry ジャンクションまたは exit ジャンクションが必要です。
診断レベル: エラー。
解決法: 端子を削除するか、一致する同じラベルのジャンクションを作成します。
同じラベルをもつ複数の entry または exit ジャンクション
問題点: 同じ親をもつ entry ジャンクションと exit ジャンクションには、一意のラベルが必要です。
診断レベル: エラー。
解決法: ジャンクションのいずれかを削除するか、ラベルのいずれかを変更します。
entry ジャンクションからのパスに終端ジャンクションが含まれている
問題点: entry ジャンクションからの各パスはステートに繋がる必要があります。
診断レベル: エラー。
解決法: 終端ジャンクションをステートに置き換えます。
exit 端子からのパスに終端ジャンクションが含まれている
問題点: exit 端子からの各パスはステートに繋がる必要があります。
診断レベル: エラー。
解決法: 終端ジャンクションをステートに置き換えます。
entry ジャンクションからヒストリ ジャンクションへの遷移パス
問題点: entry ジャンクションからの遷移パスをヒストリ ジャンクションに接続してはなりません。
診断レベル: エラー。
解決法: entry ジャンクションからヒストリ ジャンクションへのパスを削除します。
内部遷移から exit ジャンクションへの遷移パス
問題点: 内部遷移パスを exit ジャンクションに接続してはなりません。
診断レベル: エラー。
解決法: 内部遷移から exit ジャンクションへのパスを削除します。
entry ジャンクションからの遷移パス、または exit ジャンクションへの遷移パスは、親に含まれている必要がある
問題点: entry ジャンクションから開始する、または exit ジャンクションで終了する遷移パスは、親ステートに含まれている必要があります。
診断レベル: エラー。
解決法: 親ステートに含まれるように遷移パスを変更します。
到達不能な端子またはジャンクション
問題点: 端子またはジャンクションに有効な実行パスが繋がっていない場合、端子またはジャンクションは "到達不能" です。
診断レベル: コンフィギュレーション パラメーターUnreachable execution path (Simulink)によって異なります。
解決法: 到達不能な entry 端子または exit ジャンクションを、到達可能な遷移元からの遷移に接続します。