3. ctrlX Data Layer数据层原理与建模
ctrlX Data Layer(简称 Datalayer)是 ctrlX AUTOMATION 平台中所有应用、实时任务、现场总线与外部客户端共享数据的统一入口。它不是一个简单的全局变量表,而是一套带类型、带元数据、可寻址、可订阅的实时数据模型。理解它的关键在于:任何可被访问的数据,都必须先被“建模”为一个节点,并挂载到统一的根路径之下。
数据模型:节点树与地址空间
Datalayer 采用树形地址空间组织数据,根节点为 /。每个节点由路径唯一标识,例如 /motion/axes/axis1/pos。节点分为两类:分支节点(branch)只用于组织层级,本身不承载值;叶子节点(leaf)承载实际数据,并带有明确的数据类型。这种“目录 + 文件”的类比有助于理解:分支像文件夹,叶子像文件。
节点路径遵循 POSIX 风格,使用斜杠分隔,区分大小写。路径中不允许出现空格与特殊字符,通常采用小写字母、数字与下划线。一个规范的路径应能自解释其含义,例如 /plc/app/program/status 比 /p1/s 更利于团队协作与后期维护。
节点结构:值、类型与元数据
每个叶子节点至少包含三部分信息:值(value)、类型(type)与访问权限(access)。值随运行时变化,类型在节点创建时确定且不可随意更改,访问权限决定谁可以读、谁可以写。此外,节点还可携带单位、描述、最小/最大值等元数据,用于上位机显示与校验。
节点创建有两种典型方式:一是由应用在启动时通过 API 注册;二是通过 Data Layer 浏览器手动创建,用于调试或临时数据交换。无论哪种方式,节点一旦创建,其路径与类型即成为契约,其他应用可据此安全访问。
类型系统:强类型带来的确定性
Datalayer 是强类型的。常见基础类型包括 bool、int8/16/32/64、uint8/16/32/64、float32/64、string。此外还支持数组与结构化类型,例如 array of float64 或自定义结构体。强类型的意义在于:写入时若类型不匹配,操作会被拒绝,从而避免隐式转换带来的精度丢失或逻辑错误。
例如,一个表示轴位置的节点应定义为 float64,单位为 mm;若误写为 int32,则小数部分会被截断。因此在建模阶段,类型选择必须与物理量语义一致。
路径寻址:从根到叶的定位方式
访问一个节点,就是给出从根到该节点的完整路径。路径寻址支持绝对路径与相对路径。绝对路径以 / 开头,如 /diagnostics/cpu/load;相对路径则基于当前上下文,常用于同一应用内部。订阅时,还可以使用通配符监听一组节点,例如 /motion/axes/*/pos,当任意轴位置变化时都会收到通知。
寻址的准确性直接影响系统稳定性。若路径拼写错误,读取会返回“节点不存在”,写入则被拒绝。因此建议在代码中集中定义路径常量,避免散落在各处。
数据层浏览器:可视化建模与调试
Data Layer 浏览器是 ctrlX 工程环境中的图形化工具,用于浏览、创建、修改和监控节点。典型使用流程如下:
- 打开浏览器,展开根节点,查看已有分支与叶子。
- 定位到目标分支,右键新建叶子节点,填写名称、类型、初始值与访问权限。
- 选中节点,在右侧查看当前值、类型与元数据。
- 对可写节点直接修改值,观察下游应用或 PLC 变量的响应。
- 使用搜索框按路径关键字过滤,快速定位节点。
浏览器还支持订阅视图,可实时刷新变化的值,是排查“数据不更新”类问题的首选工具。例如,当 HMI 显示值不变时,先在浏览器中确认该节点是否在变化:若浏览器中也不变,问题在数据源;若浏览器中变化而 HMI 不变,问题在 HMI 的订阅或绑定。
/motion/axis1/status/ready,便于团队统一理解与批量订阅。建模示例:一个轴状态节点
假设需要为某伺服轴建立状态节点,可规划如下结构(示例参数,非实测):
/motion/axis1/pos float64 mm 只读
/motion/axis1/vel float64 mm/s 只读
/motion/axis1/enable bool - 读写
/motion/axis1/errorCode uint16 - 只读
创建后,在浏览器中应能看到四个叶子节点。将 enable 写为 true,若轴使能成功,errorCode 应保持 0;若失败,errorCode 会变为非零值。通过这种“写控制量、读状态量”的闭环,可以验证建模是否正确、权限是否合理。
上图展示了从根节点到叶子节点的完整层级,以及分支与叶子的区别、类型与权限的标注方式。实际建模时,应先在浏览器中规划好路径树,再逐层创建,避免后期因路径混乱而返工。掌握节点结构、类型系统与路径寻址,是后续使用 Data Layer API 进行读写与订阅的前提。