Main Content

デバッグ中のデータおよびメッセージの検査と変更

Stateflow® チャートがデバッグ モードにある間、データ、メッセージ、時相論理の式の値を検査してチャートのステータスを調べることができます。また、データ値を変更してローカル メッセージと出力メッセージを送信することにより、チャートの設計をテストすることも可能です。次の表は、これらのデバッグ タスクの実行に使用できるインターフェイスをまとめたものです。詳細については、チャートのデバッグのためのブレークポイントの設定を参照してください。

デバッグ タスクStateflow エディター[シンボル] ペインブレークポイントと監視ウィンドウMATLAB® コマンド ウィンドウ
データとメッセージの値の検査
時相論理式の検査不可不可不可
データとメッセージの値の変更不可不可
メッセージの送信不可不可不可

Stateflow エディターでのデータの表示

シミュレーションがブレークポイントで一時停止している間、チャート内のステート、遷移、または関数にカーソルを合わせてデータの値を調べることができます。選択したオブジェクトが使用しているデータおよびメッセージの値がツールヒントに表示されます。

オブジェクトのタイプツールヒントの情報
ステートと遷移オブジェクトが使用するデータ、メッセージ、時相論理式の値
グラフィカル関数、真理値表関数、MATLAB 関数関数のスコープ内におけるローカル データ、メッセージ、入力および出力の値

たとえば、次のチャートのブレークポイントは、second ステートがその during アクションを評価するときにシミュレーションを一時停止します。スーパーステート gear にカーソルを合わせると、以下の値を示すツールヒントが表示されます。

  • 時相論理式 duration(speed >= up_threshold) および duration(speed <= down_threshold)

  • speedup_thresholdup を含むデータ。

While the chart is paused at a breakpoint, a tooltip shows state and data information for the superstate gear.

メモ

チャート プロパティ [チャート レベルの関数をエクスポート] および [エクスポートされた関数をグローバルに可視として扱う] を選択した場合、ツールヒントに時相論理データは表示されません。

[シンボル] ペインでのデータの表示と変更

チャートがデバッグ モードにある間、[シンボル] ペインには、チャート内の各データとメッセージ オブジェクトの値が表示されます。たとえば、次のチャートがブレークポイントで一時停止する際、[値] 列ですべてのチャート データの値を確認できます。強調表示されている値は最後のタイム ステップ中に変化したものです。

While the chart is paused at a breakpoint, the Symbols pane shows the values of data objects in the chart.

[シンボル] ペインで、以下の値を変更することができます。

  • データ ストア メモリのデータ、ローカル データ、および出力データ。

  • ローカル メッセージと出力メッセージ。

データまたはメッセージ オブジェクトの [値] フィールドをクリックして新しい値を入力します。

シミュレーション中に定数、パラメーター、または入力データの値とメッセージは変更できません。

詳細については、Stateflow エディターでのシンボルの管理を参照してください。

ブレークポイントと監視ウィンドウでのデータの表示

シミュレーションがブレークポイントで一時停止している間に、Stateflow ブレークポイントと監視ウィンドウで現在のデータとメッセージの値を表示することができます。ブレークポイントと監視ウィンドウを開くには、[デバッグ] タブで [ブレークポイント リスト] をクリックします。あるいは、[ブレークポイント] ダイアログ ボックスを開いて [ブレークポイント リスト] リンクをクリックします。

監視リストでのデータの追跡

ブレークポイントと監視ウィンドウを使って以下のことを行えます。

  • データおよびメッセージ オブジェクトを監視リストに追加。

  • 最後のタイム ステップ以降に変化した値を追跡。

  • メッセージを展開してメッセージ キューおよびメッセージ データの値を表示。

たとえば、監視リストに speedup_threshold および up を追加して、シミュレーションのステップ実行中にこれらの値を追跡できます。強調表示は、speedup_threshold の値が最後のタイム ステップ中に変化したことを示します。

Watch pane of the Stateflow breakpoints and watch window.

データまたはメッセージ オブジェクトを監視リストに追加するには、[プロパティ インスペクター] かモデル エクスプローラーを開きます。監視するデータまたはメッセージ オブジェクトを選択し、[監視ウィンドウに追加] リンクをクリックします。

あるいは、Stateflow エディターで、データやメッセージを使用しているステートまたは遷移を右クリックすることもできます。[監視ウィンドウに追加] を選択して、ドロップダウン リストから変数名を選択します。

監視の表示形式

監視データの表示に使用される形式を変更するには、ウィンドウ上部のギア アイコン を選択します。ドロップダウン リストを使用して各データ型について MATLAB 形式を選択します。

Change value format dialog box.

監視リストからのデータの削除

データまたはメッセージ オブジェクトを監視リストから削除するには、監視データのパスにカーソルを合わせ、変数名の左側に表示される [このウォッチを削除] アイコンをクリックします。

Remove this watch icon in the Stateflow breakpoints and watch window.

監視データの保存と復元

監視データは MATLAB セッションの間存続します。モデルを閉じても、その監視データのリストはブレークポイントと監視ウィンドウに残ります。同じ MATLAB セッション中にモデルを再度開いた場合、そのモデルの監視データのリストが復元されます。

ブレークポイントと監視データのリストを保存して、その後の MATLAB セッションで再度読み込むことができます。ブレークポイントと監視データのリストのスナップショットを保存するには、ブレークポイントと監視ウィンドウの上部で、[現在のブレークポイントと監視の保存] アイコンをクリックします。スナップショットを復元するには、[ブレークポイントと監視の読み込み] アイコンをクリックします。

MATLAB コマンド ウィンドウでのデータの表示と変更

シミュレーションがブレークポイントで一時停止している間、MATLAB コマンド プロンプトが debug>> に変わります。このプロンプトで、Stateflow データの値の検査と変更、ローカル メッセージと出力メッセージの送信、MATLAB ワークスペースの操作を行うことができます。

たとえば、前のチャートがブレークポイントに到達したとします。現在のスコープで表示可能なデータを表示するには、whos コマンドを使用します。

whos
  Name                Size            Bytes  Class       Attributes

  TWAIT               1x1                 1  uint8                 
  down                1x1                 1  logical               
  down_th             1x1                 8  double                
  down_threshold      1x1                 8  double                
  gear                1x1                 4  gearType              
  speed               1x1                 8  double                
  throttle            1x1                 8  double                
  up                  1x1                 1  logical               
  up_th               1x1                 8  double                
  up_threshold        1x1                 8  double                

speedup_threshold の値を検査するには、次のように入力します。

speed
speed =

   26.3383
up_threshold
up_threshold =

   41.3601

デバッグ プロンプトを使用したデータの変更

デバッグ プロンプトで、データ ストア メモリのデータ、ローカル データ、および出力データの値を変更できます。たとえば、前のチャートでは up_thresholdup および gear の値を次のように変更できます。

up_threshold = 25;
up = true;
gear = gearType.third;
デバッグ プロンプトでデータを変更する際は以下の規則に従います。

  • ベクトルと行列を変更する場合、チャートのアクション言語プロパティに関係なく、インデックス付けには MATLAB 構文を使用します。インデックス表記を参照してください。

    たとえば、2 行 2 列の行列 u の対角の要素を変更するには、次のように入力します。

    u(1,1) = 6.022e23;
    u(2,2) = 6.626e-34

  • 可変サイズのデータの次元を変更する場合、新しいサイズは、データに指定された次元の範囲内でなければなりません。たとえば、v は、最大サイズが [16 16] の可変サイズの配列であるとします。v の値を 5 行 7 列の 1 の配列に変更するには、次のように入力します。

    v = ones(5,7);

  • 列挙データを変更する場合、接頭辞付きの識別子を使用して列挙型を明示的に指定してください。列挙値の表記法を参照してください。

    たとえば、w は列挙データ型 Colors をもつとします。w の値を列挙値 Red に変換するには、次のように入力します。

    w = Colors.Red

  • 数値データを変更する場合、MATLAB 型変換関数を使用して明示的なデータ型にキャストします。明示的なキャストは double 型のデータには必要ありません。型キャスト演算を参照してください。

    たとえば、x の型が singley の型が int32z の型が fixdt(1,16,12) であるとします。これらのデータ オブジェクトの値を変更するには、次のように入力します。

    x = single(98.6);
    y = int32(100);
    z = fi(0.5413,1,16,12);

  • 定数、パラメーター、入力データの値をデバッグ プロンプトで変更することはできません。

デバッグ プロンプトを使用したメッセージの送信

デバッグ プロンプトでローカル メッセージや出力メッセージを送信することができます。たとえば、次のチャートでは、ローカル メッセージ M によってステート DecisionPoint の後にどのステートがアクティブになるかが決まります。チャートが正の値をもつメッセージ M を受け取った場合、ステート Received がアクティブになり、チャートは true の値を出力します。それ以外の場合、ステート Missed がアクティブになり、チャートは false の値を出力します。

Stateflow chart that is paused at a breakpoint. The state DecisionPoint is active.

メッセージの初期値は 0 です。データ フィールドの値を正の数値に変更してメッセージをそのローカル キューに送信するには、次のように入力します。

M = 5;
send(M);
シミュレーションの次のステップに進むと、メッセージはステート Received への遷移をトリガーします。詳細については、ブレークポイント後のチャート実行の制御を参照してください。

デバッグ プロンプトからメッセージを送信する際は以下の規則に従います。

  • 有効なメッセージのメッセージ データ フィールドの読み取りや書き込みを行うには、メッセージ オブジェクトの名前を使用します。ドット表記構文は使わないでください。

  • デバッグ プロンプトからメッセージを送信できるのは、チャートが send 演算子を呼び出してメッセージを明示的に送信する場合のみです。

  • デバッグ プロンプトから入力メッセージを送信することはできません。

詳細については、Stateflow チャート内のメッセージ アクティビティの制御を参照してください。

デバッグ中の MATLAB ワークスペースへのアクセス

デバッグ プロンプトでその他の MATLAB コマンドを入力できますが、その結果は Stateflow ワークスペース内で実行されます。たとえば、次のように関数 save を使用して、すべてのチャート変数を MAT ファイルに保存できます。

save(chartVars)

MATLAB ベース ワークスペースでコマンドを入力するには、evalin コマンドを使用して最初の引数を "base" にします。たとえば、MATLAB ワークスペースで変数をリストするには、次のコマンドを使用します。

evalin("base","whos")

参考

| | |

関連するトピック