2. VisionPro开发环境与工具链搭建
VisionPro 的产线协同开发,第一步不是写代码,而是把“开发环境”和“运行环境”这两条链路先打通。开发环境负责用 QuickBuild 快速验证算法、用 VisionPro SDK 编写可部署的 C# 应用;运行环境负责让视觉作业在产线工控机上稳定跑起来,并通过 PLC 通信插件与产线控制器交换数据。本节围绕 QuickBuild 与 SDK 的安装配置、作业创建、工具组管理、图像源接入和 PLC 通信插件加载这五个环节展开,目标是搭出一套“能采图、能处理、能通信、能部署”的最小可用工具链。
一、安装配置:先分清三个组件
VisionPro 的安装包通常包含三个相互独立又彼此依赖的部分,理解它们的职责,后续配置才不会混乱。
- VisionPro 运行时(Runtime):提供 Cognex 的核心算法库、许可证服务和驱动,是 QuickBuild 与 SDK 程序共同依赖的底层。
- QuickBuild:图形化作业编辑器,用于拖拽工具、连接图像源、调参并保存
.vpp作业文件,适合快速验证和现场调试。 - VisionPro SDK:面向开发者的 .NET 程序集(如
Cognex.VisionPro.dll、Cognex.VisionPro.Blob.dll等),用于在 C# 中加载.vpp并驱动相机、PLC 通信。
安装时建议按“运行时 → QuickBuild → SDK”的顺序执行,避免 SDK 找不到运行时依赖。安装完成后需要确认两件事:一是许可证是否可用,二是环境变量是否指向正确的安装目录。可在命令行验证:
echo %VPRO_ROOT%
:: 典型输出:C:\Program Files\Cognex\VisionPro\86
dir "%VPRO_ROOT%\bin\Cognex.VisionPro.dll"
如果 VPRO_ROOT 为空或路径错误,SDK 项目在编译时会报“找不到程序集”。此时应手动将 %VPRO_ROOT%\bin 加入系统 PATH,并在 Visual Studio 中通过“引用 → 浏览”指向该目录下的 DLL。许可证方面,USB 加密狗需插在开发机上并安装驱动;软授权则需通过 Cognex 授权工具导入 .lic 文件。QuickBuild 启动后若提示“License not found”,优先检查授权服务是否运行,而不是反复重装。
二、作业创建与工具组管理
QuickBuild 中的“作业”对应一个 .vpp 文件,内部由若干“工具组”构成。工具组是逻辑容器,用于把完成同一检测任务的工具打包,例如“定位组”“测量组”“通信组”。合理的分组能让作业在 SDK 中按组调用,也便于现场按功能启停。
创建作业的典型流程是:新建 Job → 添加 Image Source → 拖入工具 → 连接输入输出 → 保存为 .vpp。以一个“工件定位 + 尺寸测量”的示例作业为例,可组织为三个工具组:
| 工具组 | 包含工具 | 作用 |
|---|---|---|
| AcquireGroup | CogAcqFifoTool | 从相机或图像文件取图 |
| LocateGroup | CogPMAlignTool | 模板匹配,输出工件位姿 |
| MeasureGroup | CogCaliperTool | 基于定位结果测量边缘间距 |
工具组之间通过“终端”连接:PMAlign 的 OutputImage 与 GetPose() 结果送入 Caliper 的输入,Caliper 的测量值再作为作业输出。这里要特别注意坐标系约定:PMAlign 输出的位姿是相对于训练模板坐标系的,Caliper 若直接使用该位姿,测量结果就落在工件坐标系下;若需要图像坐标系下的绝对位置,则要显式做坐标变换。全文与图示均以“图像左上角为原点、X 向右、Y 向下”为图像坐标系约定。
job.Tools["LocateGroup"] 这类字符串索引访问,中文名在部分版本中易出现编码问题。三、图像源接入
图像源是作业的入口,QuickBuild 支持相机、图像文件、图像序列和自定义图像源。产线开发阶段常用“图像文件”回放验证算法,上线时再切换为 GigE 或 USB3 相机。接入相机时需在 CogAcqFifoTool 中选择对应的采集接口(如 CogGigEVision),设置触发模式:
- 自由运行:相机按固定帧率连续采集,适合调试。
- 软触发:由程序调用触发命令,适合与 PLC 节拍配合。
- 硬触发:由光电传感器或 PLC 的 IO 信号触发,产线最常用。
硬触发接线时,相机 Trigger 输入接 PLC 的晶体管输出或传感器 NPN/PNP 信号,需确认电平极性一致。若采到的图像全黑或全白,先查触发信号是否到达、曝光时间是否过短或过长,再查光源是否同步。
四、PLC 通信插件加载
VisionPro 与 PLC 的通信通常通过两类插件实现:一类是 Cognex 提供的 Cognex.VisionPro.Communications 相关程序集,用于串口、TCP/IP 通信;另一类是针对具体 PLC 品牌的驱动,如西门子 S7、三菱 MC、欧姆龙 FINS 等,常以 DLL 或 SDK 形式提供。加载步骤为:在 Visual Studio 项目中添加引用 → 在代码中初始化通信对象 → 配置 IP、端口、站号 → 建立连接并读写数据区。
// 示例:TCP 方式与 PLC 交换结果(参数为示例值)
var client = new TcpClient();
client.Connect("192.168.0.10", 5000); // PLC IP 与端口
var stream = client.GetStream();
byte[] result = BitConverter.GetBytes(measureValue); // 测量值转字节
stream.Write(result, 0, result.Length);
实际项目中更推荐把通信封装为独立工具组或独立线程,避免阻塞视觉处理。通信插件加载后,务必做一次“心跳”验证:PLC 侧发送一个触发字,视觉侧返回一个结果字,确认双向通路正常,再接入正式节拍。
五、最小验证闭环
工具链搭好后,不要急着上产线,先做一次最小闭环验证:用一张标准工件图跑通 Acquire → Locate → Measure,确认测量值在合理范围;再通过通信插件把该值写入 PLC 的 DB 区或寄存器,用 PLC 编程软件在线监视是否收到正确数值;最后用 PLC 发一个触发位,观察视觉侧是否重新采图并返回新结果。三步都通过,说明安装、作业、图像源和通信插件这条链路已经可用,后续的算法优化和节拍调优才有稳定基础。