- 使用 康耐视 VisionPro 在 C# 环境中进行尺寸测量和缺陷检测是工业视觉领域非常经典和强大的组合。
一、核心概念与开发模式
VisionPro 提供两种主要的开发模式,理解它们至关重要:
1、QuickBuild(图形化配置界面):
-
用于快速搭建和调试视觉工具链(ToolBlock)。你通过拖拽工具、连线、配置参数来设计检测流程,无需编写代码。
-
优点:调试直观,算法参数调整方便,非常适合原型验证和工艺摸索。
2、C# .NET API(代码集成):
-
用于将你在 QuickBuild 中调试好的工具链集成到你的上位机软件中。你通过 C# 代码调用 VisionPro 的库(如 Cognex.VisionPro.dll)来加载工具、运行处理、获取结果并做出决策。
-
优点:灵活性极高,可以创建专业的用户界面、连接数据库、控制PLC、处理业务流程。
标准工作流是:在 QuickBuild 中调试工具 → 将 .vpp 文件保存为“作业” → 在 C# 项目中加载并运行该作业。
二、开发环境准备
1、安装软件:
-
从康耐视官网下载并安装 VisionPro 软件(注意版本,如 9.x, 10.x)。
-
安装时务必勾选 .NET Interop Assemblies (.NET 程序集) 和 Samples (示例代码)。
2、创建 C# 项目:
- 打开 Visual Studio (推荐 2017+),创建一个新的 Windows Forms App (.NET Framework) 或 WPF App 项目。
3、添加引用:
-
在解决方案资源管理器中,右键点击“引用” -> “添加引用”。
-
浏览到 VisionPro 的安装目录(通常类似 C:\Program Files\Cognex\VisionPro\bin)。
-
添加以下核心 DLL:
- Cognex.VisionPro.dll - (最核心)
- Cognex.VisionPro.Core.dll
- Cognex.VisionPro.Blob.dll - (用于斑点分析)
- Cognex.VisionPro.Caliper.dll - (用于卡尺测量)
- Cognex.VisionPro.PMAlign.dll - (用于图案定位)
- Cognex.VisionPro.Display.dll - (用于图像显示控件)
三、C# 代码实现:尺寸测量
-
尺寸测量通常包含两个关键工具:定位 (PMAlign) 和 测量(Caliper)。
-
步骤:
-
定位工件:使用 CogPMAlignTool 找到零件的特征图案,获取其坐标和角度,为测量建立坐标系。
-
创建测量区域:基于定位结果,在需要测量的边缘附近创建搜索区域。
-
执行边缘测量:使用 CogCaliperTool 或 CogDistancePointPointTool 在指定区域内精确查找边缘并计算距离。
-
using Cognex.VisionPro;
using Cognex.VisionPro.PMAlign;
using Cognex.VisionPro.Caliper;
using Cognex.VisionPro.Display;
// 1. 加载之前在QuickBuild中创建并调试好的Job文件
CogJobManager myJobManager = new CogJobManager();
myJobManager.Jobs.LoadFromFile(@"C:\VisionJobs\MyMeasurementJob.vpp");
ICogJob myJob = myJobManager.Jobs[0];
// 2. 获取图像(例如从相机采集或从文件加载)
CogImage8Grey myImage = new CogImage8Grey(@"C:\Images\part01.bmp");
// 将图像传递给Job的输入
myJob.Inputs["InputImage"].Value = myImage;
// 3. 运行Job
myJob.Run();
// 4. 获取结果
// 假设你的CaliperTool在Job中的名字是 "CogCaliperTool1"
ICogTool caliperTool = myJob.Tools["CogCaliperTool1"];
if (caliperTool.RunStatus.Result == CogToolResultConstants.Accept)
{
// 获取测量结果
CogCaliperTool resultTool = caliperTool as CogCaliperTool;
if (resultTool != null && resultTool.Results.Count > 0)
{
// 获取第一个边缘对的距离(如果是测量孔距、宽度等)
double measuredDistance = resultTool.Results[0].Distance;
Console.WriteLine($"Measured Distance: {measuredDistance:F3} pixels");
// 通常需要将像素距离转换为物理距离(毫米)
// double calibrationRatio = 0.02; // 例如,每个像素代表0.02mm
// double physicalDistance = measuredDistance * calibrationRatio;
// Console.WriteLine($"Physical Distance: {physicalDistance:F3} mm");
}
}
// 5. 【可选】在CogDisplay控件中显示图像和结果
cogDisplay1.Image = myImage;
cogDisplay1.StaticGraphics.AddList(
myJob.Tools["CogCaliperTool1"].Results[0].CreateResultGraphics(
CogCaliperResultGraphicConstants.Midpoint |
CogCaliperResultGraphicConstants.Edges),
"MeasurementResults");













网友评论