主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

チャートシミュレーション時の一般的なモデリングエラーの検出

一般的な設計エラーを回避するために,コンパイルおよびシミュレーション時のStateflow®チャートの完全性をテストする診断チェックを実行できます。Stateflow診断は,仿金宝app真软件®モデルのStateflowチャートで,ステートの矛盾,データ範囲の違反,循環動作を検出します。

モデルのシミュレーション時に,Stateflowパーサーは,各Stateflowマシンのグラフィカルオブジェクトと非グラフィカルオブジェクト,およびデータを,サポートされるチャート表記法とアクション言語の構文に照らして評価します。Stateflowツールストリップの[モデル化)タブにある[チャートの更新)を選択することでもチャートの構文をチェックできます。

チャートに構文エラーがある場合,チャートでは最初のエラーの原因となったオブジェクトが自動的に強調表示されます。診断ウィンドウでエラーを選択すると,ソースオブジェクトが強調表示された状態でソースチャートが前面に表示されます。チャート内の未解決のデータやイベントには,シンボルウィザードでフラグが設定されます。

ステートの矛盾

Stateflowチャートでは,以下のいずれかのルールに違反している場合にステートの矛盾が発生します。

  • 排他的(或)構造と少なくとも1つのサブステートを含むアクティブステートは,アクティブサブステートを1つだけもちます。

  • パラレル(和)構造を含むアクティブなステートのサブステートはすべてアクティブです。

  • 非アクティブステートのサブステートは,ステート構造にかかわらず,すべて非アクティブです。

チャートの編集中,Stateflowエディターでは,オブジェクトを赤またはオレンジで強調表示することによってステートの矛盾の原因となっている可能性のある箇所を示します。詳細については,編集時のモデリングエラーの検出を参照してください。

ステートの矛盾の原因

以下のすべての条件に該当する場合,1種類のステートの矛盾が発生します。

  • 複数のサブステートをもつステートに排他的(或)構造が含まれている。

  • そのステートに,ヒストリジャンクションが含まれていない。

  • サブステートにつながる既定のパスは,条件によって保護されるか,イベントによってトリガーされる。

  • ステートへの遷移の中に,サブステートに直接つながるスーパートランジションではないものが含まれる。

たとえば,次のチャートにはステートの矛盾が含まれています。どのサブステートが最初にアクティブになるかを示すデフォルト遷移がないためです。

無条件のデフォルト遷移をいずれかのステートに追加することで,ステートの矛盾が解決されます。

ステートの矛盾の検出

コンパイル時に,Stateflowチャートは,無条件のデフォルト遷移の欠落によって発生したステートの矛盾を検出します。診断アクションのレベルを制御するには,[モデルコンフィギュレーションパラメーター]ダイアログボックスを開きます。[診断](Stateflow)ペインで,診断[無条件のデフォルト遷移がない]に対して,[エラー][警告]または[なし]を選択できます。既定の設定は[エラー]です。詳細については,無条件のデフォルト遷移がない(金宝app模型)を参照してください。

データ範囲違反

シミュレーション中,次の場合にデータ範囲違反が発生します。

たとえば,次のチャートには,[最小値]が0で[最大値]が2のローカルデータ一个が含まれています。ステート一个条目アクションが,一个を1に初期化します。アクションは,一个の値を1つインクリメントします。2タイムステップ後に,一个の値は指定された範囲を超え,データ範囲違反となります。

データ範囲違反の検出

実行時に,Stateflowチャートはデータ範囲違反を検出します。診断アクションのレベルを制御するには,[モデルコンフィギュレーションパラメーター]ダイアログボックスを開きます。[診断][データ有効性)ペインで,以下の診断に対して[エラー][警告]または[なし]を選択できます。

  • [シミュレーション範囲のチェック]は,最小値と最大値の範囲のチェックに基づいて違反を検出します。既定の設定は[なし]です。

  • [オーバーフロー時にラップ][オーバーフローで飽和)は,整数演算または固定小数点演算が結果タイプの数値容量を超えたときに発生する違反を検出します。既定の設定は[警告]です。

詳細については,シミュレーション範囲のチェック(金宝app模型)オーバーフロー時にラップ(金宝app模型)およびオーバーフローで飽和(金宝app模型)を参照してください。

循環動作

循環動作は,チャートのシミュレーション時にステップまたはステップのシーケンスが無限に繰り返される場合に発生します。

たとえば,以下のチャートのアクションでは,再帰的なイベントブロードキャストの無限サイクルが発生します。

  • ステートCアクションが,イベントE1をブロードキャストします。

  • イベントE1が,ステートA.A1からステートA.A2への遷移をトリガーします。この遷移の条件アクションが,イベントE2をブロードキャストします。

  • イベントE2が,ステートB.B1からステートB.B2への遷移をトリガーします。この遷移の条件アクションが,イベントE1をブロードキャストします。

ステート一个およびBのイベントブロードキャストは条件アクションで発生するため,結果のイベントをチャートが処理するまで遷移は行われません。サブステートA.A1およびB.B1はアクティブなままであるため,新しいイベントブロードキャストが遷移をトリガーし続け,プロセスは無限に繰り返されます。

指示のないローカルイベントブロードキャストは不要な再帰的動作の原因となる可能性があるため,发送演算子を使った,指示のあるローカルイベントブロードキャストが推奨されます。詳細については,ローカルイベントをブロードキャストしてパラレルステートを同期を参照してください。

シミュレーション時の循環動作の検出

チャートのシミュレーション時に,Stateflowチャートは,循環検出アルゴリズムを使用して,イベントブロードキャストが原因で無限再帰が発生しているクラスを検出します。循環検出を有効にするには,Stateflowチャートを開きます。[デバッグ]タブで,[診断](周期的動作の検出)を選択します。循環動作チェックは既定で選択されています。

Stateflowチャートは,指示のないローカルイベントブロードキャストも検出します。診断アクションのレベルを制御するには,[モデルコンフィギュレーションパラメーター]ダイアログボックスを開きます。[診断](Stateflow)ペインで,(指示のないイベントブロードキャスト]診断に対して,[エラー][警告]または[なし]を選択できます。既定の設定は[警告]です。詳細については,指示のないイベントブロードキャスト(金宝app模型)を参照してください。

循環動作検出の制限

Stateflow循環検出は,イベントブロードキャストによる再帰の場合に制限されており,他のタイプの循環動作には拡張されません。

たとえば,Stateflowは,次のフローチャートの無限サイクルは検出できません。この例では,デフォルト遷移がローカルデータを0に初期化します。次の遷移セグメントはをインクリメントします。終端ジャンクションへの遷移は,条件(我< 0)が真の場合にのみ有効です。この条件が真になることはないため,無限サイクルという結果になります。

モデルsf_cycle_error_fixでは,フローチャート内の循環動作を修正するための推奨事項が提供されています。MATLAB®コマンドプロンプトで,次のように入力します。

sfhelp (“cycle_error”);

関連するトピック