单次收集图画时,常用Snap.vi来编程。,假如咱们接连收集的话,就会想到如下的形式。
可是上图中的形式,收集图画比较慢,因为Snap.vi都包含了初始化和封闭等环节,最快的情况下也得需求120ms。NI为了处理这种问题,添加了Grab.vi来完结接连收集。程序框图如下:
这种情况下一帧数据大约需求40ms。
但是,在高速图画收集的使用中,咱们会发现上一种形式也会存在必定的问题,即当图画收集速度十分高时,处理程序还来不及处理当时的图画,图画缓冲区里边的数据现已被新的图画数据所覆盖了。
为了处理收集缓冲区缺乏的问题,咱们能够添加图画收集缓冲区。
NI-IMAQ供给了两种多缓冲区的方法,分别为Sequence和Ring。
Sequence和Ring都是多缓冲区图画收集方法,区别是Sequence是单次收集,而Ring是接连收集,相似Snap和Grab。
Sequence.vi最最重要的参数是Imahes In,这是一个图画数据缓冲区引证数组,里边包含了多个由Imaq Create.vi创立的图画数据缓冲区的引证。只要知道了多个图画数据缓冲区在哪里,IMAQ Sequence.vi才干完结多缓冲区的图画收集。
Sequnce使用:
Ring图画收集方法(IMAQ的方法,IMAQdx还不太相同):
Ring图画收集方法需求由三个VI来完结,分别是IMAQ Configure List.vi、IMAQ Configure Buffer.vi和IMAQ Extract.vi。
IMAQ Configure List.vi完结缓冲区列表的装备,告知驱动程序缓冲区的数量,以接连仍是单次的方法进行图画收集以及缓冲区的方位。
IMAQ Configure Buffer.vi把创立好的图画缓冲区别配到缓冲区列表的对应方位。
IMAQ Extract Buffer.vi把收集到的图画从缓冲区中提取出来,为后续图画处理做准备。
如下图所示(因为图过长,仅截取要害代码)
第一步,调用IMAQ Configure List.vi告知驱动程序是以Continuous的方法进行图画收集,缓冲区的方位在system—也便是开发引证程序的主机上。
第二步,调用IMAQ Configure Buffer.vi把创立好的图画缓冲区相关到缓冲区列表的对应方位上。
第三步,调用IMAQ Start.vi敞开一个图画收集的进程,需求留意的是,在调用IMAQ Start.vi前,有必要调用IMAQ Configure List.vi和IMAQ Configure Buffer.vi来装备收集进程。
第四步,调用IMAQ Extract Buffer.vi从缓冲区中把图画提取出来。
第五步,把IMAQ Extract Buffer.vi的Buffer to Exact参数设置为-1表明开释当时被提取的缓冲区。IMAQ Extract Buffer.vi在提取图画数据时会对当时被提取的缓冲区进行维护,所以当收集进程完结时,需求开释当时被维护的缓冲区。
Ring图画收集方法完结的首要进程如上所述,其他过程便是我们了解的初始化收集硬件、开释图画收集硬件和开释缓冲区了。