当前位置:   article > 正文

VisionPro二次开发——C#显示卡尺极性

visionpro二次开发

通过学习利用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控件添加到工具箱中


 结果显示功能

1.程序框架

Output窗体负责运行并显示VPP结果,SettingVPP窗体负责编辑保存VPP。

2.窗体设计 

可显示运行结果图片,点击即可打开,编辑或运行VPP。

3.控件选择

根据窗口设计选择相应的控件,包含按键以及结果显示等。

其中TableLayoutPanel控件用于调整窗体控件的布局,具体可看C#控件自适应布局

4.程序设计

Step1 点击打开VPP按键后,打开选择VPP窗体,并将VPP路径存储。

  1. /* 当点击打开VPP按键后运行 */
  2. private void btnOpen_Click(object sender, EventArgs e)
  3. {
  4. using (OpenFileDialog ofd = new OpenFileDialog()) //ofd类
  5. {
  6. ofd.Title = "打开VPP"; //窗口名
  7. ofd.InitialDirectory = @"D:\"; //打开的路径
  8. ofd.Multiselect = false; //是否允许多选
  9. ofd.Filter = "VPP文件|*.vpp"; //支持的文件格式
  10. ofd.ShowDialog(); //打开选择窗口
  11. vppPath = ofd.FileName; //将选择的图片的路径存储到vppPath
  12. }
  13. }

Step2 点击编辑VPP按键后,打开编辑VPP窗体。

  1. /* 当点击编辑VPP按键后运行 */
  2. private void btnSetting_Click(object sender, EventArgs e)
  3. {
  4. if (vppPath == null) //判断是否打开VPP
  5. {
  6. MessageBox.Show("未打开VPP");
  7. return;
  8. }
  9. else
  10. {
  11. SettingVPP settingVPPForm = new SettingVPP(vppPath, this);
  12. settingVPPForm.ShowDialog();
  13. }
  14. }

Step3 点击运行按键后,运行VPP并显示结果和卡尺极性。

  1. /* 当点击运行按键后运行 */
  2. private void btnRun_Click(object sender, EventArgs e)
  3. {
  4. if (vppPath == null) //判断是否打开VPP
  5. {
  6. MessageBox.Show("未打开VPP");
  7. return;
  8. }
  9. else
  10. {
  11. CogToolBlock mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
  12. CogImageConvertTool mImageConvert = mToolBlock.Tools["CogImageConvertTool1"] as CogImageConvertTool; //实例化图像转换工具
  13. CogFindLineTool mFindLine = mToolBlock.Tools["CogFindLineTool1"] as CogFindLineTool; //实例化找线工具
  14. mToolBlock.Run(); //运行工具块
  15. cogRecordDisplay.Record = mToolBlock.CreateLastRunRecord().SubRecords["CogImageConvertTool1.OutputImage"]; //显示图像
  16. cogRecordDisplay.Fit(false); //允许滚轮缩放
  17. if (mFindLine.Results != null)
  18. {
  19. caliperPolarityTextBox.Text = mToolBlock.Outputs["CaliperPolarity"].Value.ToString(); //显示工具块结果
  20. /// 等价于caliperPolarityTextBox.Text = mFindLine.RunParams.CaliperRunParams.Edge0Polarity.ToString(); //显示找线工具极性
  21. }
  22. }

  按照step1-step3完成程序设计,源码如下:

  1. using Cognex.VisionPro;
  2. using Cognex.VisionPro.Caliper;
  3. using Cognex.VisionPro.ImageProcessing;
  4. using Cognex.VisionPro.ToolBlock;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. namespace ShowCaliperPolarity
  15. {
  16. public partial class OutputForm : Form
  17. {
  18. public string vppPath;
  19. public OutputForm()
  20. {
  21. InitializeComponent();
  22. }
  23. /* 当打开窗体时运行 */
  24. private void OutputForm_Load(object sender, EventArgs e)
  25. {
  26. this.WindowState = FormWindowState.Maximized; //最大化窗体
  27. }
  28. /* 当点击打开VPP按键后运行 */
  29. private void btnOpen_Click(object sender, EventArgs e)
  30. {
  31. using (OpenFileDialog ofd = new OpenFileDialog()) //ofd类
  32. {
  33. ofd.Title = "打开VPP"; //窗口名
  34. ofd.InitialDirectory = @"D:\"; //打开的路径
  35. ofd.Multiselect = false; //是否允许多选
  36. ofd.Filter = "VPP文件|*.vpp"; //支持的文件格式
  37. ofd.ShowDialog(); //打开选择窗口
  38. vppPath = ofd.FileName; //将选择的图片的路径存储到vppPath
  39. }
  40. }
  41. /* 当点击编辑VPP按键后运行 */
  42. private void btnSetting_Click(object sender, EventArgs e)
  43. {
  44. if (vppPath == null) //判断是否打开VPP
  45. {
  46. MessageBox.Show("未打开VPP");
  47. return;
  48. }
  49. else
  50. {
  51. SettingVPP settingVPPForm = new SettingVPP(vppPath, this);
  52. settingVPPForm.ShowDialog();
  53. }
  54. }
  55. /* 当点击运行按键后运行 */
  56. private void btnRun_Click(object sender, EventArgs e)
  57. {
  58. if (vppPath == null) //判断是否打开VPP
  59. {
  60. MessageBox.Show("未打开VPP");
  61. return;
  62. }
  63. else
  64. {
  65. CogToolBlock mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
  66. CogImageConvertTool mImageConvert = mToolBlock.Tools["CogImageConvertTool1"] as CogImageConvertTool; //实例化图像转换工具
  67. CogFindLineTool mFindLine = mToolBlock.Tools["CogFindLineTool1"] as CogFindLineTool; //实例化找线工具
  68. mToolBlock.Run(); //运行工具块
  69. cogRecordDisplay.Record = mToolBlock.CreateLastRunRecord().SubRecords["CogImageConvertTool1.OutputImage"]; //显示图像
  70. cogRecordDisplay.Fit(false); //允许滚轮缩放
  71. if (mFindLine.Results != null)
  72. {
  73. caliperPolarityTextBox.Text = mToolBlock.Outputs["CaliperPolarity"].Value.ToString(); //显示工具块结果
  74. /// 等价于caliperPolarityTextBox.Text = mFindLine.RunParams.CaliperRunParams.Edge0Polarity.ToString(); //显示找线工具极性
  75. }
  76. }
  77. }
  78. }
  79. }

 编辑VPP功能

1.程序框架

Output窗体负责运行并显示VPP结果,SettingVPP窗体负责编辑保存VPP。

2.窗体设计 

可显示ToolBlock工具,点击即可运行或保存VPP。 

3.控件选择

根据窗口设计选择CogToolBlockEditV2控件。

4.程序设计

 Step1 跨窗口传入参数,传入VPP路径以及上级窗口。

  1. public SettingVPP(string tempPath,Form tempForm)
  2. {
  3. /* 跨窗口传入参数 */
  4. vppPath = tempPath; //工具块路径
  5. lastForm = tempForm; //上级窗口
  6. InitializeComponent();
  7. }

Step2 实例化工具块并显示到窗体中

  1. /* 当打开窗体时运行 */
  2. private void SettingVPP_Load(object sender, EventArgs e)
  3. {
  4. mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
  5. cogToolBlockEdit.Subject = mToolBlock; //工具块显示到控件中
  6. }

Step3 关闭窗体时,提示是否保存VPP

  1. /* 当关闭窗体时运行 */
  2. private void SettingVPP_FormClosing(object sender, FormClosingEventArgs e)
  3. {
  4. DialogResult res = MessageBox.Show("是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); //保存结果信息
  5. /// 参数1:显示文本,参数2:标题,参数3:按键类型,参数4:显示图标
  6. if (res == DialogResult.Yes) //保存VPP
  7. {
  8. CogSerializer.SaveObjectToFile(cogToolBlockEdit.Subject, vppPath); //保存工具块
  9. e.Cancel = false; //确认关闭窗体
  10. }
  11. else if(res == DialogResult.No) //不保存VPP
  12. {
  13. e.Cancel = false; //确认关闭窗体
  14. }
  15. else //取消
  16. {
  17. e.Cancel = true; //取消关闭窗体
  18. }
  19. }

<注意这里的事件必须是FormClosing不能是FormClosed>

<前者是关闭窗体前,后者是关闭窗体后,先后顺序不同,必须在关闭窗体前保存VPP>

  按照step1-step3完成程序设计,源码如下:

  1. using Cognex.VisionPro;
  2. using Cognex.VisionPro.ToolBlock;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace ShowCaliperPolarity
  13. {
  14. public partial class SettingVPP : Form
  15. {
  16. static string vppPath;
  17. CogToolBlock mToolBlock;
  18. Form lastForm;
  19. public SettingVPP(string tempPath,Form tempForm)
  20. {
  21. /* 跨窗口传入参数 */
  22. vppPath = tempPath; //工具块路径
  23. lastForm = tempForm; //上级窗口
  24. InitializeComponent();
  25. }
  26. /* 当打开窗体时运行 */
  27. private void SettingVPP_Load(object sender, EventArgs e)
  28. {
  29. mToolBlock = CogSerializer.LoadObjectFromFile(vppPath) as CogToolBlock; //实例化工具块
  30. cogToolBlockEdit.Subject = mToolBlock; //工具块显示到控件中
  31. }
  32. /* 当关闭窗体时运行 */
  33. private void SettingVPP_FormClosing(object sender, FormClosingEventArgs e)
  34. {
  35. DialogResult res = MessageBox.Show("是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); //保存结果信息
  36. /// 参数1:显示文本,参数2:标题,参数3:按键类型,参数4:显示图标
  37. if (res == DialogResult.Yes) //保存VPP
  38. {
  39. CogSerializer.SaveObjectToFile(cogToolBlockEdit.Subject, vppPath); //保存工具块
  40. e.Cancel = false; //确认关闭窗体
  41. }
  42. else if(res == DialogResult.No) //不保存VPP
  43. {
  44. e.Cancel = false; //确认关闭窗体
  45. }
  46. else //取消
  47. {
  48. e.Cancel = true; //取消关闭窗体
  49. }
  50. }
  51. }
  52. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/925092
推荐阅读
相关标签
  

闽ICP备14008679号