【VisionPro与C#】C#调用Vpp程序实现解码功能

概要

本文重点在于visionpro与C#交互,包括如何在C#工具箱添加Visionpro控件,以及加载vpp工具块与获取处理后的图像和解码的数据部分

实现功能

用cogRecordDisplay控件来显示检测后的图片,右边textbox来显示扫码的内容,具体的扫码解码部分是visionpro来进行处理,C#只负责图片的传入和结果的显示,传入方式有本地图片和相机传入两种。可以在vpp中设置条形码的数量也可以切换码的类型二维码、QR码,现在只设置码数量为一个;
在这里插入图片描述

VisionPro控件导入

1.在工具箱中添加一个选项卡,然后在选项卡中点击选择项
在这里插入图片描述
在这里插入图片描述
2.点击浏览,找到如下路径,将里面所有的dll文件添加就可以了
其中可能有个别几个控件报错不用管点确定就可以,还有我visionpro的安装路径在默认C盘,如果安装在其他盘可能也需要在C盘找到相关的Dll文件,在其他盘的Dll可能会报错
在这里插入图片描述
3.程序中使用的控件就是如下控件,可以根据自己需要调整
在这里插入图片描述
在这里插入图片描述

visionpro工具介绍

首先是读码部分工具,并没有添加复杂的脚本,只是更改了一下输出,在这个toolblock中添加了两个输出分别是码的数量和解码的字符串。另外如果想要更改输入输出的内容只要在工具下面添加终端或者利用里面的脚本来实现就可以了
在C#中只需要知道这个块的输入和输出就可以了,最后读取的图像和码的数据也都不涉及块的内部结构,就像是函数方法一样不需要知道内部的内容。
在这里插入图片描述
解码工具这里就随便配置了一下,如果想要解其他类型的码要更换或者再添加一个工具
在这里插入图片描述
最后注意保存的文件并不是QuickBuild文件,只是一个toolblock块,也就是说在这个画面保存最后C#读取的也是这个块文件
相机块里只有一个相机配置文件,一般会把不同功能的工具放在不同的块中,如果不需要相机可以删掉

在这里插入图片描述
最后明确一下最外层的块叫CogToolBlock1下层的块是”读码“
下层块中有两个输出Resu_Count和Results_Item_0_OwnDecoded_String

VP检测工具加载

   public static CogToolBlock ToolBlock = new CogToolBlock();//创建了一个CogToolBlock类的对象ToolBlock来存储CogToolBlock1块
   public static CogToolBlock ToolBlock1 = new CogToolBlock();//创建了一个CogToolBlock类的对象ToolBlock1来存储“读码”块
   public static CogImageFileTool mImagefile = new CogImageFileTool();//用来存储获取本地图像的对象
public void ToolLoad() //相机检测工具加载
{
    try
    {
        CCD1ToolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile(Application.StartupPath + "\\工具\\条形码检测.vpp");//加载VPP文件 参数是文件路径
        ToolBlock1 = (CogToolBlock)ToolBlock.Tools["读码"];//将“读码”块赋值
        //ToolBlock2 = (CogToolBlock)ToolBlock.Tools["相机"]; //如果把相机设为图像来源可以使用


        if (Open_style == "文件读取")//这里我写了一个变量来判断当前是从文件读取图片还是相机
        {
            string imgFile = "图片文件的路径";
            mImagefile.Operator.Open(imgFile, CogImageFileModeConstants.Read);
            mImagefile.Run();
			//下面将本地获取到的图片转为ICogImage格式后传递给了ToolBlock1块的输入图像,也就是“读码块”的输入图像
            ToolBlock1.Inputs["InputImage"].Value = mImagefile.OutputImage as ICogImage;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

提示:注意每个块下的输入输出名,还有数据类型的统一

进行解码以及显示

	public void Detection()//进行检测
        {
            //if(Open_style == "相机读取") CCD1ToolBlock2.Run();使用相机时

            CCD1ToolBlock1.Run();//运行“读码”块
            //接下来只要去获取结果就可以了,下面获取了吗的数量也就是Results_Count参数的值
            int count = Convert.ToInt32(ToolBlock1.Outputs["Results_Count"].Value);
            
            for (int i = 0; i < count; i++)//如果有多个码可以进行遍历显示。。
            {
                string code = Convert.ToString(ToolBlock1.Outputs[$"Results_Item_{i}_OwnedDecoded_String"].Value);
                richTextBox1.Invoke(new boxAppend(richboxAppend),code);//将结果添加到textbox中显示
            }
        }
---------------------------------------------------------------------------------------------------
     void ImageDisplay()//检测图片的显示
        {
            try
            {
                this.cogRecordDisplay1.StaticGraphics.Clear();//清除原有的图片数据
				//根据输出图片所在的位置填写参数
                this.cogRecordDisplay1.Record = ToolBlock.CreateLastRunRecord().SubRecords["读码.CogImageConvertTool1.OutputImage"];//注意里面的参数
                
                //this.cogRecordDisplay1.Image = ToolBlock1.Inputs["InputImage"].Value as ICogImage;这段代码也是显示的图片,不过是处理之前的图,Image方法接受的是一个ICogImage类型的数据,而上面的是ICogRecord类型
                cogRecordDisplay1.Fit(true);//图片适应窗口大小

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

ToolBlock.CreateLastRunRecord().SubRecords["读码.CogImageConvertTool1.OutputImage"]这段代码中的参数是根据VP程序中这个地方获取在这里插入图片描述

总结

主要是在从VPP中获取图像数据的部分卡了好长时间,总是出现‘索引超出数组长度’一类的错误,大都是因为CogToolBlock的方法使用错误包括数据类型啊还有参数的设置,另外在Visionpro这边也有很多问题,比如码的类型配置错误、输入输出设置错误、图像没有转换成灰度图像等等。。。这些错误都只会提示索引超出数组而且错误只会指出在那一行调用VPP程序的代码,具体的问题还需要去自己分析。。这算不算是调用外部程序的缺点,因为程序也无法判断错误到底出现在内部还是调用的程序里面、、、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值