Main Content

信号のブレークポイントを使用したシミュレーションのデバッグ

以下の例では、次のような操作方法を説明します。

  • 指定した時間にシミュレーションを一時停止する。

  • 端子の値ラベルを使用してブロック線図に信号値を表示する。

  • 信号のブレークポイントを使用して特定の時点でシミュレーションを一時停止する。

  • ブロックごとにタイム ステップをステップ実行する。

  • ブロック線図に実行順序を表示する。

シミュレーションを最初からステップ実行することもできます。シミュレーションを最初からステップ実行し、タイム ステップを進める/戻すオプションを構成する方法の例については、シミュレーションのステップ実行を参照してください。

モデルを開いて構成

モデル vdp を開きます。このモデルはファン デル ポールの方程式を実装します。モデルの詳細については、Van der Pol Oscillatorを参照してください。

openExample("simulink_general/VanDerPolOscillatorExample",...
    supportingFile="vdp")

The model vdp.

モデルの解析とデバッグを行うときにシミュレーションを複数実行することがあります。時間の節約のためにモデルのコンパイルを 1 回目のシミュレーションの前にのみ行うには、高速リスタートを有効にします。Simulink® ツールストリップの [シミュレーション] タブで [高速リスタート] をクリックします。

シミュレーションを一時停止する時間の指定

モデルのどの時点の動作についてシミュレーションで解析する必要があるか、おおよその時間がわかっているとします。[一時停止時間] を指定すると、シミュレーションをその時間まで中断せずに実行できます。この例では、一時停止時間を 2 秒と指定します。

Simulink ツールストリップの [デバッグ] タブの [ブレークポイント] セクションで、[一時停止時間]2 と指定します。その後、シミュレーションを開始するために [実行] をクリックします。

これが 1 回目のシミュレーションであるため、シミュレーションの開始前にモデルがコンパイルされます。その後、シミュレーション時間 2.079 秒で発生するメジャー タイム ステップの後にシミュレーションが一時停止します。Simulink エディターの下部のステータス バーに現在のシミュレーション時間が表示されます。一部のソルバーでは、[ステップを進める] をクリックしたときに、次のメジャー タイム ステップの時間を判定するための計算が、シミュレーション ループ内でシミュレーションが一時停止するよりも前に実行されます。この場合、ソルバーはシミュレーション時間内でブロック線図よりも前方になります。ソルバーがシミュレーション時間内で前方に移動したことを示すために、シミュレーション時間にアスタリスクが追加されます。

The status bar shows that the simulation time is 2.079 with an asterisk and the simulation is paused.

一時停止時間を指定しても、その正確な時間にシミュレーションが一時停止するとは限りません。シミュレーションに要するタイム ステップはソルバーで判定され、指定した正確な時間にシミュレーションのメジャー タイム ステップがないこともあります。代わりに、指定した時間以降に発生した最初のタイム ステップの最後にシミュレーションが一時停止します。

ブロック線図への信号値の表示

シミュレーションの実行前と実行中は、各タイム ステップの信号値をブロック線図に表示するための端子の値ラベルを追加および削除できます。端子の値ラベルの追加と削除は、個別の信号に対して行うことも、複数の信号を選択して行うこともできます。

この例では、すべての信号に端子の値ラベルを追加します。キャンバスの左上で空の領域をクリックし、ドラッグしてブロック線図内のすべての項目を選択します。次に、[デバッグ] タブの [ツール] セクションの [端子の値] ボタン グループで [選択した信号の端子の値のラベルを表示します] をクリックします。端子の値ラベルを追加した後、シミュレーションで最初にステップを進めるまで、端子の値ラベルには no data yet と表示されます。

The model vdp with port value labels on all signals.

タイム ステップのステップ実行

一時停止時間でシミュレーションが一時停止しているとき、[ステップを進める] ボタンと [ステップを戻す] ボタンを使用して、シミュレーションをメジャー タイム ステップごとにステップ実行できます。ステップを戻すには、ステップを戻す機能を有効にする必要があります。[ステップを進める] または [ステップを戻す] をクリックするごとにシミュレーションが進行するメジャー タイム ステップの数を構成することもできます。詳細については、シミュレーションのステップ実行を参照してください。

[ステップを進める] をクリックします。シミュレーションが 1 メジャー タイム ステップ進みます。端子の値ラベルが更新され、そのタイム ステップの信号値が表示されます。

The model vdp with port value labels

[ステップを進める] をクリックしてシミュレーションの進行を続行できます。シミュレーションを進めながら、端子の値ラベルとモデルの Scope ブロックを使用して信号値を確認できます。

シミュレーションを一時停止するブレークポイントの設定

信号のブレークポイントを使用すると、信号値が指定の条件を満たすたびにシミュレーションを一時停止できます。信号のブレークポイントを使用する場合、既定では、条件を満たすとすぐに、そのタイム ステップ内で信号を生成するブロックの出力メソッドが実行されて信号値が更新された直後にシミュレーションが一時停止します。

ブレークポイント リストで、条件が満たされたときにタイム ステップ内でシミュレーションが一時停止するのか、条件が満たされたタイム ステップの最後にシミュレーションが一時停止するのかを制御できます。ブレークポイント リストで [タイム ステップ内で一時停止] をオフにすると、条件が満たされたタイム ステップの最後にシミュレーションが一時停止します。詳細については、ブレークポイント リストを参照してください。

信号 x1 の値が 0 に近いときのモデルの動作を調べるとします。ブレークポイントの条件を >0 と指定します。等号 (=) 関係演算子を使用して条件を構成することもできます。ただし、その場合は、信号が正確にその値をもつ場合しかブレークポイントでシミュレーションが一時停止しません。ソルバーによって、信号値が 0 に近いが正確に 0 ではないタイム ステップが選択される可能性があります。信号のブレークポイントの条件が >0 であれば、信号値がゼロを通過した直後にタイム ステップでシミュレーションが一時停止します。

信号のブレークポイントを設定するには、次のようにします。

  1. 信号 x1 を選択します。

  2. [デバッグ] タブの [ブレークポイント] セクションで、[ブレークポイントの追加] をクリックします。

  3. [ブレークポイントの追加] メニューで、信号のブレークポイントの条件を定義する関係演算子を選択します。この例では、[>] (より大きい) を選択します。

  4. 信号 x1 の値が 0 より大きくなったときにシミュレーションが一時停止するように、ブレークポイントの条件の値を 0 と指定します。

  5. [OK] をクリックします。

信号 x1 の線の上にある赤の丸は、その信号に有効なブレークポイントがあることを示します。

The enabled breakpoint on the signal x1.

既定では、シミュレーション中に信号線をクリックすると、その線の端子の値ラベルが追加または削除されます。信号 x1 の端子の値ラベルを追加するには、信号線を再度クリックします。端子の値ラベルを削除したときに信号値の履歴は保持されないため、端子の値ラベルには no data yet と表示されます。シミュレーションの次回の進行時に、端子の値ラベルが更新されて信号値が表示されます。

The signal x1 with the enabled breakpoint and port value label.

シミュレーションをブレークポイントにヒットするまで進めるには、[続行] をクリックします。信号値が 0 より大きくなるとシミュレーションが一時停止します。信号 x1 の端子の値ラベルに、ブレークポイントの条件を満たした信号値が表示されます。ブレークポイントのアイコンに、そのブレークポイントでシミュレーションが一時停止したことを示す赤の矢印が表示されます。その信号を生成するブロックが緑で強調表示され、シミュレーションが一時停止したタイム ステップ内の位置が示されます。

The model vdp paused on the breakpoint.

ステータス バーの左側に、シミュレーションが一時停止した位置を示す詳細なシミュレーション ステータスが表示されます。

Detailed pause status on the left of the status bar.

シミュレーションがブレークポイントで一時停止すると、ステータス バーの中央近くにある [ブレークポイント リストを開く] をクリックしてブレークポイント リストを開くことができます。

ブレークポイント リストの緑の強調表示は、シミュレーションがブレークポイントで一時停止していることを示しています。

The Breakpoints List shows information about the breakpoint on the signal x1.

ブロックごとのステップ実行

シミュレーションがタイム ステップ内で一時停止すると、[ステップ オーバー][ステップ イン][ステップ アウト] の各ボタンがアクティブになり、ブロックごとにタイム ステップをステップ実行できます。シミュレーションを次のブロックまでステップ実行するには、[ステップ オーバー] をクリックします。

Outport ブロックの出力メソッドを実行する直前でシミュレーションが一時停止します。ブレークポイントの緑の矢印はなくなります。

The model vdp in a simulation paused just before the Outport block executes.

[ステップ オーバー] を次回クリックしたときは、x2 という名前の Integrator ブロックの出力メソッドを実行する直前でシミュレーションが一時停止します。[ステップ オーバー] をもう一度クリックすると、Integrator ブロック x2 の出力メソッドが実行され、端子の値ラベルが更新されて新しい信号値が表示されます。その後、2 番目の Outport ブロックの出力メソッドを実行する直前でシミュレーションが一時停止します。

The model vdp in a simulation paused just before the second Outport block executes its output method.

タイム ステップ内で一時停止しているときに、Simulink のデバッグ用のプログラム インターフェイスからいくつかの関数を使用して、シミュレーションに関する追加情報を取得できます。たとえば、関数 probe を使用すると、指定したブロックに関する情報を確認できます。端子の値ラベルに表示されるのは、ブロックの出力メソッドをメジャー タイム ステップで実行して得られる信号値だけです。Simulink のデバッグ用のプログラム インターフェイスの関数を使用すると、それらの関数ではマイナー タイム ステップからの結果も表示されるため、異なる値が表示されることがあります。

引き続き [ステップ オーバー] をクリックしてタイム ステップのステップ実行を進めると、Scope ブロックの出力メソッドの実行後にシミュレーションが一時停止し、ブロック線図に緑で強調表示されたブロックがない状態になります。ステータス バーの左側のステータスを示す文字列で、シミュレーションが非表示のブロックで一時停止していることが示されます。ブロックが非表示であるため、モデルに緑の強調表示は表示されません。この場合、非表示のブロックは Outport ブロック用のログの実装の一部です。

引き続き、一度に 1 ブロックずつ、複数のタイム ステップでシミュレーションをステップ実行できます。[ステップを進める] または [ステップを戻す] をクリックすると、タイム ステップ間でシミュレーションが一時停止し、[ステップ オーバー][ステップ イン][ステップ アウト] の各ボタンは無効になります。ブレークポイントでシミュレーションが一時停止すると、[ステップ オーバー][ステップ イン][ステップ アウト] の各ボタンが再び有効になります。

実行順序の表示

シミュレーションをブロックごとにステップ実行する場合、ブロックの実行はブロック線図のレイアウトには基づきません。モデル内のすべてのタスクとブロックについて、その実行順序がシミュレーションの開始時に決定されます。各タイム ステップで、その実行順序に従ってタスクとブロックが実行されます。

ステップ実行するときにブロックの実行順序を把握するために、ブロック線図に実行順序を表示できます。実行順序を表示するには、[デバッグ] タブの [診断] セクションで [情報のオーバーレイ] をクリックします。次に、[ブロック] の下の [実行順序] をクリックします。Simulink エディターの右に、現在のタスクが選択された状態で実行順序ビューアーが開きます。実行順序ビューアーでは、現在のタスクに関連するブロックがモデルで強調表示され、その実行順序を示す注釈が付けられます。

The model vdp is annotated with the execution order. The Execution Order viewer is open on the right of the Simulink Editor.

実行順序の強調表示は、シミュレーションが一時停止した位置を示す緑のデバッグの強調表示に重ねて表示されます。モデルで実行順序の強調表示を表示したままシミュレーションのステップ実行を続けることも、実行順序の強調表示をクリアしてデバッグの強調表示を表示することもできます。実行順序の強調表示をクリアするには、実行順序ビューアーで [強調表示をクリア] をクリックします。

実行順序ビューアーにはタスクの実行順序が表示されなくなり、モデルから強調表示と注釈がクリアされます。緑のデバッグの強調表示が再び表示されます。

The model vdp without execution order highlighting. The Square block is highlighted green. The Execution Order viewer is on the right of the Simulink Editor.

実行順序を再度表示するには、実行順序ビューアーで表示するタスクを選択します。

シミュレーション デバッグ セッションの終了

モデルの解析とデバッグが完了したら、次に何を行うかに応じて、いずれかの方法でシミュレーション デバッグ セッションを終了できます。

現在の時間点からシミュレーションを続け、モデルで構成されている一連のブレークポイントを保持するには、すべてのブレークポイントを無効にします。

  1. ブレークポイント リストを開くには、[デバッグ] タブで [ブレークポイント リスト] をクリックします。

  2. ブレークポイント リストで、[有効] 列のチェック ボックスまたは [すべてのブレークポイントを有効または無効にする] ボタンを使用してすべてのブレークポイントを無効にします。

  3. シミュレーションを再開するには、[続行] をクリックします。

ブレークポイントを保持せずに現在の時間点からシミュレーションを続けるには、すべてのブレークポイントをモデルから削除します。

  1. モデルですべてのブレークポイントをクリアするには、[デバッグ] タブで [ブレークポイントの追加] ボタンの矢印をクリックし、[すべてのブレークポイントのクリア] を選択します。

  2. シミュレーションを再開するには、[続行] をクリックします。

現在の時間点でシミュレーションを停止するには、Simulink ツールストリップの [デバッグ] タブで [停止] をクリックします。

参考

|

関連するトピック