滨松ORCA-Flash 4.0系列相机大数据量图像采集解决方案
在某些应用中,相机需要长时间工作,采集数据量较大,相机工作的稳定性和整个系统数据传输的稳定性就显得尤为重要。本文中将介绍大数据量图像采集链路中各个环节的优化办法,以及出现问题后如何排查。
|
如图1所示,相机可以工作在外触发或者是内触发两种模式下,在外触发模式下,相机接收外部输入的外触发信号,根据触发模式和信号情况,进行图像采集和数据读出。内触发模式下,相机根据内部时序或者软件中的采集命令进行图像采集和数据读出。经过数据线缆(CameraLink或者USB3.0线缆)连接到采集卡,采集卡安装在工作站主板的PCI-E插槽上,经过一系列传输,最终存储到工作站的硬盘中。
在图1中的各个环节中,都会出现影响最终数据采集结果的情况,而且根据客户应用情况的不同,采集链路可能会变得更加复杂。
结合图1中的图像链路情况,下面会对每个环节中的注意事项进行介绍。
|
1. 软触发信号(软件给出命令)
在SDK中,dcam_capture( )函数用于采集图像,dcam_idle( )用于停止采集。当dcam_capture( )执行完成,那么相机就做好了开始采集图像的准备。相机的capture模式有两种,Snap和Sequence。
• Snap模式用于采集指定数量的图像;
• Sequence模式下相机持续采集图像,保存指定数量的图像。
|
用户可以在编程时根据需要进行选择,相比来说,Sequence模式消耗资源要大于Snap模式。
在相机从初始化到采集再到停止时,相机的工作状态是不同的,如图2所示。
当相机在busy状态下时,我们建议不要对相机进行操作,如设置曝光时间,这时对相机进行的操作是可能无法正常识别,而且有可能对图像采集造成影响。
当然,相机的正常采集还需要运行其他函数,在此不一一介绍,详细可参考SDK说明文档(附链接)。
|
正常情况下,相机接收到外部触发信号后,根据触发模式选择的不同,进行图像采集。这种使用条件下,客户需要对不同的触发模式有所了解,根据应用需求进行选择。在设置触发信号时,需要注意以下几点:
(1) 相机可以接受的触发信号一般是脉冲信号,根据触发模式不同,识别上升沿或者脉冲宽度进行曝光。为了保证相机能够正常的识别触发信号,要求触发信号幅值要高于3.3 V,但是并不是越高越好,一般要求最高不要超过4.3 V。
|
(2) 触发信号输入时,要保证相机没有在进行曝光或者数据读出,否则将无法识别触发信号。为了能够正确识别相机已经准备好接收触发信号,滨松的相机提供一个对外输出的trigger ready的信号,当这个信号有效时,表示可以输入下一个触发信号,在图4中以Edge trigger模式为例进行说明:
相机在接收到External trigger之后开始曝光,在第一行曝光结束后开始sensor readout。之后开始data output,这里Camlink接口与USB3.0接口的传输时序有所不同,Camlink的data output是和sensor readout同步的,而USB3.0是要在sensor readout完成后才开始。这主要是因为Camlink中是差分信号,每个数据通过16对数据线同步传输。而USB3.0在传输时要经过USB3.0协议的处理,所以两者的输出方式不同。这也是为什么Camlink的传输时间要比USB3.0快的原因之一。可以看到,在data output完成后,trigger ready变为高电平,此时表示,相机可以接收下一个触发信号。在USB3.0的传输时序上是有所不同的,这是因为data output的下降沿表示的是图像数据已经传输至上位机缓存中,而trigger ready有效时,表示的是相机已经完成了曝光和传输。需要注意的是USB3.0接口中,trigger ready变为有效的时间点是无法计算的,因为USB3.0的传输协议处理时间不稳定,所以无法计算。相比来说,Camlink的时间会更稳定一些。
|
图4 Flash 4.0 V2相机edge trigger模式时序图
|
(3) 信号输入前建议加入先进行滤波。干扰信号对于采集的影响是很大的,当相机将干扰信号识别为触发信号时,也会开始正常的曝光和读出,在这个过程中,如果真正的有效信号输入时,相机可能无法识别,对于客户看到的现象来说,就是相机没有正常响应。所以滤除高频的噪声信号是必要的。
|
相机和采集卡之间根据使用接口的不同,通过CameraLink线缆或者USB3.0线缆连接。请注意,如果同时连接两种接口,软件是无法正确识别相机的,所以请不要做这种尝试。
对于CameraLink接口的相机来说,我们会随货提供线缆及采集卡,这些产品都是经过我们测试的,所以客户可以放心使用。如果客户自己选择采集卡和相机,则需要注意下面几点:
(1)CameraLink采集卡根据传输带宽的不同,分为base、medium、full和8*10tap接口,从外观上看,base接口的采集卡一般会有一个会两个CameraLink接口,在连接相机时,只使用一个接口。而medium、full和8*10tap的采集卡从外观上看都是两个接口,而且在连接时,需要两个接口都连接到一个相机上。所以在选择时需要注意接口参数。作为参考,滨松Flash 4.0为了保证最高帧频下的传输,选择的是8*10tap接口。
|
接口类型
|
带宽
|
实际使用
|
最大传输距离
|
CameraLink base
|
75M*8bit*3=1.8Gbps
|
100%
|
15m
|
CameraLink medium
|
75M*8bit*6=3.6Gbps
|
100%
|
15m
|
CameraLink full
|
75M*8bit*8=4.8Gbps
|
100%
|
15m
|
CameraLink 8*10tap
|
75M*8bit*10=6Gbps
|
100%
|
15m
|
USB3.0
|
5Gbps
|
50%
|
5m
|
(2) CameraLink线缆方面,CameraLink线缆的最长传输距离不超过15m,对于高速采集图像数据的传输,我们建议使用不超过5m,否则会容易发生数据丢失。而且使用的两根CameraLink线缆需要长度一致,否则也可能导致图像数据丢失的情况。如果超过15m的线缆则需要在线缆中加入中继才能够保证传输效率。
|
图5左所示是Flash 4.0 V2相机常规配备的Active Silicon AS-FBD-1XCLD-2PE8采集卡,这款采集卡支持Base, Medium, Full and 80 bit (Deca)模式,并且支持PoCL (power of CameraLink).
|
图5 AS-FBD-1XCLD-2PE采集卡(左)与PCI Express 插槽分类(右)
|
可以看到,这块采集卡是PCI-E x8接口,一般概念中,X8的卡和X8的插槽是匹配的,但是我们建议在使用PCI-E X8的采集卡,要安装在PCI-E x16插槽中,这样才能保证能够完全达到x8的带宽。
|
图6中是我们的V3相机配备的Active silicon AS-FBD-1XCLD-2PE4L采集卡,基本参数与之前V2相机使用的采集卡一致,但是插槽变成了PCI-E x4,我们建议将这款采集卡安装在x8或者x16的插槽上。
|
总体来说,为了保证能够达到采集卡PCI-E最高的带宽,我们建议将采集卡插在比采集卡PCI-E接口高一个等级的插槽中。
另一方面,为了能够进行大数据量的处理,一般使用的工作站中不仅仅只有一个处理器,不同的PCI-E插槽可能会与不同处理器进行连接。如果此时客户在一台工作站下连接了多台相机,我们建议将采集卡安装在同一个处理器连接的PCI-E X16插槽上。
这样安装的优势在于,连接同一个处理器的多个PCI-E插槽,避免了在工作站工作时相机数据采集和处理时,两个处理器之间的频繁通信,降低了CPU的供电的负荷。
当然,并不是完全不可以连接在对应两个处理器的PCI-E插槽上,这种连接方式也有它的优势,这样安装时,可以减少CPU的处理压力,减少资源占用,预计可以降低至50%,也可以避免在数据存储时丢帧。
客户可以根据实际的使用情况进行安装方式的选择。
|
项目
|
设置为
|
Inter speed step
|
Don't have this setting
|
C-states
|
disable
|
Inter turbo boost
|
enable
|
Non-uniform memory access
|
Don't have this setting
|
一般来说,经过上文中描述的方法进行连接后,是可以保证相机正常采集和存储的,但是在不同应用中,客户使用相机的方式各有不同,为了用户能够在出现问题时快速的分析和定为问题,下面介绍几个简单的办法。
一般出现问题时,最直观看到的现象就是没有获得需要采集的图像,例如连续采集100张图片时,最终存储到硬盘的图像只有99张。客户习惯将这种情况称为丢帧,或者丢失图像数据,这种问题描述容易使技术人员产生误解,会惯性的认为图像采集到但是在传输过程中丢失了,实际上,没有采集到图像的可能性有很多,包括触发信号的问题、相机与采集卡之间传输、工作站工作状态问题。
当出现问题时,可以先按照上文中提到的优化方式对采集链路进行优化。
1. 替换可能出现问题的器件进行排查测试
在排查问题时,需要逐个环节排查,确认一个环节无误后再进行下一个环节的测试,最简单的方式是通过更换已知稳定的器件替换采集链路上的器件进行测试。例如,在排查触发信号问题时,我们可以将信号源更换为信号发生器,信号发生器作为理想信号源我们认为是不会存在问题的,如果更换后依然存在丢失图像的情况,那么证明问题可能不在触发信号处。
2. 对比触发信号与相机输出信号判断外触发信号是否异常
我们的相机后端共有四个信号接口,其中1个是外触发信号输入端,另外三个是信号输出端,相机可以输出trigger ready、global exposure和programable三种信号,验证触发信号时可以将trigger input信号与trigger ready信号进行比较,检查是否有信号是在trigger ready信号有效之前输入的,如果有,那么这个信号将无法别识别。
3. 编程中加入相关功能协助分析问题
dcam_gettransferinfo函数可以记录每次采集到的图像序号,一旦有图像进入buffer后记录一次信息。如果在图像采集过程中有图像没有采集到,则最终图像计数将会比设置的数量少。
dcam_wait( )函数可以在设定的事件发生时做出反馈。dcam_wait( )包含几个事件,其中对采集问题判断作用较大的三个事件是:
DCAM_EVENT_FRAMEBEGIN: 表示图像数据开始传输
DCAM_EVENT_FRAMEEND: 表示图像数据传输完成
DCAM_CAPTUREEND: 表示图像采集结束,指的是在dcam_capturemode_snap之后调用dcam_idle( )的时间点
|
如果dcam_wait( )函数异常,会返回error信息:
DCAMERR_ABORT: 表示事件被终止;
DCAMERR_BUSY: 表示wait的次数过多;
DCAMERR_INVALIDHANDLE: 无效的相机句柄;
DCAMERR_TIMEOUT: 事件未发生,等待超时;
dcam_getstatus()函数可以获得相机当前的状态,结合dcam_wait( )中的报错可以对问题情况进行初步判断。
DCAM_STATUS_BUSY: 相机正在进行图像采集;
DCAM_STATUS_READY:图像采集准备完成;
DCAM_STATUS_STABLE:相机已经完成所需要的设置;
DCAM_STATUS_UNSTABLE:相机参数未被成功写入;
加入这些函数并记录log文件,在出现问题时,我们可以快速定位出现问题的时间点,了解相机在出现问题时的采集状态。结合整体系统工作情况,可以对问题进行一个初步判断。
4. 使用dcamspylog工具记录相机工作情况
Dcamspylog工具是我们自己开发的一款log文件记录插件 (下载地址 ) 从连接上相机开始一直到相机停止工作,会记录相机相关的工作情况,如果工作过程中出现错误也会被记录下来,但是用户无法读取改文件,需要专门的软件才可以获取其中的信息。Dcamspylog文件是滨松帮助分析问题的关键文件,其中的内容对于问题的记录是最全面的,所以在向我们反馈问题时,请首先将dcamspylog文件提供给滨松工程师进行分析。
|