SPEL+からVRunコマンドでビジョンシーケンスを実行する方法

VRunコマンドを使用して、SPEL+プログラムからカレントプロジェクトのビジョンシーケンスを実行することができます。

Function VisionTest  
  
  VRun seq1  
Fend  

上のシンプルなプログラムは、“seq1”というシーケンスを実行して、プログラムをどこから始めるかにより、RUN ウィンドウかオペレーターウィンドウに、グラフィックリザルトを表示します。
VRunの動作は、RuntimeAcquireシーケンスプロパティーにより異なります。このプロパティーは、シーケンスを処理する前に画像を撮影するかしないか、または、トリガー入力を使用することを定義します。次の表は、RuntimeAcquire設定と、VRunの関係を示しています。

RuntimeAcquire VRun Actions 使用
0 - None

画像を撮影しません。

前回の画像を使います。

シーケンスをステップごとに実行します。

同じ画像で複数のシーケンスを実行通常、RuntimeAcquire設定が “Stationary”なら、最初のシーケンスが画像を撮影します。その場合、残りのシーケンスは画像を撮影しません。
1 - Stationary

新規画像を取得します。

シーケンスをステップごとに実行します。

画像を撮影して、シーケンスを実行 (デフォルト)これがVRunを使う最も一般的な方法です。
2 - Strobed

トリガー入力を待ちます。

新規画像を取得します。

シーケンスをステップごとに実行します。

トリガー入力で使用VRun は直ちに戻り、システムはトリガー入力を待ち、画像を撮影してシーケンスを実行します。

シーケンスプロパティーのAsyncModeがTrueの場合、VRunはカメラの露光後に戻り、バックグラウンドで画像取得を継続・完了し、シーケンスを処理します。VGetなど、同じシーケンスの次のビジョンコマンドは実行が完了するまで自動的に待機します。
RuntimeAcquireを“Strobe”に設定した場合、VRunはトリガーを待機状態にし、戻ります。システムはバックグランドでトリガー入力を待ち、画像を撮影してシーケンスを処理します。
シーケンスからリザルトを取得する前に撮影が完了するまで待機させたい場合は、AcquireStateシーケンスリザルトを使用します。

Function VisionTest  
Integer state  
Boolean passed  
VRun strobedSequence  
' 画像が撮像されるまで待機  
Do  
  VGet strobedSequence.AcquireState, state  
Loop Until state = 3  
' リザルトを取得  
VGet strobedSequence.AllPassed, passed  
Fend  

RuntimeAcquireがStrobeの場合にVRunを実行し、「AcquireState =3」を待たずに次のビジョンコマンド(VGetなど)を実行すると、2番目のコマンドはトリガーの受信とシーケンスの実行を待ちます。トリガーが届かない場合、SPEL+ タスクは中止されます。
複数のSPEL+ タスクの実行では、同じカメラを使用しない場合、画像の取得とシーケンスの処理は並行して行われます。
複数のSPEL+タスクで1つのカメラを使い、RuntimeAcquireが「Strobe」に設定されている場合、SyncLockやSyncUnlockを用いて1度に1つのシーケンスが処理されるようにする必要があります。次の例では、シーケンス seq1とseq2はどちらもcamera 1を使用しています。

Function visTask1  
  Integer state  
  Do  
    SyncLock 1 ' camera 1へのアクセスをロック  
    VRun seq1  
    Do  
      VGet seq1.AcquireState, state  
    Loop Until state = 3  
    VGet <some results here>  
    SyncUnlock 1 ' camera 1へのアクセスをアンロック  
Fend  
  
Function visTask2  
  Integer state  
  Do  
    SyncLock 1 ' camera 1へのアクセスをロック  
    VRun seq2  
    Do  
      VGet seq2.AcquireState, state  
    Loop Until state = 3  
    VGet <some results here>  
    SyncUnlock 1 ' camera 1へのアクセスをアンロック  
Fend  

SyncLockおよびSyncUnlockの詳細は、「SPEL+ランゲージリファレンス」を参照してください。

キーポイント


ac2500-14gm/gcのGigEカメラを“Strobe”モード(外部トリガーモード)で使用する場合、外部にストロボ照明が必要になります。

ストロボ照明を使用しない場合、カメラはローリングシャッターモードで動作するため、移動物体を正しく認識できません。