LabVIEW调用VisionPro框架代码:VisionPro labview 2020版
LabVIEW调用VisionPro框架代码 VisionPro labview 2020最近在折腾LabVIEW和VisionPro的联动开发发现这俩工业视觉领域的老搭档配合起来确实能玩出不少花样。今天咱们就聊聊怎么在LabVIEW 2020里直接调用VisionPro框架的代码手头有工控机的朋友可以直接开搞了。先上硬菜——环境配置。VisionPro安装时会自动注册COM组件记得在LabVIEW里通过工具→导入→ActiveX控件把Cognex的库引进来图1。有个坑要注意如果发现控件列表里找不到VisionPro的COM组件八成是安装顺序搞反了得先装VisionPro再装LabVIEW。!图1ActiveX控件导入界面LabVIEW调用VisionPro框架代码 VisionPro labview 2020接下来咱们用个简单的图像采集案例演示交互逻辑。VisionPro这边先配置好相机参数生成.vpp工程文件LabVIEW这边直接上代码// 创建VisionPro应用对象 VisionApp : ActiveX容器.新建对象(Cognex.VisionPro.Application); // 加载工程文件 VisionApp.LoadConfig(D:\config.vpp); // 获取采集命令 AcqCommand : VisionApp.Acquisition.Commands.Item[0]; // 执行采集 AcqCommand.Execute();这段代码里藏着几个关键点ActiveX容器用的是早期绑定的方式比后期绑定效率高Item[0]对应VisionPro工程里第一个采集命令Execute()方法会阻塞当前VI线程需要异步调用的话得套个异步调用结构数据交互方面图像传输最常遇到像素格式不匹配的问题。实测用内存映射的方式比传统图像转换快3倍以上// 获取图像缓冲区指针 ImagePtr : VisionApp.LastResult.Image.GetBuffer(); // 创建LabVIEW图像引用 LVImage : IMAQ创建头部(宽度,高度); // 内存拷贝 MoveBlock(ImagePtr, LVImage, 缓冲区大小);这里有个骚操作——直接操作内存地址能避开VisionPro的像素格式转换开销。不过要注意32位和64位系统的指针长度差异建议用条件结构做个位数判断。调试环节最容易翻车的是异常处理VisionPro的错误码经常让人摸不着头脑。建议在调用链里加个错误拦截器尝试 VisionApp.ExecuteCommand(RUN); 捕获错误 错误代码 : 错误源.Number; case结构处理: 0x80040201 - 弹出警告相机掉线; 0x80040300 - 重连设备; 默认 - 记录错误日志; 结束实测这套错误处理机制能覆盖90%的硬件异常特别是工业现场常见的相机断连、光源异常等情况。最后提一嘴性能优化在连续采集模式下用LabVIEW的队列结构配合VisionPro的异步采集能实现零帧丢失。不过得注意队列深度别超过4否则内存占用会指数级增长。测试数据表明1024x1024的图传速率能稳定在60fps足够应对大部分检测场景。有次在汽车厂调试时遇到个邪门问题——白天运行正常晚上就频繁超时。后来发现是车间大灯关闭后曝光参数没自适应调整加了个环境光检测逻辑才解决。所以硬件交互千万别忘了环境变量这个暗桩。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2491048.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!