赞
踩
通过学习利用ToolBlock脚本显示卡尺极性后,VisionPro联合C#在Visual Studio进行二次开发是一项十分重要的技能,本文将通过Visual Studio 2019运行VisionPro软件并且将VPP的结果显示到窗体中。
前期准备
结果显示功能
编辑VPP功能
首次在Visual Studio进行二次开发时,工具箱中不包含VisionPro中工具的控件,需要手动添加控件到工具箱中,具体方式如下:
Step1 在工具箱中选择添加选项卡,并命名为VisionPro
Step2 在VisionPro选项卡中添加选择项,点击浏览选项卡
Step3 在选项卡中添加C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies中.dll
全选.dll文件并打开,期间出现报警弹窗点击确认,因为其中有些.dll文件不是控件
<若添加并重启软件后仍然为空,选择VisionPro安装路径下的ReferencedAssemblies文件夹>
按照Step1-Step3步骤实现最终结果如图所示,表明已经将VisionPro控件添加到工具箱中
Output窗体负责运行并显示VPP结果,SettingVPP窗体负责编辑保存VPP。
可显示运行结果图片,点击即可打开,编辑或运行VPP。
根据窗口设计选择相应的控件,包含按键以及结果显示等。
其中TableLayoutPanel控件用于调整窗体控件的布局,具体可看C#控件自适应布局
Step1 点击打开VPP按键后,打开选择VPP窗体,并将VPP路径存储。
- /* 当点击打开VPP按键后运行 */
- private void btnOpen_Click(object sender, EventArgs e)
- {
- using (OpenFileDialog ofd = new OpenFileDialog()) //ofd类
- {
- ofd.Title = "打开VPP"; //窗口名
- ofd.InitialDirectory = @"D:\"; //打开的路径
- ofd.Multiselect = false; //是否允许多选
- ofd.Filter = "VPP文件|*.vpp"; //支持的文件格式
- ofd.ShowDialog(); //打开选择窗口
- vppPath = ofd.FileName; //将选择的图片的路径存储到vppPath
- }
- }
Step2 点击编辑VPP按键后,打开编辑VPP窗体。
- /* 当点击编辑VPP按键后运行 */
- private void btnSetting_Click(object sender, EventArgs e)
- {
- if (vppPath == null) //判断是否打开VPP
- {
- MessageBox.Show("未打开VPP");
- return;
- }
- else
- {
- SettingVPP settingVPPForm = new SettingVPP(vppPath, this);
- settingVPPForm.ShowDialog();
- }
- }
Step3 点击运行按键后,运行VPP并显示结果和卡尺极性。
- /* 当点击运行按键后运行 */
- private void btnRun_Click(object sender, EventArgs e)
- {
- if (vppPath == null) //判断是否打开VPP
- {
- MessageBox.Show("未打开VPP");
- return;
- }
- else
- {
- CogToolBlock mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
- CogImageConvertTool mImageConvert = mToolBlock.Tools["CogImageConvertTool1"] as CogImageConvertTool; //实例化图像转换工具
- CogFindLineTool mFindLine = mToolBlock.Tools["CogFindLineTool1"] as CogFindLineTool; //实例化找线工具
- mToolBlock.Run(); //运行工具块
- cogRecordDisplay.Record = mToolBlock.CreateLastRunRecord().SubRecords["CogImageConvertTool1.OutputImage"]; //显示图像
- cogRecordDisplay.Fit(false); //允许滚轮缩放
- if (mFindLine.Results != null)
- {
- caliperPolarityTextBox.Text = mToolBlock.Outputs["CaliperPolarity"].Value.ToString(); //显示工具块结果
- /// 等价于caliperPolarityTextBox.Text = mFindLine.RunParams.CaliperRunParams.Edge0Polarity.ToString(); //显示找线工具极性
- }
- }
按照step1-step3完成程序设计,源码如下:
- using Cognex.VisionPro;
- using Cognex.VisionPro.Caliper;
- using Cognex.VisionPro.ImageProcessing;
- using Cognex.VisionPro.ToolBlock;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace ShowCaliperPolarity
- {
- public partial class OutputForm : Form
- {
- public string vppPath;
- public OutputForm()
- {
- InitializeComponent();
- }
- /* 当打开窗体时运行 */
- private void OutputForm_Load(object sender, EventArgs e)
- {
- this.WindowState = FormWindowState.Maximized; //最大化窗体
- }
- /* 当点击打开VPP按键后运行 */
- private void btnOpen_Click(object sender, EventArgs e)
- {
- using (OpenFileDialog ofd = new OpenFileDialog()) //ofd类
- {
- ofd.Title = "打开VPP"; //窗口名
- ofd.InitialDirectory = @"D:\"; //打开的路径
- ofd.Multiselect = false; //是否允许多选
- ofd.Filter = "VPP文件|*.vpp"; //支持的文件格式
- ofd.ShowDialog(); //打开选择窗口
- vppPath = ofd.FileName; //将选择的图片的路径存储到vppPath
- }
- }
- /* 当点击编辑VPP按键后运行 */
- private void btnSetting_Click(object sender, EventArgs e)
- {
- if (vppPath == null) //判断是否打开VPP
- {
- MessageBox.Show("未打开VPP");
- return;
- }
- else
- {
- SettingVPP settingVPPForm = new SettingVPP(vppPath, this);
- settingVPPForm.ShowDialog();
- }
- }
- /* 当点击运行按键后运行 */
- private void btnRun_Click(object sender, EventArgs e)
- {
- if (vppPath == null) //判断是否打开VPP
- {
- MessageBox.Show("未打开VPP");
- return;
- }
- else
- {
- CogToolBlock mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
- CogImageConvertTool mImageConvert = mToolBlock.Tools["CogImageConvertTool1"] as CogImageConvertTool; //实例化图像转换工具
- CogFindLineTool mFindLine = mToolBlock.Tools["CogFindLineTool1"] as CogFindLineTool; //实例化找线工具
- mToolBlock.Run(); //运行工具块
- cogRecordDisplay.Record = mToolBlock.CreateLastRunRecord().SubRecords["CogImageConvertTool1.OutputImage"]; //显示图像
- cogRecordDisplay.Fit(false); //允许滚轮缩放
- if (mFindLine.Results != null)
- {
- caliperPolarityTextBox.Text = mToolBlock.Outputs["CaliperPolarity"].Value.ToString(); //显示工具块结果
- /// 等价于caliperPolarityTextBox.Text = mFindLine.RunParams.CaliperRunParams.Edge0Polarity.ToString(); //显示找线工具极性
- }
- }
- }
- }
- }
Output窗体负责运行并显示VPP结果,SettingVPP窗体负责编辑保存VPP。
可显示ToolBlock工具,点击即可运行或保存VPP。
根据窗口设计选择CogToolBlockEditV2控件。
Step1 跨窗口传入参数,传入VPP路径以及上级窗口。
- public SettingVPP(string tempPath,Form tempForm)
- {
- /* 跨窗口传入参数 */
- vppPath = tempPath; //工具块路径
- lastForm = tempForm; //上级窗口
- InitializeComponent();
- }
Step2 实例化工具块并显示到窗体中
- /* 当打开窗体时运行 */
- private void SettingVPP_Load(object sender, EventArgs e)
- {
- mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
- cogToolBlockEdit.Subject = mToolBlock; //工具块显示到控件中
- }
Step3 关闭窗体时,提示是否保存VPP
- /* 当关闭窗体时运行 */
- private void SettingVPP_FormClosing(object sender, FormClosingEventArgs e)
- {
- DialogResult res = MessageBox.Show("是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); //保存结果信息
- /// 参数1:显示文本,参数2:标题,参数3:按键类型,参数4:显示图标
- if (res == DialogResult.Yes) //保存VPP
- {
- CogSerializer.SaveObjectToFile(cogToolBlockEdit.Subject, vppPath); //保存工具块
- e.Cancel = false; //确认关闭窗体
- }
- else if(res == DialogResult.No) //不保存VPP
- {
- e.Cancel = false; //确认关闭窗体
- }
- else //取消
- {
- e.Cancel = true; //取消关闭窗体
- }
- }
<注意这里的事件必须是FormClosing不能是FormClosed>
<前者是关闭窗体前,后者是关闭窗体后,先后顺序不同,必须在关闭窗体前保存VPP>
按照step1-step3完成程序设计,源码如下:
- using Cognex.VisionPro;
- using Cognex.VisionPro.ToolBlock;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace ShowCaliperPolarity
- {
- public partial class SettingVPP : Form
- {
- static string vppPath;
- CogToolBlock mToolBlock;
- Form lastForm;
- public SettingVPP(string tempPath,Form tempForm)
- {
- /* 跨窗口传入参数 */
- vppPath = tempPath; //工具块路径
- lastForm = tempForm; //上级窗口
- InitializeComponent();
- }
- /* 当打开窗体时运行 */
- private void SettingVPP_Load(object sender, EventArgs e)
- {
- mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
- cogToolBlockEdit.Subject = mToolBlock; //工具块显示到控件中
- }
- /* 当关闭窗体时运行 */
- private void SettingVPP_FormClosing(object sender, FormClosingEventArgs e)
- {
- DialogResult res = MessageBox.Show("是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); //保存结果信息
- /// 参数1:显示文本,参数2:标题,参数3:按键类型,参数4:显示图标
- if (res == DialogResult.Yes) //保存VPP
- {
- CogSerializer.SaveObjectToFile(cogToolBlockEdit.Subject, vppPath); //保存工具块
- e.Cancel = false; //确认关闭窗体
- }
- else if(res == DialogResult.No) //不保存VPP
- {
- e.Cancel = false; //确认关闭窗体
- }
- else //取消
- {
- e.Cancel = true; //取消关闭窗体
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。