当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

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

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

我们先构建一个vpp项目,这里就不重复说明了,前面教程很清楚,文章后面有本文使用的vpp,需要实践的朋友可以下载试试。

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

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

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

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

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

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

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

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

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

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

private CogJobManager myjobmanger;
//适当位置加载文件
 myjobmanger = (CogJobManager)CogSerializer.LoadObjectFromFile(@"C:\Users\Administrator\Desktop\mySavedQB.vpp"

然后运行这个jobmanger,注意,以前我们是运行job管理器中的某个job,这里运行得是整个job管理器。

 myjobmanger.Run();

然后就取结果了

Cognex.VisionPro.ICogRecord temprecord; //声明发送项结果对象
Cognex.VisionPro.ICogRecord toprecord = myjobmanger.UserResult();//取得结果对象并赋值
if (toprecord == null) return;//如果等于空,则没有取到数据

//重点,通过结果对象的SubRecords的key取结果值,里面的字符串就是发送项里面的name
temprecord = toprecord.SubRecords[@"Tools.Item[""CogBlobTool1""].CogBlobTool.Results.GetBlobs().Count"];
if (temprecord != null)//判断有没有结果
{
label1.Text= temprecord.Content.ToString();
}
// 获取有效的图像记录
temprecord = toprecord.SubRecords["ShowLastRunRecordForUserQueue"];
if (temprecord != null)
{

//获取最后一次运行记录 
temprecord = temprecord.SubRecords["LastRun"];
if (temprecord != null)
{
//获取Image Source工具最后一次记录的输出图像
temprecord = temprecord.SubRecords["Image Source.OutputImage"];
if (temprecord != null)
{
cogRecordDisplay1.Record = temprecord;
cogRecordDisplay1.Fit(true);
}
}
}

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

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

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

 

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

赞(8) 打赏

评论 5

  1. #3

    狗哥,可以解释下ICogRecord首字母为I的接口?它的含义和用法

    TT1个月前 (01-15)回复
    • 以后再讲

      daimadog1个月前 (01-16)回复
  2. #2

    版主,请问下,为什么每次运行时Cognex.VisionPro.ICogRecord toprecord = myjobmanger.UserResult();//取得结果对象并赋值 这里时,toprecord都为null。还请您帮忙解答下。我现在需要运行一个编辑脚本的JOB,想从job当中获得image scoure; (因为是线扫相机需要很大的视野,因此这个job脚本里面有触发多次拍照拼接成一张图,而不用加载acqfifotool触发) 请您百忙之中解答下,有偿解答,万分感谢。

    1个月前 (01-10)回复
    • myjobmanger.UserResult();不是Cognex.VisionPro.ICogRecord类型。脚本中的PostAcquisitionRefInfo就是采集到图像将会调用的方法,通过CogCopyRegionTool工具复制多张图像区域进行拼接然后传入即可。

      daimadog1个月前 (01-10)回复
  3. #1

    版主这些代码的 声明引用 搞不懂怎么用

    3个月前 (11-24)回复
×

请作者吃根烤肠!

支付宝