4. 作业与作业管理器
在 VisionPro 的软件架构中,作业(Job)是连接“视觉工具配置”与“实际生产运行”的核心调度单元。一个作业通常包含一个或多个视觉工具(如 CogBlobTool、CogPMAlignTool、CogCaliperTool 等)、工具之间的连接关系、输入输出参数、图像采集配置以及运行时的判定逻辑。作业管理器(JobManager)则负责在运行时对作业进行加载、启动、停止、保存和版本切换。理解作业在架构中的调度角色,是掌握 VisionPro 应用从开发态走向产线态的关键一步。
作业在架构中的位置与调度角色
从架构层次看,VisionPro 应用通常分为三层:底层是图像采集与硬件接口层,中间是视觉工具与作业层,上层是应用逻辑与人机界面层。作业层处于承上启下的位置:向下,它通过图像源(如 CogAcqFifoTool 或相机采集接口)获取图像;向上,它向应用层暴露运行状态、结果数据和判定信号。作业管理器并不直接参与图像处理算法,而是负责“什么时候加载哪个作业、什么时候运行、运行结果如何回传、作业文件如何持久化”这些调度问题。
一个典型的调度关系可以这样理解:应用启动时,作业管理器根据配置或用户选择加载指定作业文件(.vpp 或 .job 格式);加载完成后,作业进入就绪状态;当触发信号(如 PLC 的拍照完成信号或软件按钮)到来时,作业管理器调用作业的 Run 方法,作业内部按工具连接顺序依次执行;执行结束后,作业管理器收集各工具的输出结果,并将整体判定(Pass/Fail)回传给应用层。整个过程是“加载—就绪—运行—结果回传”的循环,而不是每次运行都重新加载文件。
作业的加载:从文件到内存对象
加载是作业生命周期的起点。在 VisionPro 中,作业通常以 .vpp 文件形式保存在磁盘上,作业管理器通过 JobManager.Load() 或等效接口将文件反序列化为内存中的作业对象。加载过程需要关注几个关键点:第一,文件路径必须可访问,且作业文件与当前 VisionPro 版本兼容;第二,作业中引用的外部资源(如标定文件、模板图像、脚本程序集)必须同时存在,否则加载会失败或工具处于无效状态;第三,加载完成后应检查作业的 IsReady 或等效状态标志,确认所有工具均已正确初始化。
实际项目中,常见的加载策略有两种:一是应用启动时一次性加载所有可能用到的作业,适合作业数量少、内存充足的场景;二是按需加载,即根据当前生产配方动态加载对应作业,适合多品种、小批量的产线。按需加载时要注意卸载旧作业,避免内存泄漏和工具句柄残留。一个实用的做法是:在切换配方时,先调用 Stop() 停止当前作业,再调用 Unload() 释放资源,最后加载新作业并调用 Run() 前的初始化检查。
作业的运行:调度与结果收集
运行是作业调度角色最直接的体现。作业管理器在收到运行请求后,通常按以下顺序执行:首先确认作业处于就绪状态;然后触发图像采集,等待图像就绪;接着按工具连接顺序依次执行各视觉工具;最后收集各工具的输出结果,计算整体判定。这里需要特别注意工具之间的依赖关系:如果 CogCaliperTool 的输入区域依赖于 CogPMAlignTool 的定位结果,那么执行顺序就不能颠倒,否则卡尺工具会在错误的区域中搜索边缘。
结果收集阶段,作业管理器通常将各工具的输出封装为一个结果集合,应用层可以通过工具名称或索引访问具体数据。例如,定位工具输出 X、Y、角度,卡尺工具输出边缘位置和宽度,Blob 工具输出面积和数量。整体判定通常由作业的判定表达式决定,例如“定位得分大于 0.8 且卡尺宽度在 9.8~10.2mm 之间则判定为 Pass”。这个判定表达式可以配置在作业内部,也可以由应用层根据业务逻辑计算。
作业的保存与版本管理
保存作业时,VisionPro 会将当前内存中的工具配置、连接关系、参数值和判定设置序列化回文件。保存操作看似简单,但在工程实践中容易引发问题:如果作业正在运行中保存,可能保存到不一致的中间状态;如果多人同时编辑同一作业文件,可能发生覆盖冲突。因此,建议在保存前先停止作业,并确保没有其他进程正在写入同一文件。
版本管理是作业生命周期中容易被忽视但极其重要的一环。一个视觉作业从调试到量产,往往会经历多次参数调整:V1.0 是初始调试版本,V1.1 可能微调了定位阈值,V1.2 可能更换了模板图像,V2.0 可能重构了工具链。如果没有版本记录,当产线出现批量误判时,很难快速定位是哪次修改引入的问题。实用的版本管理策略包括:作业文件命名中嵌入版本号和日期,例如 Job_Connector_20240612_V1.2.vpp;维护一份变更记录表,记录每次修改的内容、原因和修改人;保留最近三个稳定版本,以便快速回滚。
| 版本号 | 修改内容 | 修改原因 | 验证结果 |
|---|---|---|---|
| V1.0 | 初始作业,PMAlign + Caliper | 新项目调试 | 离线图像通过 |
| V1.1 | PMAlign 接受阈值 0.7→0.75 | 减少误定位 | 产线试跑 200 件,误判率下降 |
| V1.2 | 更换模板图像,增加 Blob 工具 | 新增表面缺陷检测 | 缺陷样本检出率 98% |
| V2.0 | 重构工具链,增加标定补偿 | 换型后精度要求提高 | 重复精度 ±0.02mm |
作业状态与异常处理
作业在运行过程中可能处于多种状态:未加载、加载中、就绪、运行中、完成、异常。作业管理器需要对这些状态进行统一管理,并在异常发生时给出明确的错误信息。常见的异常包括:图像采集超时、工具执行失败、结果判定为 Fail、外部资源丢失等。对于采集超时,通常需要检查相机触发信号和光源同步;对于工具执行失败,需要检查输入图像是否有效、搜索区域是否越界;对于判定 Fail,则需要结合结果数据判断是产品真实缺陷还是参数设置过严。
一个稳健的调度设计是:作业管理器在每次运行后记录运行日志,包括时间戳、作业版本、运行耗时、各工具得分和最终判定。当连续出现多次 Fail 或异常时,触发报警并暂停产线,等待人工确认。这样既保证了生产效率,又避免了批量误判造成的损失。
总结来说,作业与作业管理器在 VisionPro 架构中扮演的是“调度中枢”的角色。作业是视觉配置的载体,作业管理器是运行控制的执行者。掌握加载、运行、保存和版本管理这四个环节,并建立清晰的版本记录和异常处理机制,才能让视觉应用在产线上稳定、可维护地长期运行。