VisionPro利用Acquisition FIFO(先进先出)队列来获取图像。要获取图像,需要向FIFO发送一个取像请求,取像请求发送后,在获取图像过程中,你可以处理其它任务,也可以等待图像获取完成再进行其它任务。Acquisition FIFO首先处理最早的取像请求,并将在取像过程中发送的请求队列,在取像完成时相应的取像请求将从取像队列中移除。
1.1.基本概念介绍
ICogAcqFifo由ICogFrameGrabber对象创建,frame grabber安装在电脑上,用来控制与之连接的电脑。特定的frame grabber模式决定了你可以使用什么种类的相机以及视频的可用特征。当你创建一个Acquisition FIFO对象,你要设定用来描述相机特征的视频格式及像素深度,一旦创建了Acquisition FIFO对象,你将不能改变与其相连的frame grabber,也不能改变视频格式。
根据特定的模式,frame grabber可能会有一个或多个相机端口,你创建了一个Acquisition FIFO,你可以设置用于连接的相机端口。但是,你必须明白一点frame grabber的相机端口可能不可以同时取像。你也可以利用已存在的FIFO创建一个从Acquisition FIFO,以用来从两个或多个像源获取图像。
视频格式用来描述特定的相机模式,以及用来控制相机物理我口与Frame grabber的各种参数,例如图像尺寸大小、最大像素深度、资源同步性等。康耐视提供了一些视频格式的配置文件,用来排定上述参数。虽然它们不可编辑,但你可以看到这些CCF文件,这毕件在Visionpro软件安装的时候默认安装在C:\ProgramFiles\Cognex\VisionPro\bin路径
在Visionpro中,视频格式通过字符串来描述,字符串包含了相机制造商、模式、同步信息等参数。为了帮助使用者选择视频格式,确保使用有效的视频格式名称,下表对怎样解释视频格式名称做了介绍。以"Sony XC-75 640x240 IntDrv(rapid-reset,shutter-sw-SDONPISHA)CCF为例,
1.3.相机端口和视频通道(Camera Ports and Video Channels)
康耐视大部分的frame grabber允许连接多个相机,尽管如此并不是说你可以同时从所有的相机取像,能够同时取像的相机数量取决于frame grabber的视频通道数目,视频通道是(video channel)frame grabber用来处理图像的硬件;一个视频通道能够服务于多台相机端口,Visionpro提供了一个函数NumVideoChannels,用来报告您的framegrabber拥有的视频通道的个数。在一些framegrabbers上可能有不同格式的相机端口,例如可能有模拟相机端口和数字相机端口,在这种情况下,你可以用GetNumCameraPorts函数来获取给定相机格式的相机端口数量,你也可以通过NumCameraPorts来获取创建时所选视频格式的可用相机端口数量。
1.4.取像请求(Acquisition Requests)
Acquisition FIFO根据取像请求来获取图像,图像请求的产生方式取决于为Acquisition FIFO设置的CogAcqTrjggerModelConstants值,你可以根据自己的具体需要来指定触发方式。有以下几种触发方式可以选择:
混合方式。
手动触发是最简单的一种触发方式,这种触发方式下,通过调用StartAcquine函数来发出取像请求,通过调用CompleteAcquire函数来获取已经可用的图像;采用这种方式,在取像的过程中,您可以发送新的取像请求或处理其他事情,不必等待本次取像完成。如果你想在发送取像请求后等待图像获取完成,您可以采用Acquire函数。
2.硬件触发(Automatic Triggering)
一些情况下,采用外部触发方式是最好的选择。每一个frame grabber最少提供一个用来发送触发请求的触发输入端,当取像软件检测到触发信号上的跳变信号时,开始取像。这种方式下,使用手动触发会产生错误。同样,你可以通过调用CompleteAcquire函数根据取像请求的顺序来获取图像。
Acquisition FIFO的大小是32,你必须获取图像已将其移出FIFO。否则FIFO将被填满,后来的图像请求将被忽略。您可以利用GetFifoState可监控FIFO中在排队的取像求取的个数,利用CompleteAcquire来获取未处理的图像,利用Flush函数来移除未处理的取像请求。如果您想忽略触发信号,你可以利用TriggerEnabled属性来使能或禁用触发信号另外,如果两台或多台相机共用一个触发线也不会报错,但是,最先获得触发源的FIFO将获取图像,其他的FIFOS将被阻塞。
3.硬件半自动(Semi-automatic Triggering)
硬件半自动是一种混合触发方式,是硬件触发方式和手动触发方式的组合,可以通过调用取像函数或外部触发信号来获取图像。
4.自由运行(Free Run Triggering)
这种触发方式下,取像系统以相机所能支持的最大帧率取像,你在应用程序中必须通过调用Complete Acquire来获取下一个可用图像,不能再使用Start Acquire。
(1)选择硬件,设置取像参数:
(2)设置触发方式:
(3)图像属性:
(4)设置GigE参数:
(5)设置自定义属性参数: