Cognex VisionPro + C# 联合编程全部代码
作者小李关键词VisionPro、C#、WinForms、CogToolBlock、机器视觉上位机一、前言在工业机器视觉领域Cognex VisionProVP是最主流的视觉软件平台之一。但实际项目中单靠 VisionPro 的 QuickBuild 界面很难满足工厂的定制化需求通常需要用 C# 开发上位机将 VP 的检测能力集成进来搭建一套完整的工业检测系统。本文记录了 VisionPro C#WinForms联合编程的完整过程包括项目配置解决 x64 架构问题核心 API 使用CogToolBlock、CogRecordDisplay界面设计手动模式 触发模式的 TabControl 布局关键代码实现二、环境准备2.1 软件版本软件版本要求Cognex VisionProVisionPro 9.x 或以上Visual Studio2019 / 2022.NET Framework4.5 或以上2.2 添加 VisionPro 引用在 Visual Studio 中右键项目 →添加引用浏览到 VisionPro 安装目录通常在C:\Program Files\Cognex\VisionPro\添加以下 DLLCognex.VisionPro.dllCognex.VisionPro.ImageFile.dllCognex.VisionPro.Core.dll2.3 ⚠️ 重要解决架构不匹配问题添加 VP 引用后生成项目时可能出现警告警告引用的程序集 Cognex.VisionPro.dll 目标为不同的处理器原因VP 的 DLL 是 x64 架构而项目默认是Any CPU导致不匹配。解决方法右键项目 →属性→生成将目标平台从Any CPU改为x64重新生成项目警告消失这一步非常容易被忽略是联合编程最常见的坑之一。三、核心 API 说明3.1 CogToolBlock — 视觉程序载体CogToolBlock是 VisionPro 中的核心容器在 QuickBuild 中搭好的视觉程序.vpp 文件就是一个 ToolBlock。csharp复制using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; // 加载 .vpp 文件 CogToolBlock m_tb (CogToolBlock)CogSerializer.LoadObjectFromFile(D:\Vision\my_program.vpp); // 传入输入图像 m_tb.Inputs[InputImage].Value m_Image; // 运行 m_tb.Run(); // 读取输出结果 double score (double)m_tb.Outputs[Score].Value; string result score 0.8 ? OK : NG;3.2 CogRecordDisplay — 图像显示控件CogRecordDisplay是 VP 提供的 WinForms 控件用于显示图像和叠加检测结果图形。csharp复制// 显示图像 cogRecordDisplay1.Image m_Image; // 显示 ToolBlock 运行后的结果叠加图形 cogRecordDisplay1.Record m_tb.CreateLastRunRecord().SubRecords[OutputImage]; // 自适应缩放 cogRecordDisplay1.Fit();3.3 CogImage8Grey — 灰度图像csharp复制using Cognex.VisionPro.ImageFile; // 从文件读取图像 CogImageFile imageFile new CogImageFile(); imageFile.Open(filePath, CogImageFileModeConstants.Read); CogImage8Grey m_Image (CogImage8Grey)imageFile[0]; imageFile.Close();四、界面设计4.1 界面布局思路典型的 VisionPro C# 上位机界面分为两个区域--------------------------------------------- | | | | 左侧控制面板 | 右侧图像显示区域 | | (TabControl) | (CogRecordDisplay) | | | | ---------------------------------------------4.2 使用 TabControl 区分两种模式本项目将左侧控制面板设计为TabControl包含两个 Tab 页手动模式页btnRunOnce单次运行按钮Text Run OncebtnRunContinuous连续运行按钮Text Run ContinuouslblCount计数标签Text CounttxtCount显示运行次数的输入框触发模式页GroupBox触发设置分组框cmbTriggerSourceComboBox选择触发源软触发 / 硬件触发lblTriggerSourceLabelText 触发源btnStartTrigger开始触发按钮btnStopTrigger停止触发按钮lblTriggerStatus触发状态显示标签4.3 添加控件步骤打开 WinForms 设计器在工具箱中找到TabControl拖到左侧面板选中 TabControl → 属性窗口 → 点击TabPages旁的...按钮在集合编辑器中将tabPage1.Text改为 手动模式tabPage2.Text改为 触发模式分别在两个 Tab 页中添加对应控件五、关键代码实现5.1 窗体初始化csharp复制private CogToolBlock m_tb; private CogImage8Grey m_Image; private bool m_isRunning false; private int m_runCount 0; private void Form1_Load(object sender, EventArgs e) { // 加载 ToolBlock string vppPath D:\Vision\my_program.vpp; if (File.Exists(vppPath)) { m_tb (CogToolBlock)CogSerializer.LoadObjectFromFile(vppPath); } // 初始化触发源下拉框 cmbTriggerSource.Items.Add(软触发); cmbTriggerSource.Items.Add(硬件触发); cmbTriggerSource.SelectedIndex 0; }5.2 手动模式 — 单次运行csharp复制5.3 手动模式 — 连续运行csharp复制5.4 触发模式 — 软触发示例csharp复制5.5 打开图像文件csharp复制private void btnOpenImage_Click(object sender, EventArgs e) { OpenFileDialog dlg new OpenFileDialog(); dlg.Filter 图像文件|*.bmp;*.jpg;*.png;*.tiff|所有文件|*.*; if (dlg.ShowDialog() DialogResult.OK) { CogImageFile imageFile new CogImageFile(); imageFile.Open(dlg.FileName, CogImageFileModeConstants.Read); m_Image (CogImage8Grey)imageFile[0]; imageFile.Close(); cogRecordDisplay1.Image m_Image; cogRecordDisplay1.Fit(); } }六、常见问题问题原因解决方案生成警告处理器架构不匹配项目平台是 Any CPUVP DLL 是 x64项目属性 → 生成 → 目标平台改为 x64CogRecordDisplay 控件找不到没添加 VP 引用或工具箱未刷新手动添加 VP DLL 引用右键工具箱 → 选择项 → 浏览添加ToolBlock 输入/输出名称不对名称和 QuickBuild 中设置的不一致打开 .vpp 文件在 QuickBuild 里确认输入输出端口名跨线程操作控件报错触发模式在子线程更新 UI用this.Invoke()包裹 UI 操作七、总结VP C# 联合编程的核心就三件事配置好 x64 平台— 避免架构不匹配用 CogToolBlock 封装视觉逻辑— 在 QuickBuild 里搭好C# 里调用用 CogRecordDisplay 显示结果— 图像和检测图形一并显示界面上用TabControl 区分手动模式和触发模式是工业项目中很常见的设计思路手动模式用于调试和离线测试触发模式对接实际产线信号。如有问题欢迎交流。