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。下面这张图展示了视觉协同中典型的数据节点结构与数据流向关系。
二、发布/订阅机制:从轮询到事件驱动
传统视觉与 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 应屏蔽结果节点,避免用过期数据做判断。
综合来看,Data Layer 在视觉协同中承担了“建模—发布—交换—映射”的完整链路:节点建模让数据有稳定地址,发布/订阅让数据按需流动,跨应用交换让多角色共享同一事实来源,映射方法则把视觉结果真正接入 PLC 控制回路。掌握这四点,才能让视觉系统从“看得见”走向“控得住”。