信号のブレークポイントを使用したシミュレーションのデバッグ
以下の例では、次のような操作方法を説明します。
指定した時間にシミュレーションを一時停止する。
端子の値ラベルを使用してブロック線図に信号値を表示する。
信号のブレークポイントを使用して特定の時点でシミュレーションを一時停止する。
ブロックごとにタイム ステップをステップ実行する。
ブロック線図に実行順序を表示する。
シミュレーションを最初からステップ実行することもできます。シミュレーションを最初からステップ実行し、タイム ステップを進める/戻すオプションを構成する方法の例については、Simulink エディターを使用したシミュレーションのステップ実行を参照してください。
モデルを開いてデバッグ ツールを設定
モデル vdp
を開きます。このモデルはファン デル ポールの方程式を実装します。モデルの詳細については、ファン デル ポール振動子を参照してください。
openExample("simulink_general/VanDerPolOscillatorExample",... supportingFile="vdp")
シミュレーションを開始する前に、関連するデバッグ ツールを設定します。
ブロックごとにタイム ステップをステップ実行するには、モデルでシミュレーション モードが
[ノーマル]
に設定されていて、下位レベルのデバッグが有効になっていることを確認します。Simulink® ツールストリップで以下を行います。
[シミュレーション] タブまたは [デバッグ] タブの [シミュレーション] セクションで、シミュレーション モード リストの選択が
[ノーマル]
になっていることを確認します。[デバッグ] タブの [ブレークポイント] セクションで、[ブレークポイント リスト] をクリックします。ブレークポイント リストで [タイム ステップ内で一時停止] が選択されていることを確認します。
反復的なデバッグ シミュレーションの時間を短縮するには、高速リスタートを有効にします。
Simulink ツールストリップの [シミュレーション] タブで [高速リスタート] をクリックします。
シミュレーションのステップ実行中にブロック線図に信号値を表示するには、端子の値ラベルを追加します。
キャンバスの左上で空の領域をクリックし、ドラッグしてブロック線図内のすべての項目を選択します。次に、[デバッグ] タブの [ツール] セクションの [端子の値] ボタン グループで [選択した信号の端子の値のラベルを表示します]
をクリックします。端子の値ラベルを追加した後、端子の値ラベルに新しい値を提供するポイントにシミュレーションが進むまでは、各信号に「
no data yet
」と表示されます。ブロックごとのステップ実行中に実行順序を表示するには、実行順序ビューアーを開きます。
ブレークポイント リストで [実行順序ビューアーを開く]
をクリックします。
ヒント
MATLAB Function ブロックや Stateflow® チャートへのステップインを有効にするには、デバッグ シミュレーションを開始する前に [シミュレーション中のブレークポイント設定を許可] を選択します。
指定した時間にシミュレーションを一時停止
モデルのどの時点の動作についてシミュレーションで解析する必要があるか、おおよその時間がわかっているとします。[一時停止時間] を指定すると、シミュレーションをその時間まで中断せずに実行できます。この例では、シミュレーションを 2 秒間実行した後に一時停止します。
Simulink ツールストリップの [デバッグ] タブの [ブレークポイント] セクションで、[一時停止時間] を 2
と指定します。その後、シミュレーションを開始するために [実行] をクリックします。
このモデルで高速リスタートを有効にしてから、これが 1 回目のシミュレーションであるため、シミュレーションの開始前にモデルがコンパイルされます。その後、シミュレーション時間 2.079
秒で発生するタイム ステップの値を計算した後にシミュレーションが一時停止します。
シミュレーション ステータスとシミュレーション時間の監視には、Simulink エディターの下部のステータス バーを使用します。シミュレーションが一時停止している間、シミュレーション ステータスが進行状況バーで示されます。最後に出力値を計算したタイム ステップのシミュレーション時間がステータス バーに表示されます。シミュレーション時間のアスタリスクは、シミュレーションの内部状態のシミュレーション時間がステータス バーに表示された時間よりも進んでいることを示します。
一時停止時間を指定しても、その正確な時間にシミュレーションが一時停止するとは限りません。シミュレーションに要するタイム ステップはソルバーで判定され、指定した正確な時間にシミュレーションのタイム ヒットがないこともあります。代わりに、指定した時間以降に発生した最初のタイム ステップの最後にシミュレーションが一時停止します。
タイム ステップのステップ実行
シミュレーションが一時停止しているとき、[ステップを進める] ボタンと [ステップを戻す] ボタンを使用して、シミュレーションをタイム ステップごとにステップ実行できます。ステップを戻すには、ステップを戻す機能を有効にする必要があります。[ステップを進める] または [ステップを戻す] をクリックするごとにシミュレーションが進行するタイム ステップの数を構成することもできます。詳細については、Simulink エディターを使用したシミュレーションのステップ実行を参照してください。
[ステップを進める] をクリックします。シミュレーションが 1 タイム ステップ進み、そのタイム ステップの値を計算した後に一時停止します。端子の値ラベルが更新され、そのタイム ステップの信号値が表示されます。
[ステップを進める] をクリックしてシミュレーションの進行を続行できます。シミュレーションを進めながら、端子の値ラベルとモデルの Scope ブロックを使用して信号値を確認できます。
信号のブレークポイントを使用したシミュレーションの一時停止
信号のブレークポイントを使用すると、信号値が指定の条件を満たすたびにシミュレーションを一時停止できます。信号のブレークポイントを使用する場合、既定では、条件を満たすとすぐに、そのタイム ステップ内で信号を生成するブロックの出力メソッドが実行されて信号値が更新された直後にシミュレーションが一時停止します。
ブレークポイント リストで、条件が満たされたときにタイム ステップ内でシミュレーションが一時停止するのか、条件が満たされたタイム ステップの最後にシミュレーションが一時停止するのかを制御できます。ブレークポイント リストで [タイム ステップ内で一時停止] をオフにすると、条件が満たされたタイム ステップの最後にシミュレーションが一時停止します。詳細については、ブレークポイント リストを参照してください。
信号 x1
の値が 0 に近いときのモデルの動作を調べるとします。ブレークポイントの条件を > 0
と指定します。等号 (=
) 関係演算子を使用して条件を構成することもできます。ただし、その場合は、信号が正確にその値をもつ場合しかブレークポイントでシミュレーションが一時停止しません。ソルバーによって、信号値が 0 に近いが正確に 0 ではないタイム ステップが選択される可能性があります。信号のブレークポイントの条件が > 0
であれば、信号値が 0 を超えるたびにシミュレーションが一時停止します。
信号のブレークポイントを設定するには、次のようにします。
信号
x1
を選択します。[デバッグ] タブの [ブレークポイント] セクションで、[ブレークポイントの追加] をクリックします。
[ブレークポイントの追加] ダイアログ ボックスで、信号のブレークポイントの条件を定義する関係演算子を選択します。この例では、
[>]
(より大きい) を選択します。信号
x1
の値がゼロより大きい場合にシミュレーションが一時停止するように、ブレークポイントの条件の値を0
と指定します。[OK] をクリックします。
信号 x1
の線の上にある赤の丸は、その信号に有効なブレークポイントがあることを示します。
既定では、シミュレーション中に信号線をクリックすると、その線の端子の値ラベルが追加または削除されます。信号 x1
の端子の値ラベルを追加するには、信号線を再度クリックします。端子の値ラベルを削除したときに信号値の履歴は保持されないため、端子の値ラベルには no data yet
と表示されます。シミュレーションの次回の進行時に、端子の値ラベルが更新されて信号値が表示されます。
シミュレーションをブレークポイントにヒットするまで進めるには、[続行] をクリックします。信号値が 0 より大きくなるとシミュレーションが一時停止します。シミュレーションがタイム ステップ内のブレークポイントで一時停止すると、次のようになります。
シミュレーションが一時停止しているタスクにブロック線図で注釈が付けられ、そのタスクの実行順序が実行順序ビューアーにリストとして表示されます。
信号
x1
の端子の値ラベルに、ブレークポイントの条件を満たした信号値が表示されます。ブレークポイントのアイコンに緑の矢印が表示され、そのブレークポイントでシミュレーションが一時停止したことが示されます。
信号
x1
を生成するブロックが緑で強調表示され、シミュレーションが一時停止したタイム ステップ内の位置が示されます。
ステータス バーの左側に、シミュレーションが一時停止した位置を示す詳細なシミュレーション ステータスが表示されます。
シミュレーションがブレークポイントで一時停止すると、ステータス バーの中央近くにある [ブレークポイント リストを開く] をクリックしてブレークポイント リストを開くことができます。
ブレークポイント リストの緑の強調表示は、シミュレーションがブレークポイントで一時停止していることを示しています。
ブロックごとのステップ実行
各ブロックの出力値がタイム ステップ内でどのように計算されるかを解析するために、シミュレーションをブロックごとに進めることができます。ブレークポイントを超えてシミュレーションを進め、次のブロックを実行する直前で一時停止するには、[ステップ オーバー] をクリックします。次のブロックである端子インデックスが 1 の Outport ブロックでシミュレーションが一時停止します。ブレークポイントに緑の矢印は表示されなくなります。
[ステップ オーバー] を次回クリックしたときは、x2
という名前の Integrator ブロックを実行する直前でシミュレーションが一時停止します。[ステップ オーバー] をもう一度クリックすると、x2
という名前の Integrator ブロックが実行されて出力値が生成され、端子の値ラベルが更新されて新しい信号値が表示されます。その後、端子インデックスが 2 の Outport ブロックを実行する直前でシミュレーションが一時停止します。
メモ
タイム ステップ内で一時停止しているときに、sldebug
プログラム インターフェイスからいくつかの関数を使用して、シミュレーションに関する追加情報を取得できます。たとえば、関数 probe
を使用すると、指定したブロックに関する情報を確認できます。sldebug
プログラム インターフェイスの関数で表示される値は、端子の値ラベルに表示される値とは異なることがあります。sldebug
プログラム インターフェイスの関数では、マイナー タイム ステップとメジャー タイム ステップの両方の計算値が表示されます。端子の値ラベルには、メジャー タイム ステップの値のみが表示されます。詳細については、Simulink のデバッグ用のプログラム インターフェイスを参照してください。
引き続き、一度に 1 ブロックずつ、複数のタイム ステップでシミュレーションをステップ実行できます。[ステップを進める] または [ステップを戻す] をクリックすると、タイム ステップ内でブロックごとのステップ実行を再開できるように [ステップ オーバー] ボタンだけは有効なままになります。
R2024a より前: [ステップを進める] または [ステップを戻す] をクリックすると、タイム ステップ間でシミュレーションが一時停止し、[ステップ オーバー]、[ステップ イン]、[ステップ アウト] の各ボタンは無効になります。ブレークポイントでシミュレーションが一時停止すると、[ステップ オーバー]、[ステップ イン]、[ステップ アウト] の各ボタンが再び有効になります。
シミュレーション デバッグ セッションの終了
モデルの解析とデバッグが完了したら、次に何を行うかに応じて、いずれかの方法でシミュレーション デバッグ セッションを終了できます。
現在の時間点からシミュレーションを続け、モデルで構成されている一連のブレークポイントを保持するには、すべてのブレークポイントを無効にします。
ブレークポイント リストを開くには、[デバッグ] タブで [ブレークポイント リスト] をクリックします。
ブレークポイント リストで、[有効] 列のチェック ボックスまたは [すべてのブレークポイントを有効または無効にする] ボタンを使用してすべてのブレークポイントを無効にします。
シミュレーションを再開するには、[続行] をクリックします。
ブレークポイントを保持せずに現在の時間点からシミュレーションを続けるには、すべてのブレークポイントをモデルから削除します。
モデルですべてのブレークポイントをクリアするには、[デバッグ] タブで [ブレークポイントの追加] ボタンの矢印をクリックし、[すべてのブレークポイントのクリア] を選択します。
シミュレーションを再開するには、[続行] をクリックします。
現在の時間点でシミュレーションを停止するには、Simulink ツールストリップの [デバッグ] タブで [停止] をクリックします。
参考
シミュレーション ステップ オプション | ブレークポイント リスト