4. XG-X项目文件与配方数据结构

在XG-X控制器上做换型调试,最容易踩的坑不是“参数改错了”,而是“改在了错误的层级”。同一个曝光时间,可能存在于相机单元里,也可能被某个场景覆盖,还可能被配方文件整体替换。如果不先弄清项目文件与配方的层级结构,换型时就会出现“明明改了参数,切换后却没生效”或“切回旧配方,部分参数没恢复”的问题。本节把XG-X的项目文件组织方式和配方文件的可切换参数范围讲清楚,为后续的配方创建、切换与校验打基础。

一、项目文件是“容器”,配方是“可替换的参数快照”

XG-X的项目文件(Project)是保存整套视觉系统配置的顶层容器,它包含硬件连接关系、相机与光源设置、场景与单元的逻辑结构、检测参数、通信与I/O映射等。项目文件本身是“当前正在运行的那一套配置”。而配方(Recipe)并不是一个独立的项目,它是从项目中抽取出来的、可被整体替换的参数集合。可以这样理解:项目是“舞台和剧本结构”,配方是“某一款产品的台词本”。换型时切换配方,相当于换台词本,但舞台结构(相机、光源、通信)通常保持不变。

因此,配方文件里保存的是“随产品变化而需要切换的参数”,而不是整个项目。哪些参数进配方、哪些留在项目里,是换型调试中必须提前规划的核心问题。

二、项目、场景、单元、参数组的四层结构

XG-X内部采用“项目 → 场景 → 单元 → 参数组”的层级组织方式。理解这四层,才能判断一个参数到底属于哪一层、切换配方时会不会被覆盖。

  • 项目(Project):最顶层,对应一台XG-X控制器上的完整配置。一个项目可以包含多个场景,项目级参数包括通信设置、I/O分配、全局触发方式、系统校准数据等。这些通常不随产品换型而改变。
  • 场景(Scene):项目下的逻辑分支,通常对应一种检测任务或一个工位。例如“外观检测场景”“尺寸测量场景”。场景可以独立启用或切换,场景级参数包括该场景使用的相机、触发条件、检测流程顺序等。
  • 单元(Unit):场景内的功能模块,是实际执行检测、测量、判断的最小逻辑单元。例如“边缘检测单元”“斑点计数单元”“OCR单元”。单元级参数包括ROI区域、阈值、算法类型、判定上下限等,这些是换型时最常调整的部分。
  • 参数组(Parameter Group):单元内部按功能归类的参数集合。例如一个边缘检测单元下可分为“采集参数组”(曝光、增益)、“处理参数组”(滤波、边缘阈值)、“判定参数组”(宽度上下限)。参数组是配方文件实际读写的最小组织单位。

这四层是“包含”关系:项目包含场景,场景包含单元,单元包含参数组。配方文件在保存时,会按照这个层级路径记录每个可切换参数的位置,例如“场景1 / 单元2 / 处理参数组 / 边缘阈值”。切换配方时,系统按路径逐项替换,路径不匹配的参数不会被覆盖。

XG-X 项目层级与配方可切换参数范围 项目 Project 通信设置 · I/O分配 · 全局触发 · 系统校准 · 相机连接 通常不随产品切换 (留在项目层) 场景 Scene 场景1:外观检测 · 场景2:尺寸测量 · 场景3:字符识别 场景启用/切换 可随配方切换 单元 Unit 边缘检测单元 · 斑点计数单元 · OCR单元 · 测量单元 ROI/算法/阈值 配方核心切换区 参数组 Parameter Group 采集参数组:曝光 · 增益 · 光源亮度 处理参数组:滤波 · 边缘阈值 · 二值化阈值 判定参数组:上下限 · 判定条件 · 输出结果 坐标参数组:ROI位置 · 偏移量 · 搜索范围 配方文件 Recipe 按路径记录可切换参数:场景启用状态 · 单元ROI · 采集/处理/判定参数组 · 坐标偏移 不包含:通信/I/O/系统校准

三、配方文件里到底保存哪些可切换参数

配方文件保存的是“与产品型号强相关、换型时必须整体替换”的参数。根据XG-X的实际使用习惯,可切换参数大致分为以下几类:

参数类别 典型参数 所在层级 是否进配方
采集参数 曝光时间、增益、光源亮度、光源通道 单元 → 采集参数组 是
处理参数 滤波类型、边缘阈值、二值化阈值、形态学次数 单元 → 处理参数组 是
判定参数 尺寸上下限、面积上下限、计数阈值、判定条件 单元 → 判定参数组 是
坐标参数 ROI位置、ROI尺寸、搜索范围、偏移量 单元 → 坐标参数组 是
场景状态 场景启用/禁用、场景执行顺序 场景 是
通信与I/O PLC地址映射、触发信号分配、输出点定义 项目 否
系统校准 相机标定数据、镜头畸变校正、坐标变换矩阵 项目 否

需要特别注意的是,通信与I/O、系统校准这类参数通常不进入配方。原因是它们与硬件接线和安装状态绑定,换产品时硬件不变,这些参数也不应改变。如果误把I/O映射放进配方,切换配方后可能导致触发信号错乱,这是换型调试中需要避免的。

四、换型时参数如何被替换:一个具体示例

假设当前项目中有“场景1:外观检测”,其下有一个“边缘检测单元”,该单元包含采集、处理、判定三个参数组。现在要从产品A换型到产品B,操作过程如下:

  1. 在XG-X的配方管理界面中,选择已保存的“产品B配方”。
  2. 系统按配方文件中记录的路径,逐项查找对应参数。例如路径“场景1 / 边缘检测单元 / 采集参数组 / 曝光时间”,将当前值从产品A的800μs替换为产品B的1200μs。
  3. 路径“场景1 / 边缘检测单元 / 判定参数组 / 宽度上限”,从产品A的10.5mm替换为产品B的12.0mm。
  4. 路径“场景1 / 边缘检测单元 / 坐标参数组 / ROI位置”,从产品A的(320,240)替换为产品B的(350,260)。
  5. 项目层的通信设置、I/O分配、系统校准保持不变,不参与替换。

替换完成后,建议逐项核对关键参数是否已更新。可以在XG-X的参数列表中查看当前值,并与配方文件中的记录值对比。如果发现某个参数没有变化,首先检查该参数是否被正确包含在配方文件中,其次检查路径是否匹配——例如单元名称被修改过,路径就会失效。

实用建议:在创建配方前,先列出本产品换型需要切换的全部参数清单,按“场景 → 单元 → 参数组 → 参数名”的路径逐条记录。这份清单既是配方文件的检查依据,也是换型后验证的对照表。对于不确定是否该进配方的参数,判断标准是:换产品时它是否需要改变?需要改变就进配方,不需要就留在项目层。
常见误区:把“项目”和“配方”混为一谈,认为切换配方就是切换整个项目。实际上配方只替换参数值,不改变项目结构。如果换型时需要增加或删除单元、改变场景数量,那属于项目结构调整,不能靠切换配方完成,需要修改项目文件本身。