このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
一般的な設計エラーを回避するために,コンパイルおよびシミュレーション時のStateflow®チャートの完全性をテストする診断チェックを実行できます。Stateflow診断は,仿金宝app真软件®モデルのStateflowチャートで,ステートの矛盾,データ範囲の違反,循環動作を検出します。
モデルのシミュレーション時に,Stateflowパーサーは,各Stateflowマシンのグラフィカルオブジェクトと非グラフィカルオブジェクト,およびデータを,サポートされるチャート表記法とアクション言語の構文に照らして評価します。Stateflowツールストリップの[モデル化)タブにある[チャートの更新)を選択することでもチャートの構文をチェックできます。
チャートに構文エラーがある場合,チャートでは最初のエラーの原因となったオブジェクトが自動的に強調表示されます。診断ウィンドウでエラーを選択すると,ソースオブジェクトが強調表示された状態でソースチャートが前面に表示されます。チャート内の未解決のデータやイベントには,シンボルウィザードでフラグが設定されます。
Stateflowチャートでは,以下のいずれかのルールに違反している場合にステートの矛盾が発生します。
排他的(或)構造と少なくとも1つのサブステートを含むアクティブステートは,アクティブサブステートを1つだけもちます。
パラレル(和)構造を含むアクティブなステートのサブステートはすべてアクティブです。
非アクティブステートのサブステートは,ステート構造にかかわらず,すべて非アクティブです。
チャートの編集中,Stateflowエディターでは,オブジェクトを赤またはオレンジで強調表示することによってステートの矛盾の原因となっている可能性のある箇所を示します。詳細については,編集時のモデリングエラーの検出を参照してください。
以下のすべての条件に該当する場合,1種類のステートの矛盾が発生します。
複数のサブステートをもつステートに排他的(或)構造が含まれている。
そのステートに,ヒストリジャンクションが含まれていない。
サブステートにつながる既定のパスは,条件によって保護されるか,イベントによってトリガーされる。
ステートへの遷移の中に,サブステートに直接つながるスーパートランジションではないものが含まれる。
たとえば,次のチャートにはステートの矛盾が含まれています。どのサブステートが最初にアクティブになるかを示すデフォルト遷移がないためです。
無条件のデフォルト遷移をいずれかのステートに追加することで,ステートの矛盾が解決されます。
コンパイル時に,Stateflowチャートは,無条件のデフォルト遷移の欠落によって発生したステートの矛盾を検出します。診断アクションのレベルを制御するには,[モデルコンフィギュレーションパラメーター]ダイアログボックスを開きます。[診断]、(Stateflow)ペインで,診断[無条件のデフォルト遷移がない]に対して,[エラー]
、[警告]
または[なし]
を選択できます。既定の設定は[エラー]
です。詳細については,無条件のデフォルト遷移がない(金宝app模型)を参照してください。
シミュレーション中,次の場合にデータ範囲違反が発生します。
整数演算または固定小数点演算が,結果タイプの数値容量をオーバーフローする。チャートデータの整数オーバーフローの処理とStateflowチャートでの固定小数点演算を参照してください。
データオブジェクトの値が,[初期値]、[最小値]、[最大値]のプロパティで指定されている値の範囲外である。初期値と制限範囲を参照してください。
たとえば,次のチャートには,[最小値]が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”);