テストとデバッグ
この記事は、プログラムの実行と分析で提供された情報を拡充しています。
実行とパフォーマンス
Aurora Vision Studioは、ユーザーがアプリケーションをデバッグし、プロトタイプを作成することを可能にします。さまざまな機能が提供され、これらはプログラムの設計とテストをサポートします。
これらの機能はデフォルトで有効になっており、これによりAurora Vision StudioはAurora Vision Runtimeとは異なる動作をします。
これらの設定はパフォーマンスとプログラムのフローの両方に影響を与える可能性があります。そのため、最終バージョンの動作をテストする際にはこれらの設定は推奨されません。
パフォーマンスに影響を与える設定
パフォーマンスに顕著な影響を与える2つの設定があります。最初のものは診断モードです。 多くのフィルタには診断出力があり、診断モードがオンの場合、これらの出力にはプログラム設計中に役立つかもしれない追加データが含まれます。 ただし、この追加データの計算と保存には時間がかかります。プログラムによっては、これがかなりの遅延を引き起こす可能性があります。 このモードは、アプリケーションツールバー内の ボタンでオフに切り替えることができます。
Aurora Vision Runtimeと比較してパフォーマンスに悪影響を与える別の設定はプレビューアップデートモードです。プレビューされているポートは、この設定に従って更新されます。 プレビューの更新は一般的にはかなり速いですが、プレビューされているデータの量と複雑さに依存します(大きなImageやSurfaceのインスタンスは表示に Integerのインスタンスよりも時間がかかります)。
アクティブなプレビューがある場合、プログラムエディタでフィルタが表示されているだけで、いくらかのオーバーヘッドが発生します(フィルタが実行される頻度に関連しています)。 これはAurora Vision Studioが進捗を表示する方法に関連しています。 Program » Previews Update Mode » Disable Visualizationオプションはプレビューを完全に無効にします。 オーバーヘッドは一般的に小さいですが、プログラムの反復も短い場合には目立つかもしれません。
両方の設定はプログラム実行設定でも変更できます。
診断モードとプレビューを無効にすると、Studioはランタイムとほぼ同じ速さでプログラムを実行します。
実行フロー
StudioとRuntimeの実行の間にはもう一つの違いがあります。デフォルトでは、Studioは例外、警告、またはアサーションが発生したときに一時停止するように設定されています。
例外が発生すると、プログラムはエラーハンドリングで処理されていても一時停止します。
Runtimeは可能な限り、それら全てを実行し続けます - コンソールでのみ報告されます。
Studioをこの点でRuntimeと同様に動作させるには、次の設定を無効にする必要があります:
- 例外が発生したときに中断
- これはエラーがプログラムを終了させるのを防ぎません。これはエラーハンドリングでのみ実現できます。
- 警告が発生したときに中断
- アサーションが失敗したときに中断
テスト中の任意の時点で、ここまでに実行されたすべてのフィルタに関する統計情報を表示することができます。
動作モード
デバッグ中にプログラムを実行できる2つのモードがあります:通常モードと反復モードです。
- 通常モードでは、プログラムはユーザーが一時停止するか、終了するまで連続して実行されます。このモードでは、プレビューはプレビューアップデートモード設定に従って更新されます。
- 反復モードでは、ユーザーはマクロフィルタにステップイン、ステップオーバー、またはマクロフィルタの終了にステップし、表示されているマクロフィルタを反復できます。
どちらのモードも、以下で説明する要素に遭遇した場合に一時停止します。
実行の一時停止
以下の要素によりアプリケーションが一時停止する可能性があります。これらのいずれかに遭遇した場合、アプリケーションは起動されたモードに関係なく一時停止します:
プログラムはまた、いつでも一時停止ボタンを使用して停止できます。
ブレークポイント
ブレークポイントを使用すると、プログラムの実行が一時停止するポイントを指定できます。これはStudioでのみ有効です。
- ブレークポイントは、フィルタや出力ブロックの任意の場所に右クリックしてToggle Breakpointを選択するか、F9を押すか、Program Editorの左側にホバーして設定できます。
- ブレークポイントはプロジェクトに保存されず、プログラムを再読み込みすると消えます。
- ブレークポイントはそれらを含む特定のマクロフィルタのすべてのインスタンスで共有されます。例えば、TestMacroの中にブレークポイントがある場合、最初と2番目の実行の際に両方でプログラムが一時停止します。
- ブレークポイントはHMIイベントにも設定できます。
- ブレークポイントはすべてのワーカースレッドに影響します。
シングルスレッドのデバッグとテスト
1つのワーカータスクしか持たないアプリケーションは一般的なデザインパターンです。このようなアプリケーションを起動すると、それは終了するか一時停止されるまで連続して実行されます。
アプリケーションを反復モードで起動することもできます。これにより、アプリケーションはMainから始まります。
1回の実行中には通常モードと反復モードの両方が使用できます。たとえば、通常モードで開始してブレークポイントまで進み、反復モードで続行し、最後に通常モードで終了することができます。
プログラムを開始する第三の方法は、フィルタを右クリックしてRun Until Hereを選択することです。プログラムは指定されたポイントまで通常モードで実行され、その後一時停止します。
- ブレークポイントとは異なり、この方法で指定されたポイントはユニークです。プログラムは、プログラム内に異なるインスタンスがあっても、指定されたマクロフィルタのインスタンスでのみ一時停止します。
HMIイベントもデバッグできます。ブレークポイントをイベント処理マクロフィルタ内に配置すると、プログラムは正しく一時停止します。イベント内のポートはプレビューに接続できます。
ただし、イベントではRun Until Hereオプションを使用することはできません。
異なるワーカータスクまたはHMIイベントからポートの値をプレビューすることが可能です。これらは関連する設定に従って更新されます。
マルチスレッドのデバッグとテスト
複数のワーカータスクを持つアプリケーションには新しい概念が導入されます。その最初の概念はプライマリワーカータスクです。これはプログラムの実行時間を制御するTaskマクロフィルタです。 プライマリワーカータスクが終了すると、他のワーカータスクも終了します。それらがまだ実行中であってもです。
逆に、そのワーカータスクが実行されている限り、他のワーカータスクが終了していてもプログラムは継続して実行されます。 プライマリワーカータスクはユーザーによって選択され、プログラムが実行されている間は変更できません。 プライマリワーカータスクマクロフィルタを選択するには、右クリックしてSet as Primary Workerを選択するか、プログラムが実行されていないときにツールバーのComboBoxで選択できます。
二つ目の概念はTracked Taskです。これはアクティブにトラッキングされているタスクで、反復モードで実行することができ、その呼び出しスタックは下部に表示されます。 プログラムが一時停止すると(上記で述べた理由で)、Aurora Vision Studioは自動的に一時停止が発生したワーカータスクをTracked Taskにします。 また、手動でトラッキングされるワーカータスクを変更することも可能です - 右クリックしてTrack This Workerを選択するか、プログラムが一時停止しているときにComboBoxで選択します。
プログラムに複数のワーカータスクがある場合、ツールバーの左側にはRunボタンの左に別の要素が表示されます。 これはComboBoxとして機能し、ユーザーに対してRunボタンの振る舞いを、すべてのワーカータスクを実行するか、プライマリワーカータスクのみを実行するかの切り替えを許可します。
プログラムが開始される前にのみ、それを切り替えることが可能です。プログラムが一時停止されると、すべてのワーカータスクが一時停止されます。
反復モードでは実行されるのは1つのワーカータスクだけであり、それがトラッキングされているワーカータスクです。他のワーカータスクは一時停止されているため、デバッグに重要な情報を交換する場合は、ある時点で通常モードを使用する必要があります。
プログラムが反復モードで開始される場合、その瞬間に表示されているワーカータスク(または表示されているマクロフィルタを含むワーカータスク)がトラッキングされるワーカータスクとして設定され、このスレッドのみが実行されます。 いつでも通常モードで実行して、残りのスレッドを起動することができます。
プライマリワーカータスクは、プログラムが実行されているときにその名前に直接アスタリスクが付いて表示されます。アクティブなワーカータスクは、プログラムがオフのときも実行中のときも太字になります。
プログラム コンボボックス
ツールバーのComboBoxは、ユーザーがプライマリワーカータスクとトラッキングされるワーカータスクの両方を指定できるようにします。アクティブなスレッドも表示できます。 プログラムの状態によって、その機能が変わります。
プログラムが実行されていないか停止している場合、ComboBoxはプライマリワーカーを選択します。これはプライマリワーカーを設定する2つの方法の1つです(もう1つは希望のワーカータスクを右クリックすることです)。
プログラムが開始され、一時停止している場合、ComboBoxはその瞬間に存在するすべてのアクティブなスレッドを表示します。これには、イベントが実行されているときに一時停止が発生した場合、HMIイベントも含まれます。 すでに終了したすべてのワーカータスクは表示されません。ユーザーはComboBoxでアクティブなワーカータスクをトラッキングされるワーカータスクとして設定できます。
プログラムの反復
プログラムを反復モードで実行するには、Application Toolbarにあるボタンを使用します。前述のように、反復アクションはシングルスレッドです。トラッキングされている以外のすべてのワーカータスクは反復中に一時停止します。
反復に関する追加情報は、Running and Analysing Programsで見つけることができます。
プログラムを反復
Iterate Program ボタンは、プライマリワーカータスクの1回の反復を実行します。
現在のマクロを反復
Iterate Current Macro は、プログラムを起動し、可視なマクロフィルタのインスタンスの1回の反復が終了するとすぐに一時停止します。
反復バック
特定の状況下で反復バックが可能です。つまり、反復を逆にして前のデータに戻ることです。このオプションの要件は次のとおりです:
- プログラムはフィルタの1回の反復が完了した後に一時停止している必要があります(Iterate Current Macroまたは Iterate Programで)。
- フィルタはタスクまたはワーカータスクである必要があります。
- フィルタはプライマリワーカータスクであるか、その中にある必要があります。
- 反復バックするタスクマクロフィルタには他のタスクマクロフィルタが含まれていてはなりません。
- タスク内の少なくとも1つのループジェネレータは確定的であり、データのソースである必要があります(たとえば、列挙フィルタである必要があります)。いくつかの例には次のものがあります:
EnumerateImages や EnumerateFiles のようなフィルタは、最初の反復の前にオブジェクトのリストを作成し、それを列挙します。 そのリストは後の変更(画像やファイルの追加/削除)を反映しません。
少なくともタスクに1つ以上の列挙フィルタが存在する限り、反復バックが可能です。さらに、列挙子でなくても他のループジェネレータが存在することがあります。
以下は、それ自体では反復バックを許可しないフィルタの例です:
- カメラ取り込みフィルター、例えばGenICam_GrabImage。
- Loop — 反復バックするデータはありません。
- 通信フィルター、例えばTcpIp_ReadLine。
これらのフィルターが反復バック可能なタスク内にある場合、それらは通常の、逆にされていない反復と同様の動作をします。
ステップ ボタン
プログラムをステップバイステップで移動するためには、ユーザーには3つのオプションがあります。それらは:Step Over、Step Into、およびStep Outです。
これらのボタンについてはこちらで説明されています。
反復オプションの結論
以下の表は、全ての反復オプションを簡潔に説明しています:
メソッド | プライマリ ワーカー | トラックされたワーカー | 実行されるワーカーの数 | HMI イベント内で使用可能 |
---|---|---|---|---|
実行 () 通常モード |
ユーザーが開始前に選択 | プライマリ ワーカー | すべて | はい |
実行 () 通常モード |
ユーザーが開始前に選択 | プライマリ ワーカー | 1 (トラックされたワーカー) |
はい |
ここまで実行 (コンテキストメニューオプション) |
ユーザーが開始前に選択 | 選択したオプションがあるワーカー | すべて | いいえ |
ステップ |
ユーザーが開始前に選択 | 選択したオプションがあるワーカー | 1 (トラックされたワーカー) |
はい (イベントがトラックされている場合) |
プログラムを反復 |
ユーザーが開始前に選択 | プライマリ ワーカー | 1 (プライマリ ワーカー) |
いいえ |
現在のマクロを反復 |
ユーザーが開始前に選択 | 選択したオプションがあるワーカー | 1 (トラックされたワーカー) |
いいえ |