通过SPEL+运行视觉序列:VRun

通过使用VRun命令的SPEL+程序,您可以在当前的项目中运行任何视觉序列。

Function VisionTest  
  
  VRun seq1  
Fend  

以上的简单程序将会运行名为"seq1"的序列,并在Run窗口或Operator窗口中显示图像结果,这取决于程序从哪里启动。
VRun采取的行动取决于RuntimeAcquire序列的属性。该属性决定在处理序列之前是否拍了照片,或者是否使用了闪光灯。下表显示了针对RuntimeAcquire的不同设置执行VRun时会发生什么情况。

RuntimeAcquire VRun动作 用途
0–None

不要拍照片。

使用先前的照片。

运行每一个序列步骤。

允许在相同的图片上运行多个序列。通常,在RuntimeAcquire设置为Stationary时,由第一个序列拍照。余下的序列不进行拍照。
1–Stationary

读取新图片。

运行每一个序列步骤。

默认。这是使用VRun最常见的方式。拍一张照片并运行序列。
2–Strobed

等待闪光输入。

读取新图片。

运行每一个序列步骤。

与闪光输入一同使用。VRun将立即返回,然后系统将在拍照和运行序列之前等待闪关灯触发。

当序列属性AsyncMode为True时,VRun会在相机曝光后返回,并在后台继续完成图像捕捉,然后处理序列。同一序列的下一视觉命令,如VGet,将自动等待处理完成。
当RuntimeAcquire设为Strobe时,VRun会武装触发器,然后返回。系统会在后台等待触发器启动并捕捉图像,然后处理序列。
您可能需d要等待完成捕捉方可从序列中检索结果。您亦可通过检查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,然后第二个命令将等待接收触发并运行序列。如果接收不到触发,将中止SPEL+任务。
当您在执行多个运行视觉序列的SPEL+任务时,如果相机不同,将并行捕捉图像并处理序列。
如果多个SPEL+任务使用同一相机且RuntimeAcquire设为Strobe,那么您只能使用SyncLock和SyncUnlock每次处理一个序列。在以下实例中,序列1和序列2均使用相机1。

Function visTask1  
  Integer state  
  Do  
    SyncLock 1 '锁定对相机1的访问  
    VRun seq1  
    Do  
      VGet seq1.AcquireState, state  
    Loop Until state = 3  
    VGet <some results here>  
    SyncUnlock 1 '解锁对相机1的访问  
Fend  
  
Function visTask2  
  Integer state  
  Do  
    SyncLock 1 '锁定对相机1的访问  
    VRun seq2  
    Do  
      VGet seq2.AcquireState, state  
    Loop Until state = 3  
    VGet <some results here>  
    SyncUnlock 1 '解锁对相机1的访问  
Fend  

关于SyncLock和SyncUnlock的详细信息,请参见 SPEL+ Language Reference Manual。

要点


在闪光模式(外部触发模式)下使用ac2500-14gm/gc GigE相机,需要使用外部闪光灯。

如果未使用闪光灯,相机会以滚动快门模式工作并且无法正确识别移动对象。