3. 生产数据对象建模

在 ctrlX AUTOMATION 的生产数据与 MES 集成场景中,数据对象建模是决定后续数据能否被正确采集、传输、存储和消费的基础工作。如果对象定义模糊、标识混乱,即使底层 OPC UA 通信完全正常,MES 侧也会出现工单对不上、物料批次串号、质量结果无法回溯等问题。本节围绕六类核心数据对象——工单、物料、设备、工艺参数、质量结果、报警——说明如何识别它们、定义属性、建立层级关系,并给出唯一标识的设计方法。

一、先识别对象,再谈属性

对象识别的基本方法是:从 MES 关心的业务问题出发,反向追问“要回答这个问题,需要哪些实体”。例如 MES 要回答“这批产品用了哪批物料、在哪台设备、按什么参数生产、质量是否合格”,就需要工单、物料批次、设备、工艺参数、质量结果五类对象;若要回答“生产过程中是否发生过异常”,则还需要报警对象。

在 ctrlX 现场,这六类对象通常分布在不同的数据源:工单来自 MES 下发的生产任务;物料信息来自上料工位的扫码或 RFID 读取;设备信息来自 ctrlX CORE 上的设备台账与 OPC UA 节点;工艺参数来自 PLC 或运动控制器的实时变量;质量结果来自在线检测设备或人工录入;报警来自 ctrlX 的报警管理或 PLC 报警位。建模的第一步,就是把这些分散的数据源映射为统一的对象。

二、六类核心对象的属性定义

属性定义要遵循“MES 需要什么就定义什么,不追求大而全”的原则。以下给出一个可直接参考的属性示例,字段名采用英文,便于后续在 OPC UA 或数据库中使用。

对象关键属性说明
工单 WorkOrderworkOrderId、productCode、plannedQty、actualQty、status、plannedStart、plannedEndworkOrderId 为唯一标识,status 取值如 created/released/inProgress/completed/closed
物料 MaterialmaterialId、materialName、batchNo、supplier、qty、unitmaterialId 标识物料种类,batchNo 标识批次,二者组合才能唯一确定一次投料
设备 EquipmentequipmentId、equipmentName、equipmentType、lineId、opcUaEndpointequipmentId 唯一,opcUaEndpoint 记录该设备在 ctrlX 中的通信地址
工艺参数 ProcessParamparamId、paramName、value、unit、upperLimit、lowerLimit、timestampparamId 唯一,需记录上下限以便判断是否超差
质量结果 QualityResultresultId、workOrderId、equipmentId、inspectionItem、measuredValue、result、inspectTimeresult 取值 pass/fail,需关联工单与设备
报警 AlarmalarmId、equipmentId、alarmCode、alarmLevel、alarmText、startTime、endTime、ackStatusalarmId 唯一,alarmLevel 如 info/warning/error/critical

需要强调的是,属性定义不是一次性工作。当 MES 新增追溯要求时,应回到对象模型补充字段,而不是在传输层临时拼接字符串。

三、层级关系:用组合与引用表达“谁属于谁”

六类对象之间不是孤立的,而是存在明确的层级与引用关系。典型的层级关系是:产线包含设备,设备承载工单,工单消耗物料、产生工艺参数记录、质量结果和报警。这种关系可以用“组合”和“引用”两种方式表达:组合表示强归属,如设备属于产线;引用表示弱关联,如质量结果引用工单号。

在 ctrlX 中实现时,组合关系通常体现为 OPC UA 的父子节点,引用关系则体现为对象属性中的外键字段。例如,设备对象的 equipmentId 会作为工艺参数、质量结果、报警对象中的外键,从而把一次生产事件完整串联起来。

生产数据对象层级与引用关系 产线 Line 设备 Equipment 工单 WorkOrder 物料 Material 工艺参数 ProcessParam 质量结果 QualityResult 报警 Alarm 包含 承载 消耗 记录 产生 触发 引用外键(弱关联): 物料.batchNo → 工单.workOrderId;工艺参数.paramId → 设备.equipmentId 质量结果.resultId → 工单.workOrderId + 设备.equipmentId;报警.alarmId → 设备.equipmentId

四、唯一标识:让每个对象可被精确定位

唯一标识是对象建模中最容易被忽视、却最容易出问题的环节。设计标识时,应遵循三条原则:全局唯一、稳定不变、可读可解析。

以工单为例,推荐采用“工厂代码-产线代码-日期-流水号”的结构,例如 SH01-L03-20250612-0007。这种标识既保证唯一性,又能从字符串直接读出工厂、产线、日期信息,便于人工排查。物料批次可采用“物料号-供应商代码-生产日期-批次序号”,如 MAT-8842-SUP07-20250610-003。设备标识建议直接使用 ctrlX 中的设备资产编号,如 EQ-L03-CNC-01,并与 OPC UA 节点路径保持一致。

对于工艺参数、质量结果、报警这类高频产生的对象,不建议使用有意义的业务编码,而应采用“对象类型前缀 + 时间戳 + 序列号”的方式,例如 PP-20250612T083015-0042。这样既能保证唯一性,又不会因为业务规则变化而失效。

常见错误:用设备名称作为唯一标识。设备名称可能因改造、搬迁而变更,一旦变更,历史数据中的引用就会断裂。正确做法是使用独立的 equipmentId,名称仅作为显示属性。

五、建模落地:从对象模型到 ctrlX 数据节点

完成对象与属性定义后,需要把模型映射到 ctrlX AUTOMATION 的实际数据节点上。推荐的做法是:在 ctrlX CORE 上为每类对象建立一个 OPC UA 文件夹节点,对象实例作为子节点,属性作为变量节点。例如,工单对象可以映射为 Objects/WorkOrders/SH01-L03-20250612-0007,其下挂载 status、actualQty 等变量。

对于工艺参数这类实时性要求高的对象,可以保留在 PLC 的实时数据区,通过 ctrlX Data Layer 以订阅方式推送到 MES,而不是全部写入 OPC UA 地址空间。质量结果和报警则建议在产生时即写入带时间戳的记录,避免事后补录导致顺序错乱。

最后,建模成果应以一份对象字典的形式固化下来,至少包含:对象名称、唯一标识规则、属性列表、数据类型、来源系统、更新频率、关联关系。这份字典既是开发依据,也是后续排障时判断“数据对不上”的第一手资料。

检查要点:任意取一条质量结果记录,能否仅凭其中的外键字段,回溯到对应的工单、设备、物料批次和工艺参数?如果能,说明对象建模的引用关系是完整的;如果不能,说明还缺少必要的关联字段。