海康工业相机功能模块-IO输入输出控制
海康工业相机IO输入输出控制模块-sdk调用介绍

海康工业相机功能模块-IO输入输出控制

前言

机器视觉行业里面,相机作为最重要的图像传感器,除了主要的拍摄功能外,它也承担了一部分信号控制功能.
一方面能够接受外部的触发信号例如PLC、光电传感器等,进行指定时刻拍照;另外一方面,能够输出IO信号,控制外围机构进行机械运动;
海康标准工业相机,支持1路GPIO输入,1路GPIO输出,一路可配置的IO输出(非光耦),本文主要讲一下如何使用SDK进行IO配置以及注意事项

IO输入

IO输入的主要作用就是,相机通过IO管脚,收到1个IO信号,相机就立即拍摄一帧图像;
通用的使用方法如下代码依次设置:

  • 触发模式:TriggerMode设置为1,开启触发模式
  • 触发源选择:TriggerSource设置为0,选择line0,也可以选择line2,或者选择anyway;line0、line2取决于硬件电路接线,anyway支持软触发、硬触发同时使用,需要看相机是否支持
  • 沿信号TriggerActivation:默认上升沿触发(可以不设置)
  • 触发缓存TriggerCacheEnable:默认不开启。当相机同时收到两个触发信号时,不开启此功能,相机只会响应1个信号,出一张图;开启后,相机会自动缓存第二个信号,上个信号处理完毕后,立即处理缓存信号
  • 触发延时TriggerDelay:收到信号后,固定延迟一段时间再曝光
  • 滤波设置 LineDebouncerTime:去除信号毛刺抖动,根据实际情况进行调节
//C语言代码段:硬触发模式初始化配置
//参数值,仅针对海康工业相机,其他品牌相机需根据对应节点微调
nRet = MV_CC_SetEnumValue(handle, "AcquisitionMode", 2);
//0:SingleFrame 1:MultiFrame 2:Continuous 
nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 1);//0:off 1:on
nRet = MV_CC_SetEnumValue(handle, "TriggerSource", 0);//line2也可做输入源,非光耦
//0:Line0 1:Line1 2:Line2  7:Software 8:FrequencyConverter 13:anyway
nRet = MV_CC_SetEnumValue(handle, "TriggerActivation", 0);//0:Rising Edge  1:Falling Edge 2:LevelHigh 3:LevelLow
nRet = MV_CC_SetFloatValue(handle,"TriggerDelay",0);//根据实际情况设置,默认0 us
nRet = MV_CC_SetBoolValue(handle,"TriggerCacheEnable",TRUE);//开启后会默认缓存1个信号
//滤波设置
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 0);//0:Line0  2:Line2 
nRet = MV_CC_SetIntValue(handle,"LineDebouncerTime",10);//硬件滤波时间,可加大此参数防抖us

触发配置:
302b98d0d79c38ee4a0941611c8af550.png
滤波:
3cf31d982822cfc6e9c3ba49a84b561b.png

IO输出

IO输出,参考用法主要分为两类

  • strobe输出,配合频闪光源拍摄,IO输出跟随曝光,输出周期与曝光周期同步
  • software输出,用户自定义时刻输出,用户自主控制,必要时刻输出OK或NG信号
  1. strobe输出配合频闪光源,IO输出与曝光同步
    这里需要注意StrobeLineDuration、StrobeLineDelay、StrobeLinePreDelay三个参数,用于调节与光源同步;光源的LED从灭到亮有个响应时间,那么我们就需要适当的去调节StrobeLineDelay/StrobeLinePreDelay这两个值去做匹配,StrobeLineDuration是持续时间,可以不配置,也可以根据需要配置
//Strobe输出
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 1);
//0:Line0 1:Line1 2:Line2 
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);//仅LineSelector为line2时需要特意设置,其他输出不需要
//0:Input 1:Output 8:Strobe 
int DurationValue=0,DelayValue=0,PreDelayValue=0;//us
nRet = MV_CC_SetIntValue(handle, "StrobeLineDuration",DurationValue);
//strobe持续时间,设置为0,持续时间就是曝光时间,设置其他值,就是其他值时间
nRet = MV_CC_SetIntValue(handle, "StrobeLineDelay",DelayValue);//strobe延时,从曝光开始,延时多久输出
nRet = MV_CC_SetIntValue(handle, "StrobeLinePreDelay",PreDelayValue);//strobe提前输出,曝光延后开始
//--------------------------------------------------------------------------------------------------
nRet = MV_CC_SetBoolValue(handle, "StrobeEnable",TRUE);//Strobe输出使能,使能之后,上面配置参数生效,IO输出与曝光同步
//Strobe输出,多用作点亮频闪光源,sensor快门类型为Global相机都支持,rolling需注意相机是否支持

1487b6bea887bf9c5aa5eb54e11b7015.png

  1. Software输出,IO输出与LineSource同步
//IO输出做NG信号用
//参数初始化
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 2);
//0:Line0 1:Line1 2:Line2 
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);//仅line2需要设置
//0:Input 1:Output 8:Strobe 
nRet = MV_CC_SetEnumValue(handle, "LineSource", 5);
//0:ExposureStartActive 5:SoftTriggerActive  6:HardTriggerActive
int DurationValue=1000,DelayValue=0,PreDelayValue=0;//us
nRet = MV_CC_SetIntValue(handle, "StrobeLineDuration",DurationValue);
nRet = MV_CC_SetIntValue(handle, "StrobeLineDelay",DelayValue);//strobe延时,从曝光开始,延时多久输出
nRet = MV_CC_SetIntValue(handle, "StrobeLinePreDelay",PreDelayValue);//strobe提前输出,曝光延后开始
nRet = MV_CC_SetBoolValue(handle, "StrobeEnable",TRUE);
//Strobe输出使能,使能之后,上面配置参数生效,IO输出与LineSource同步
//-------------------------------------------------------------------------------------
//输出IO信号命令
nRet = MV_CC_SetCommandValue(m_handle, "LineTriggerSoftware");

cba4335b865728a7bd4d4d7bdc1490b7.png

这里会存在一个问题就是,海康部分相机,LineSource没有SoftTriggerActive的参数选项,那么就必须使用另外一种方法实现

  1. 电平反转,通过快速反转电平状态,来模拟一个信号输出
    当然这种控制电平变化时间做不到精确控制,只能适用于那种不太严格要求信号质量的场景
//电平反转
//IO输出做NG信号用
//参数初始化
nRet = MV_CC_SetEnumValue(handle, "LineSelector", 2);
//0:Line0 1:Line1 2:Line2 
nRet = MV_CC_SetEnumValue(handle, "LineMode", 8);//仅line2需要设置
//0:Input 1:Output 8:Strobe 
//信号输出----------------------------------------------------
nRet = MV_CC_SetBoolValue(handle, "LineInverter",TRUE);//电平反转,也可用作IO输出,连续两次翻转可以输出一个IO信号
Sleep(10);//延时就相当于电平持续时间,也可以不设置
nRet = MV_CC_SetBoolValue(handle, "LineInverter",false);

cec6a7b16830d78dd117cfbc17a4afe5.png

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

迈创cameralink采集卡安装操作说明

下一篇

迈创CoaXPress采集卡安装操作说明

评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 3D激光轮廓仪对射拼接详解
    2025-09-01 浏览 0
  • 案例征集
    2025-09-17 浏览 0
  • 汇川iFA软件功能分析
    2025-09-03 浏览 0
  • VM通信常见应用方式
    2025-09-19 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器