让代码更简单

VisionPro通过已发送项获取运行结果

重要:本文最后更新于2019-03-16 11:43:24,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

经过前面的教程我们已经可以正常获取我们项目中的visionPro运行结果,之所以没告诉大家这种简单方法,是为了让大家了解每个工具对象的属性和它的结构,因为在以后的实践中大家就会发现很多操作都需要知道工具的结构,灵活运用工具的各种属性可以帮助我们完成更加复杂的视觉项目。

我们先构建一个vpp项目,这里就不重复说明了,前面教程很清楚,不会的照着前面的教程自己做一个。

然后选择你需要通过已发送项获取的数据,比如我需要斑点工具找到了多少个斑点,那么我就右键斑点工具下面的斑点数量值,选择添加到已发送项。

VisionPro通过已发送项获取运行结果

VisionPro通过已发送项获取运行结果

然后我们可以在已发送项列表里看到刚刚添加的这个值路径,name可以自己编辑,如下图

VisionPro通过已发送项获取运行结果

VisionPro通过已发送项获取运行结果

VisionPro通过已发送项获取运行结果

VisionPro通过已发送项获取运行结果

然后我们在C#代码中这样获取结果

首先老规矩声明全局变量加载vpp文件:


隐藏内容,解锁需要开通VIP
登录/注册

最终结果如下图,效果和我们以前的一样,只是这种方法更适合job多,并且都要执行的场景。

VisionPro通过已发送项获取运行结果

VisionPro通过已发送项获取运行结果

 

感觉很棒!可以赞赏支持我哟~

14 打赏

评论 (30)

登录后评论
楼上这个问题是应为作者这个已发送项的名字就是这个,用自己的设置的名字替换就行了
temprecord = toprecord.SubRecords[@"Tools.Item[""CogBlobTool1""].CogBlobTool.Results.GetBlobs().Count"];

这段运行第一个按钮会报错,数据超出索引....这是为啥呀...
意思是数组里面没这么多数,你非要取。比如一个数据只要3个数据,你要取第四个就会报这个错。
找到问题了,教程里的命名不能用....我换个名字就可以了....
按照教程直接将发送项命名为;Tools.Item[“”CogBlobTool1″”].CogBlobTool.Results.GetBlobs().Count 然后就报错了,随便换个正常点的名字就正常通过了,会不会是这个命名让其指向了错误的地址?
按照教程写下来,直接点获取结果没用,得按顺序从加载,运行,获取结果才能显示图片,我把代码全放在获取结果里面就有异常了,搞不懂。。
因为这个教程只是告诉大家已发送项该怎么取,完全是按执行顺序来的,但是vp工具在运行时是以异步线程的方式执行,当代码执行到取结果的时候其实VP程序还没执行完成,所以第一次是空的,后面运行取的结果是上一次的。正确的方法是通过事件来取,这样才能保证一定会取到数据。个人理解仅供参考。
请问vpp文件有PostedItem1为什么获取不到里面的值呢?要配置其余的东西吗?
不需要配置其它东西,照我教程做就没问题。
CogJobManager mymanger = new CogJobManager();
mymanger = (CogJobManager)CogSerializer.LoadObjectFromFile(path);
mymanger.Run();
Cognex.VisionPro.ICogRecord temprecord; //声明发送项结果对象
Cognex.VisionPro.ICogRecord toprecord = mymanger.UserResult();//取得结果对象并赋值
if (toprecord == null) return;//如果等于空,则没有取到数据
MessageBox.Show("进来了", "结果反馈", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
提示框没有进入,说明没有值,请问我哪里出错了
你把工具运行和取值分开写,用两个按钮,你就会知道原因了。
搞了一晚上了。。。。
大佬,为什么vs2012 中的visionpro控件就没了(关闭后又打开vs2012)
版主,您好,我是刚接触VisionPro,有点疑问想请教您一下!
如果想要用C#实现自动取值(实时获取验证图片后的结果),并确认是最新验证的结果,有没有什么好的方法?
判断job是否运行成功
您好,问题已经解决,非常感谢!
现在又有一个问题,我之前训练图片都是单色位图格式的,现在想加载本地的彩色图片,显示24位图格式不对
有没有哪个工具可以转换使用?代码中已经了解怎么转换,但是VisionPro工具中怎么实现?
CogImageConvertTool转换
谢谢老板,图片转换已经解决,感觉要处理复杂的图像需要对各个组件有比较深刻的理解!
想请教一下一个新问题,准备了一张有折痕的黑色纸张,拍摄下来,想要训练找这种不明显折痕的vpp文件,前面您介绍的一些工具都试了下,如果痕迹变动(换一张)有些组件会找不出折痕,还有一些组件会误判,请问这种情况有没有好的方法来处理?
需要设置模板匹配工具的旋转角度及缩放,还有将找到的特征区域传递下去
意思是那个工具可以把数据合并吗?可以把两个JOB里的结果合并到一块吗? ??
只能合并一个job内的。为什么要合并两个job,你自己取出来不就好了。
有个问题, 我现在的VPP方案是两个JOB, 每个JOB下各有两个已发送项, 按上文中的代码执行后, 每次只能读取其中一个JOB的一个发送项的值。 怎么把两个JOB的 四个发送项的值合并到一起???
取四次不就行了,非要一起可以在visionPro中使用CogResultsAnalysisTool工具,它可以对一些数据做简单运算,将数据给它,把它通过已发送项取出来即可。
版主,你好VPP文件在哪?
...文件丢失了,自己做一个吧,前面有教程。
狗哥,可以解释下ICogRecord首字母为I的接口?它的含义和用法
以后再讲
版主,请问下,为什么每次运行时Cognex.VisionPro.ICogRecord toprecord = myjobmanger.UserResult();//取得结果对象并赋值 这里时,toprecord都为null。还请您帮忙解答下。我现在需要运行一个编辑脚本的JOB,想从job当中获得image scoure; (因为是线扫相机需要很大的视野,因此这个job脚本里面有触发多次拍照拼接成一张图,而不用加载acqfifotool触发) 请您百忙之中解答下,有偿解答,万分感谢。
myjobmanger.UserResult();不是Cognex.VisionPro.ICogRecord类型。脚本中的PostAcquisitionRefInfo就是采集到图像将会调用的方法,通过CogCopyRegionTool工具复制多张图像区域进行拼接然后传入即可。
版主这些代码的 声明引用 搞不懂怎么用
QQ咨询 邮件咨询 狗哥推荐