机器视觉行业里面,相机作为最重要的图像传感器,除了主要的拍摄功能外,它也承担了一部分信号控制功能.
一方面能够接受外部的触发信号例如PLC、光电传感器等,进行指定时刻拍照;另外一方面,能够输出IO信号,控制外围机构进行机械运动;
海康标准工业相机,支持1路GPIO输入,1路GPIO输出,一路可配置的IO输出(非光耦),本文主要讲一下如何使用SDK进行IO配置以及注意事项
IO输入的主要作用就是,相机通过IO管脚,收到1个IO信号,相机就立即拍摄一帧图像;
通用的使用方法如下代码依次设置:
-
触发模式:TriggerMode设置为1,开启触发模式
-
触发源选择:TriggerSource设置为0,选择line0,也可以选择line2,或者选择anyway;line0、line2取决于硬件电路接线,anyway支持软触发、硬触发同时使用,需要看相机是否支持
-
沿信号TriggerActivation:默认上升沿触发(可以不设置)
-
触发缓存TriggerCacheEnable:默认不开启。当相机同时收到两个触发信号时,不开启此功能,相机只会响应1个信号,出一张图;开启后,相机会自动缓存第二个信号,上个信号处理完毕后,立即处理缓存信号
-
触发延时TriggerDelay:收到信号后,固定延迟一段时间再曝光
-
滤波设置 LineDebouncerTime:去除信号毛刺抖动,根据实际情况进行调节
nRet = MV_CC_SetEnumValue(handle, "AcquisitionMode", 2);
nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 1);
nRet = MV_CC_SetEnumValue(handle, "TriggerSource", 0);
nRet = MV_CC_SetEnumValue(handle, "TriggerActivation", 0);
nRet = MV_CC_SetFloatValue(handle,"TriggerDelay",0);
nRet = MV_CC_SetBoolValue(handle,"TriggerCacheEnable",TRUE);
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 0);
nRet = MV_CC_SetIntValue(handle,"LineDebouncerTime",10);
触发配置:

滤波:

IO输出,参考用法主要分为两类
- strobe输出,配合频闪光源拍摄,IO输出跟随曝光,输出周期与曝光周期同步
- software输出,用户自定义时刻输出,用户自主控制,必要时刻输出OK或NG信号
- strobe输出配合频闪光源,IO输出与曝光同步
这里需要注意StrobeLineDuration、StrobeLineDelay、StrobeLinePreDelay三个参数,用于调节与光源同步;光源的LED从灭到亮有个响应时间,那么我们就需要适当的去调节StrobeLineDelay/StrobeLinePreDelay这两个值去做匹配,StrobeLineDuration是持续时间,可以不配置,也可以根据需要配置
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 1);
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);
int DurationValue=0,DelayValue=0,PreDelayValue=0;
nRet = MV_CC_SetIntValue(handle, "StrobeLineDuration",DurationValue);
nRet = MV_CC_SetIntValue(handle, "StrobeLineDelay",DelayValue);
nRet = MV_CC_SetIntValue(handle, "StrobeLinePreDelay",PreDelayValue);
nRet = MV_CC_SetBoolValue(handle, "StrobeEnable",TRUE);
- Software输出,IO输出与LineSource同步
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 2);
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);
nRet = MV_CC_SetEnumValue(handle, "LineSource", 5);
int DurationValue=1000,DelayValue=0,PreDelayValue=0;
nRet = MV_CC_SetIntValue(handle, "StrobeLineDuration",DurationValue);
nRet = MV_CC_SetIntValue(handle, "StrobeLineDelay",DelayValue);
nRet = MV_CC_SetIntValue(handle, "StrobeLinePreDelay",PreDelayValue);
nRet = MV_CC_SetBoolValue(handle, "StrobeEnable",TRUE);
nRet = MV_CC_SetCommandValue(m_handle, "LineTriggerSoftware");
这里会存在一个问题就是,海康部分相机,LineSource没有SoftTriggerActive的参数选项,那么就必须使用另外一种方法实现
- 电平反转,通过快速反转电平状态,来模拟一个信号输出
当然这种控制电平变化时间做不到精确控制,只能适用于那种不太严格要求信号质量的场景
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 2);
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);
nRet = MV_CC_SetBoolValue(handle, "LineInverter",TRUE);
Sleep(10);
nRet = MV_CC_SetBoolValue(handle, "LineInverter",false);
海康工业相机IO触发输出操作说明1.相机I/O管脚接口定义2.相机line0输入接线方法2.1相机line0输入等效电路图2.2相机line0输入接线图2.3相机参数设置3相机line1输出接线方法3.1相机line1输出等效电路图3.2相机line1输出接线图3.3相机参数设置4相机line2可配置输入输出接线方法4.1 line2输入使用4.2 line2输出使用
1.相机I/O管脚接口定义
MV-VB2210-120G视觉控制器的用户手册,MV-VB2210-120G 视觉控制器采用 Intel E3845 处
理器,4GB DDR3L 内存,专为机器视觉工业应用
开发,具有性能稳定、结构紧凑、反应快速等特
点。适用于机器人、数控机床等应用场景。
海康机器人工业相机常用参数功能设置与获取(C语言)前言DeviceControlImageFormatControlAcquisitionControlDigitalIOControlActionControlFileAccessControlEventControlChunkDataControlTransportLayerControlUserSetControl
DeviceControl
ImageFormatControl
AcquisitionControl
DigitalIOContro
由于学校实验室需要用到Basler相机,然而网上Basler相机的说明文档是全英文的,对新手不太友好,而且国内关于Basler的硬件触发代码没有。在研究了Basler相机的SDK之后总结出了触发的驱动,还有照片与OpenCV格式转换的代码,希望可以对你们有帮助。https://www.jianshu.com/p/cee63023b8c7
Ubuntu14.04
Pylon5.0.5
OpenCV3.4.14
相机型号acA1600-60gm/acA2500-14gm
以上就是事件机制的最基本结构,事件从事件生产者流向事件消费者,整个过程传递的是事件这一信息载体。一般用作于某种情况发生时的即时响应。
2、如何理解事件机制
对于工业相机而言,事件机制在很多方面均有体现:图像回调、异常回调、事件回调等等。其中最常见的就是图像回调,当相机发送一张图像到达底层驱动,此时在底层驱动(事件生产者)处发生了“驱动端收到一张图像”这一事件,那么对应的图像回调函数(事件消费者)就