通过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相机,需要使用外部闪光灯。
如果未使用闪光灯,相机会以滚动快门模式工作并且无法正确识别移动对象。