有无图像没图像
是否黑屏黑屏,白屏,花屏
是否亮灯亮红灯
是否开机不开机
故障设备找不到相机
编程模型和流程
对于相机来说,常见编程时我们关注三个对象——相机对象、采集对象、参数对象。
相机对象(Camera Object):负责相机的连接、断开等工作。
采集对象(Grab Streamer):负责相机的采集队列分配、相机单帧、连续采集。
参数对象(Parameter Object):负责相机参数的设置。
不同的SDK可能安排不一样,一般来说要不是三种对象的功能合并到“相机对象”中,要不是分为三种对象,其实采集对象和参数对象都是在“相机对象”上封装而来。
工业相机是机器视觉系统中的一个关键组件,其本质的功能就是将光信号转变成高清工业相机为有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的不仅是直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。工业相机又俗称摄像机,相比于传统的民用相机(摄像机)而言,它具有高的图像稳定性、高传输能力和高抗干扰能力等,目前市面上工业相机大多是基于CCD或CMOS芯片的相机。
可以看到相机编程需要做三方面工作:
1.初始化操作
先初始化相机驱动Com环境,然后遍历得到当前的相机列表,根据相机ID或List 编号选择对应相机。
之后连接相机,先设置本次采集的相机参数(帧速、图像大小、缩放比等),然后是分配和注册当前DMA队列,这里有的是用户完成,有的是SDK完成。
之后先开启DMA逻辑等待相机采图,然后使相机开始工作采图,整个系统就按照之前工作流程运作起来了,许多SDK将“开启DMA”和“相机开始工作”合并为“开始采集”。
2.结束操作
先停止相机工作再关闭DMA逻辑,许多SDK将“开启DMA”和“相机开始工作”合并为“结束采集”。
然后清理DMA队列,和分配时对应,这里有的是用户完成,有的是SDK完成。
后断开相机并清理工作环境。
这里使用三个队列完成采集和处理同步。
DMA队列:
当CMOS或CCD芯片曝光然后将数据转到相机缓存后,这时候DMA会负责将缓存中数据写入到“DMA队列”头Buffer中。
准备队列:
一旦“DMA队列”头Buffer被填充完成,会被加到“准备队列”尾后,这时候会发送中断通知用户程序:当前又有一帧数据采集完成,您看着处理吧。
处理队列:
当用户接收到中断会自动跳转到中断函数中,使用GetFrame拿取“准备队列”头Buffer,然后加到当前用户程序“处理队列”尾,用户程序从“处理队列”头拿取Buffer处理完成后使用PutFrame将Buffer再添加到原始的“DMA队列”尾。
http://www.dianlubanweixiu.cn