首页 > 编程语言 >VisionPro C#调用QuickBuild操作

VisionPro C#调用QuickBuild操作

时间:2023-08-25 13:34:22浏览次数:39  
标签:myJobManager tmpRecord record VisionPro SubRecords C# Job ToString QuickBuild

在VisionPro中,常见的操作是:

将产品多种型号分别定义成多个QuickBuild。(PS: 产品A调用QuickBuild1,产品B调用QuickBuild2)

 一个QuickBuild(JobManager)文件下可以包括若干个作业(Job),如果一个项目连接多个工业相机,那么可以将相机单独绑定到Job上。

Job中可以包含采像工具、ToolBlock、ToolGroup和各种算法工具。

 结果输出,可以通过添加已发送项的方式,将单个Job执行结果输出。

这里主要实现模拟四个相机从分别读取OCR字符,然后将字符的个数打印到CogRecordDisplay的左上角。效果如下:

接下来,上代码:

实例化CogManager(作业管理器)、CogJob(作业)、CogJobIndependent(类似于TaskHelper的存在,欢迎纠错)对象。

1    private CogJobManager myJobManager;
2    private List<CogJob> myJobs = new List<CogJob>();
3    private List<CogJobIndependent> myIndependentJobs = new List<CogJobIndependent>();

初始化对象,并订阅结果可用事件(UserResultAvailable)

 1  myJobManager = CogSerializer.LoadObjectFromFile(Application.StartupPath + @"\QuickBuild\QuickBuild1.vpp") as CogJobManager;
 2                //将作业管理器中的作业遍历到作业集合中
 3                 for (int i = 0; i < myJobManager.JobCount; i++)
 4                 {
 5                     myJobs.Add(myJobManager.Job(i));
 6                     myIndependentJobs.Add(myJobs[i].OwnedIndependent);
 7                 }
 8                 myJobManager.UserQueueFlush(); //用户队列刷新
 9                 myJobManager.FailureQueueFlush(); //故障队列刷新
10                 for (int i = 0; i < myJobManager.JobCount; i++)
11                 {
12                     myJobs[i].ImageQueueFlush();
13                     myIndependentJobs[i].RealTimeQueueFlush();
14                 }
15                 this.Invoke(new Action(() => 
16                 {
17                     cogJobManagerEdit1.Subject = myJobManager; //将工程文件显示到JobManager控件中
18                 }));
19                
20                 //订阅完成事件
21                 myJobManager.Stopped += new CogJobManager.CogJobManagerStoppedEventHandler((sender, e) => { });
22                 //订阅结果可用事件
23                 myJobManager.UserResultAvailable += new CogJobManager.CogUserResultAvailableEventHandler(OnUserResultAvailable);

在OnUserResultAvailable事件的回调函数中,添加显示、获取结果代码

 1   private void OnUserResultAvailable(object sender, CogJobManagerActionEventArgs e)
 2         {
 3            //由于CogManager对象是在异步线程中创建的,所以需要使用主线程的Invoke()方法调用
 4             this.Invoke(new Action(() =>
 5             {
 6                 ICogRecord record = myJobManager.UserResult();
 7                 ICogRecord tmpRecord;
 8                   switch (record.SubRecords["JobName"].Content.ToString())
 9                 {
10                     case "Camera_1":
11                         //获取当前Job的已发送项结果
12                         tmpRecord = record.SubRecords["StringLength"];
13                         lbl_ResultStrLength1.Text = tmpRecord.Content.ToString();
14                         
15                         tmpRecord = record.SubRecords["ShowLastRunRecordForUserQueue"];
16                         tmpRecord = tmpRecord.SubRecords["LastRun"];
17                         tmpRecord = tmpRecord.SubRecords["Image Source.OutputImage"];
18                         cogRecordDisplay4.InteractiveGraphics.Clear();
19                         cogRecordDisplay4.Record = tmpRecord;
20                         cogRecordDisplay4.Fit(true);
21                         break;
22                         case "Camera_2":
23                         tmpRecord = record.SubRecords["StringLength"];
24                         lbl_ResultStrLength2.Text = tmpRecord.Content.ToString();
25                          
26                         tmpRecord = record.SubRecords["ShowLastRunRecordForUserQueue"];
27                         tmpRecord = tmpRecord.SubRecords["LastRun"];
28                         tmpRecord = tmpRecord.SubRecords["Image Source.OutputImage"];                        cogRecordDisplay5.InteractiveGraphics.Clear();
29                         cogRecordDisplay5.Record = tmpRecord;
30                         cogRecordDisplay5.Fit(true);
31                         break;
32                          case "Camera_3":
33                         tmpRecord = record.SubRecords["StringLength"];
34                         lbl_ResultStrLength3.Text = tmpRecord.Content.ToString();
35                         
36                         tmpRecord = record.SubRecords["ShowLastRunRecordForUserQueue"];
37                         tmpRecord = tmpRecord.SubRecords["LastRun"];
38                         tmpRecord = tmpRecord.SubRecords["Image Source.OutputImage"];
39                         cogRecordDisplay7.InteractiveGraphics.Clear();
40                         cogRecordDisplay7.Record = tmpRecord;
41                         cogRecordDisplay7.Fit(true);
42                         break;
43                           case "Camera_4":
44                         tmpRecord = record.SubRecords["StringLength"];
45                         lbl_ResultStrLength4.Text = tmpRecord.Content.ToString();
46                         
47                         tmpRecord = record.SubRecords["ShowLastRunRecordForUserQueue"];
48                         tmpRecord = tmpRecord.SubRecords["LastRun"];
49                         tmpRecord = tmpRecord.SubRecords["Image Source.OutputImage"];
50                         cogRecordDisplay6.InteractiveGraphics.Clear();
51                         cogRecordDisplay6.Record = tmpRecord;
52                         cogRecordDisplay6.Fit(true);
53                         break;
54           }
55             }));
56         }

执行CogManager作业管理器

1       private void btn_QuickBuildRun_Click(object sender, EventArgs e)
2         {
3             myJobManager.Run();
4         }

如何使用ToolGroup?

以上面的例子为例,可以在每个Job中都通过引入CogOCRMaxTool工具LineResult.Count引脚的方式获取字符总数。也可以通过在ToolGroup中添加脚本的方式获取。

在初始化函数 Initialize()中,添加输入输出引脚

1  public override void Initialize(CogToolGroup host)
2   {
3     // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
4     base.Initialize(host);
5     
6     this.toolGroup.DefineScriptTerminal( input,"Input", true);
7     this.toolGroup.DefineScriptTerminal( output,"Output", false);
8   }

定义输入输出变量,在GroupRun()方法中获取输入值,并判断字符个数后输出

 1  public string input = "";
 2  public int output;
 3  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
 4   {
 5      string str = this.toolGroup.GetScriptTerminalData("Input").ToString();
 6      output = str.Length;
 7      this.toolGroup.SetScriptTerminalData("Output",output);
 8     
 9      return false;
10   }

连接输入、输出 (可以传递给其他工具,也可以直接添加到已发送项) 引脚

 关于ToolGroup和ToolBlock的使用和区别,后面会更新详细的文档。

标签:myJobManager,tmpRecord,record,VisionPro,SubRecords,C#,Job,ToString,QuickBuild
From: https://www.cnblogs.com/ybqjymy/p/17656687.html

相关文章

  • Nacos-服务多级模型
         ......
  • VisionPro 工具调用和工具组(ToolBlock)调用
    VisionPro是Cognex的机器视觉算法软件,通常的做法是使用VS做二次开发。这里主要分享VisionPro中通过ToolBlock实现一个视觉检测,以及通过调用单个Tool实现一个视觉检测。最终实现一个硬币数量检测以及坐标位置输出的应用:使用ToolBlock的方式:声明CogToolBlock类型的实例,并且序列化......
  • linux docker公网源下载示例
    1.get-docker.sh百度一下,进入docker官网直接下载该文件,然后执行即可2.直接下载repo文件示例:wgethttps://download.docker.com/linux/centos/docker-ce.repo-O/etc/yum.repos.d/docker.sh--no-check或者yum-config-manager--add-repohttps://download.docker.com/lin......
  • IDEA Git恢复DropCommit已经删除的commit提交 撤销Git错误删除commit 回退历史版本
    原因由于在IDEA上commit时写错了commit信息,想重新提交,就在提交记录上右键->DropCommit删除了,然后就发现代码也恢复到上次commit时的情况,这次新增的代码全没有了恢复对git其他操作不熟悉,不过git应该记录了所有版本控制的历史信息,应该能恢复已经删除的某个版本的commit代码1......
  • Nacos-快速入门
           ......
  • DBC上传模板增加按钮
    *&---------------------------------------------------------------------**&ReportZ100*&*&---------------------------------------------------------------------**&*&*&------------------------------------------------------......
  • cmake中list,set的对字符串操作
    cmake中所有的对象都是string,所以我们对这些的操作就是对字符串的操作,里面提供追加和删除的方法 CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#方式二file(GLOBSRC${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)message("=========================")m......
  • Tomcat启动黑窗口一闪而过
    Tomcat启动黑窗口一闪而过一、解决方案首先要确定Tomcat为什么会一闪而过,那么就要看黑窗口一闪而过的时候显示了什么。cmd命令进入Tomcat的bin目录,输入startup.bat(若已配置环境,可直接输入指令),回车。这样黑窗口就不会关闭,而是会显示出正常信息或者报错信息。如果你的信息和下图......
  • cmake动态库
    动态库有传递性,但是通过修饰符修饰public可传递,因为需要用到动态链接库,而且动态链接库只不过是一个文件,只能生成的可执行文件后面,因为只有有了可执行文件才需要链接动态库CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#添加头文件aux_source_director......
  • jq导出带样式的excel表格
    引入jS<scripttype="text/javascript"src="/Public/js/jquery.2.2.4.min.js"></script><scripttype="text/javascript"src="/Public/js/jquery.table2excel.js"></script>下载链接:https://files.cnblogs.co......