- 使用 康耐視 VisionPro 在 C# 環(huán)境中進行尺寸測量和缺陷檢測是工業(yè)視覺領(lǐng)域非常經(jīng)典和強大的組合。
一、核心概念與開發(fā)模式
VisionPro 提供兩種主要的開發(fā)模式,理解它們至關(guān)重要:
1、QuickBuild(圖形化配置界面):
用于快速搭建和調(diào)試視覺工具鏈(ToolBlock)。你通過拖拽工具、連線、配置參數(shù)來設(shè)計檢測流程,無需編寫代碼。
優(yōu)點:調(diào)試直觀,算法參數(shù)調(diào)整方便,非常適合原型驗證和工藝摸索。
2、C# .NET API(代碼集成):
用于將你在 QuickBuild 中調(diào)試好的工具鏈集成到你的上位機軟件中。你通過 C# 代碼調(diào)用 VisionPro 的庫(如 Cognex.VisionPro.dll)來加載工具、運行處理、獲取結(jié)果并做出決策。
優(yōu)點:靈活性極高,可以創(chuàng)建專業(yè)的用戶界面、連接數(shù)據(jù)庫、控制PLC、處理業(yè)務(wù)流程。
標準工作流是:在 QuickBuild 中調(diào)試工具 → 將 .vpp 文件保存為“作業(yè)” → 在 C# 項目中加載并運行該作業(yè)。
二、開發(fā)環(huán)境準備
1、安裝軟件:
從康耐視官網(wǎng)下載并安裝 VisionPro 軟件(注意版本,如 9.x, 10.x)。
安裝時務(wù)必勾選 .NET Interop Assemblies (.NET 程序集) 和 Samples (示例代碼)。
2、創(chuàng)建 C# 項目:
- 打開 Visual Studio (推薦 2017+),創(chuàng)建一個新的 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# 代碼實現(xiàn):尺寸測量
尺寸測量通常包含兩個關(guān)鍵工具:定位 (PMAlign) 和 測量(Caliper)。
-
步驟:
定位工件:使用 CogPMAlignTool 找到零件的特征圖案,獲取其坐標和角度,為測量建立坐標系。
創(chuàng)建測量區(qū)域:基于定位結(jié)果,在需要測量的邊緣附近創(chuàng)建搜索區(qū)域。
執(zhí)行邊緣測量:使用 CogCaliperTool 或 CogDistancePointPointTool 在指定區(qū)域內(nèi)精確查找邊緣并計算距離。
using Cognex.VisionPro;
using Cognex.VisionPro.PMAlign;
using Cognex.VisionPro.Caliper;
using Cognex.VisionPro.Display;
// 1. 加載之前在QuickBuild中創(chuàng)建并調(diào)試好的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. 獲取結(jié)果
// 假設(shè)你的CaliperTool在Job中的名字是 "CogCaliperTool1"
ICogTool caliperTool = myJob.Tools["CogCaliperTool1"];
if (caliperTool.RunStatus.Result == CogToolResultConstants.Accept)
{
// 獲取測量結(jié)果
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");
// 通常需要將像素距離轉(zhuǎn)換為物理距離(毫米)
// double calibrationRatio = 0.02; // 例如,每個像素代表0.02mm
// double physicalDistance = measuredDistance * calibrationRatio;
// Console.WriteLine($"Physical Distance: {physicalDistance:F3} mm");
}
}
// 5. 【可選】在CogDisplay控件中顯示圖像和結(jié)果
cogDisplay1.Image = myImage;
cogDisplay1.StaticGraphics.AddList(
myJob.Tools["CogCaliperTool1"].Results[0].CreateResultGraphics(
CogCaliperResultGraphicConstants.Midpoint |
CogCaliperResultGraphicConstants.Edges),
"MeasurementResults");