2. WIP对象建模与唯一标识

在制品(WIP)跟踪系统能否落地,第一步不是选读写器,也不是搭看板,而是把“在制品到底是什么”这件事用数据模型说清楚。如果对象模型设计得含糊,后续所有位置数据都会变成无法归属的噪声:读到一条标签记录,却不知道它代表一个托盘、一箱料,还是箱内某一颗产品。因此,WIP对象建模的核心任务是:定义清楚有哪些对象、对象之间是什么关系、每个对象携带哪些属性,以及用什么标识让它在整个生命周期内被唯一、稳定地识别。

一、WIP对象的分层结构

制造现场的在制品通常不是单一对象,而是一个“承载—被承载”的层级结构。以典型的机加工或装配车间为例,可以抽象为四层:

  • 物料批次(Lot/Batch):同一工艺条件下连续生产的一组产品,是质量追溯的最小单位,属性包括批次号、物料编码、数量、工艺路线、投产时间。
  • 序列号(SN):单件产品的唯一身份,用于高价值或需单件追溯的场景,属性包括SN、当前工序、测试结果、绑定批次。
  • 载具/托盘(Carrier/Pallet):承载一件或多件产品的物理载体,属性包括载具ID、类型、容量、当前位置、状态(空/满/维修)。
  • 容器(Container):更大范围的周转单元,如料箱、料车、周转筐,属性包括容器ID、所属区域、装载清单。

这四层不是并列的,而是通过“装载关系”连接:容器装托盘,托盘装产品,产品归属批次。建模时必须显式表达这种关系,否则系统无法回答“这个托盘上现在有哪些SN”“这个批次分布在哪些容器里”这类关键问题。常见做法是维护一张装载关系表,记录父对象ID、子对象ID、绑定时间、解绑时间,形成可追溯的历史链。

建模建议:对象类型用“类型码”区分,如 LOT、SN、PAL、CNT;关系用“父子绑定”表达,避免把层级关系硬编码进ID字符串,否则后期扩展会非常痛苦。

二、属性设计:区分静态与动态

属性设计最容易犯的错误是把所有字段堆在一张表里。更合理的做法是按变化频率分层:

  • 静态属性:物料编码、批次号、载具类型、容量。这些在对象创建后基本不变,适合作为主数据管理。
  • 动态属性:当前位置、当前工序、状态、绑定时间、操作人。这些随流转频繁变化,适合作为事件流或状态表管理。

以托盘为例,静态属性包括托盘ID、类型(如“铝合金托盘600×400”)、最大承载数;动态属性包括当前区域、当前工位、装载的SN列表、状态。把动态属性从主数据中剥离,可以避免每次位置更新都去改主数据表,也便于按时间轴回放托盘历史。

三、唯一标识方案的选择

标识方案决定了数据采集的自动化程度和成本。常见三种方案对比如下:

方案典型载体读取方式适用对象关键约束
条码一维码/二维码标签扫码枪、固定式读码器批次、容器、托盘需视线对准,易磨损
二维码DataMatrix/QR工业相机、手持终端单件SN、小托盘信息容量大,可纠错
RFID电子标签读写器非接触读取托盘、容器、批量识别成本较高,需防金属干扰

选择原则可以概括为:看读取距离、看是否需要批量识别、看环境是否恶劣、看单件成本容忍度。例如,托盘在车间内频繁流转且需要整托识别,RFID更合适;单件产品需要精确追溯且成本敏感,二维码更合适;批次级容器只需在关键节点扫码,一维条码即可满足。

四、编码规则:让ID自带语义但不过度耦合

唯一标识的编码规则要兼顾“可读”和“可扩展”。一个常见的误区是把所有信息塞进ID,比如“PAL-20240520-A-001”,一旦日期格式或区域编码规则变化,历史数据就会混乱。更稳妥的做法是采用分段编码,每段有明确含义,但段与段之间用固定分隔符,且预留扩展位。

示例编码规则(假设):

对象类型码(2位) + 工厂码(2位) + 年份(2位) + 流水号(8位)
示例:PL01 24 00001234  →  PL012400001234
说明:PL=托盘,01=一号工厂,24=2024年,00001234=当年流水号

这种规则的好处是:类型码让系统一眼识别对象种类;工厂码支持多基地扩展;年份+流水号保证唯一性且长度可控。对于序列号,可以在此基础上追加产品型号码,但要注意总长度不要超过标签容量和读写器解析能力。

五、对象模型与标识的协同关系

对象模型和标识方案不是两件事,而是同一套数据契约的两面。对象模型定义了“有哪些字段需要被识别”,标识方案决定了“这些字段如何被自动采集”。如果对象模型里定义了“托盘当前装载的SN列表”,但标识方案只支持托盘级RFID,那么系统就无法自动获得SN列表,只能靠人工绑定或额外扫码。因此,建模阶段就要同步评估:哪些属性必须自动采集,哪些可以人工录入,哪些可以推导得出。

WIP对象分层模型与标识绑定关系 容器 Container 属性:容器ID、区域、装载清单 标识:一维条码 / RFID(批量识别) CNT-01-24-000001 容器编码示例 托盘 / 载具 Pallet 属性:托盘ID、类型、容量、当前状态 标识:RFID(整托识别) / 二维码 PL-01-24-00001234 托盘编码示例 产品 / 序列号 SN 属性:SN、型号、当前工序、测试结果 标识:二维码 DataMatrix(单件追溯) SN-01-24-00005678 序列号编码示例 物料批次 Lot / Batch 属性:批次号、物料编码、数量、工艺路线、投产时间 标识:批次条码(质量追溯最小单位) LOT-01-24-00000099 批次编码示例 装载绑定 装载绑定 归属批次 层级关系:容器 → 托盘 → 产品 → 批次;每层对象独立标识,通过绑定关系表维护父子链

上图展示了四层对象及其标识绑定关系。可以看到,每一层都有独立的编码规则和标识载体,同时通过“装载绑定”和“归属批次”两条关系线连接。实际系统中,这些关系通常记录在关系表中,并附带时间戳,以便追溯“某时刻托盘上装了哪些产品”。

六、建模落地时的检查要点

在完成对象模型和标识方案设计后,建议用以下问题做一次自检:

  • 每个对象是否有且仅有一个全局唯一标识?标识是否在对象生命周期内不变?
  • 对象之间的层级关系是否显式建模,能否回答“某容器内当前有哪些托盘”这类查询?
  • 静态属性和动态属性是否分离?位置更新是否会频繁改写主数据?
  • 标识方案是否覆盖了所有需要自动采集的关键节点?是否存在只能人工录入的瓶颈?
  • 编码规则是否预留了扩展位?新增工厂、新增对象类型时是否需要推翻重来?

这些问题没有标准答案,但每一个都需要在建模阶段给出明确选择。WIP跟踪系统的稳定性,很大程度上取决于对象模型是否经得起现场流转的考验,以及标识方案是否与采集节点匹配。把这两件事做扎实,后续的位置跟踪、状态流转和追溯分析才有可靠的数据基础。