4. ctrlX Data Layer在视觉协同中的核心作用

在 ctrlX AUTOMATION 的机器视觉协同架构中,ctrlX Data Layer(以下简称 Data Layer)并不是一个简单的“数据中转站”,而是整个视觉应用与 PLC 控制逻辑之间的统一数据总线。它把相机、视觉算法、机器人、PLC、HMI 以及上层 IT 系统连接在同一套地址空间里,使视觉结果能够以标准化、可订阅、可追溯的方式参与实时控制。理解 Data Layer 的核心作用,需要抓住四个关键点:数据节点建模、发布/订阅机制、跨应用数据交换,以及视觉结果与 PLC 变量的映射方法。

一、数据节点建模:把视觉对象变成可寻址的节点

Data Layer 采用树状层次结构组织数据,每个数据点称为一个“节点”(Node),通过类似文件路径的地址访问,例如 vision/camera1/result/part_id。节点路径由斜杠分隔,根节点下可以按设备、功能、结果类型逐层划分。节点不仅承载数值,还带有数据类型、访问权限、时间戳和质量状态等元信息。

在视觉协同场景中,建模的核心是把物理对象和逻辑对象映射为稳定的节点路径。例如一台相机可以建模为 vision/cam01,其下再分 config、status、result 三个子树。配置节点存放曝光、触发模式等参数;状态节点反映在线、就绪、错误等运行状态;结果节点则存放检测结论、坐标、测量值等视觉输出。这样建模的好处是:PLC 程序不需要知道相机内部如何实现,只需按固定路径读取或订阅结果节点即可。

建模时建议遵循三条原则:第一,路径语义清晰,避免使用 data1、value2 这类无意义名称;第二,结果节点与配置节点分离,防止运行时误写;第三,为每个结果节点定义明确的数据类型和单位,例如 vision/cam01/result/offset_x 为 float32,单位 mm。下面这张图展示了视觉协同中典型的数据节点结构与数据流向关系。

ctrlX Data Layer 视觉协同数据节点与交换关系 视觉应用 相机采集 / 触发 cam01 · 曝光 · 触发 视觉算法处理 定位 · 测量 · 判定 结果封装 坐标 · 角度 · OK/NG 发布到 Data Layer 写入结果节点 状态回读 就绪 / 错误 / 心跳 ctrlX Data Layer 节点树 vision/cam01 ├─ config/exposure_time ├─ status/ready ├─ status/error_code ├─ result/part_id ├─ result/offset_x ├─ result/offset_y └─ result/verdict PLC / 上层应用 订阅结果节点 Subscribe 映射到 PLC 变量 %MD100 等 运动控制 / 分拣 补偿 · 抓取 · 剔除 HMI / 看板显示 状态 · 统计 · 报警 写入配置节点 切换配方 / 参数 发布 订阅 配置回写 节点路径稳定、类型明确、读写分离,是视觉结果可靠进入控制回路的前提

二、发布/订阅机制:从轮询到事件驱动

传统视觉与 PLC 协同常采用轮询方式:PLC 周期性读取视觉结果寄存器,既浪费总线带宽,又引入不确定延迟。Data Layer 的发布/订阅机制改变了这一模式。视觉应用作为发布者,在结果节点更新时主动发布新值;PLC 或其它应用作为订阅者,提前声明对哪些节点感兴趣,一旦节点值变化,Data Layer 立即推送通知。

订阅时可以设置采样周期和触发条件。例如订阅 vision/cam01/result/verdict,可配置为“值变化时推送”,这样只有 OK/NG 状态翻转时才产生事件;订阅 vision/cam01/result/offset_x,可配置为“周期 10 ms 推送”,用于连续跟踪。发布/订阅机制的关键价值在于:数据只在需要时流动,控制程序从“主动问”变成“被动收”,响应更及时,CPU 和网络负载也更可控。

三、跨应用数据交换:统一地址空间下的多角色协作

在一条视觉检测产线上,往往同时存在多个角色:视觉程序负责图像处理和结果输出,PLC 负责逻辑与运动控制,HMI 负责显示和操作,MES 或边缘计算应用负责统计与追溯。Data Layer 为这些角色提供统一地址空间,任何应用只要拥有相应权限,就可以读写同一节点,而不需要点对点建立私有通信。

例如视觉程序写入 vision/cam01/result/offset_x = 1.25,PLC 订阅该节点后把值映射到 %MD100,HMI 同时订阅同一节点用于实时显示,MES 则周期读取该节点用于质量记录。三者读取的是同一份数据,不存在“PLC 看到的值和 HMI 看到的值不一致”的问题。跨应用交换的另一个优势是解耦:视觉程序升级或替换时,只要节点路径和数据类型不变,PLC 和 HMI 侧无需修改。

四、视觉结果与 PLC 变量的映射方法

映射是视觉协同落地的最后一公里。Data Layer 节点本身不是 PLC 变量,必须通过映射把节点值绑定到 PLC 的输入/输出地址或符号变量。常见映射方式有三种:

  • 直接地址映射:把 vision/cam01/result/offset_x 映射到 %MD100,适合单个标量结果。PLC 侧按 REAL 类型读取,注意字节序和数据类型一致。
  • 结构体映射:把一组结果节点映射到 PLC 的 UDT 或结构变量,例如 VisionResult.OffsetX、VisionResult.OffsetY、VisionResult.Verdict,适合结果较多、需要整体传递的场景。
  • 触发字映射:把 result/part_id 或 result/sequence_no 映射为触发字,PLC 检测到触发字变化后,再一次性读取整组结果,避免读到“半更新”的数据。

映射时必须注意三点:第一,数据类型匹配,Data Layer 的 float32 对应 PLC 的 REAL,bool 对应 BOOL,不要用 INT 去接浮点节点;第二,更新原子性,若一组结果分多个节点发布,应使用触发字或版本号保证 PLC 读到的是同一帧结果;第三,异常处理,当 status/ready 为 false 或 status/error_code 非零时,PLC 应屏蔽结果节点,避免用过期数据做判断。

建议在项目初期就固定节点命名规范和映射表,把节点路径、数据类型、PLC 地址、更新方式、异常默认值逐项列出。这样视觉、PLC、HMI 三方可以并行开发,联调时只需核对映射表,而不必反复猜测对方的数据含义。

综合来看,Data Layer 在视觉协同中承担了“建模—发布—交换—映射”的完整链路:节点建模让数据有稳定地址,发布/订阅让数据按需流动,跨应用交换让多角色共享同一事实来源,映射方法则把视觉结果真正接入 PLC 控制回路。掌握这四点,才能让视觉系统从“看得见”走向“控得住”。