2. 生产状态模型定义

在EAM与MES联动的工程实践中,最容易被低估、却最容易导致联动失败的问题,不是接口通不通,而是同一个词在两个系统里说的不是同一件事。设备在EAM里是资产台账对象,在MES里是产能资源;工单在EAM里是维修作业指令,在MES里是生产执行指令;物料在EAM里是备件库存,在MES里是在制品与投料批次;质量在EAM里是维修验收结论,在MES里是过程检验与放行判定。若不做语义对齐,联动逻辑就会在“状态看起来都对、结果却不对”的灰色地带反复出错。

一、四类状态的语义差异:同名不同义

先看设备状态。EAM中的设备状态描述的是资产可用性与维修生命周期,典型取值包括:运行、停机、检修中、待修、封存、报废。它关心的是“这台资产现在能不能用、归谁管、维修到哪一步”。MES中的设备状态描述的是产线资源的可调度性,典型取值包括:可用、换型中、故障停机、计划停机、待料停机。它关心的是“这个工位现在能不能接单生产”。两者最关键的差异在于:EAM的“检修中”在MES里可能对应“计划停机”或“故障停机”,取决于检修是否已排入生产计划;而MES的“待料停机”在EAM里根本不存在对应状态,因为EAM不关心物料齐套。

再看工单状态。EAM工单(维修工单/保养工单)的状态链通常是:已创建→已派工→执行中→待验收→已关闭。MES工单(生产工单)的状态链通常是:已下达→已排产→已开工→生产中→已完工→已入库。两者都叫“工单”,但EAM工单的“执行中”意味着维修人员正在拆装设备,MES工单的“生产中”意味着设备正在加工产品。当一台设备同时挂着EAM维修工单和MES生产工单时,如果不同步,就会出现“MES认为在生产、EAM认为在维修”的冲突。

物料状态的差异同样显著。EAM中的物料状态围绕备件库存:可用库存、预留、在途、待检、报废。MES中的物料状态围绕生产流转:已投料、在线、待检、合格、不合格、已消耗。EAM的“预留”是给某张维修工单锁定的备件,MES的“已投料”是已经进入产线的物料。两者之间需要建立“备件出库→MES投料”的转换关系,否则库存账与生产账永远对不上。

质量状态的语义分歧最隐蔽。EAM中的质量状态通常指维修质量验收:合格、不合格、让步接收、返修。MES中的质量状态指产品过程质量:待检、合格、不合格、返工、报废。EAM的“合格”是维修后设备精度恢复达标,MES的“合格”是产品尺寸或性能达标。两者共享“合格”这个词,但判定对象完全不同。

EAM与MES四类状态语义映射与统一建模 EAM 语义域 设备状态 运行/停机/检修中/待修 封存/报废 工单状态 已创建→已派工→执行中 →待验收→已关闭 物料状态 可用/预留/在途 待检/报废 质量状态 合格/不合格 让步接收/返修 MES 语义域 设备状态 可用/换型中/故障停机 计划停机/待料停机 工单状态 已下达→已排产→已开工 →生产中→已完工→已入库 物料状态 已投料/在线/待检 合格/不合格/已消耗 质量状态 待检/合格/不合格 返工/报废 统一状态模型(中间层) 资源可用性状态 AVAILABLE / DOWN_PLANNED DOWN_UNPLANNED / CHANGEOVER 作业执行状态 CREATED / DISPATCHED / RUNNING PAUSED / COMPLETED / CLOSED 物料流转状态 STOCKED / RESERVED / ISSUED IN_PROCESS / CONSUMED / SCRAPPED 质量判定状态 PENDING / PASS / FAIL REWORK / CONCESSION / SCRAP 映射规则:语义对齐 + 状态机转换 + 事件驱动同步

二、统一建模方法:中间层状态机

解决语义差异的工程方法不是让EAM去学MES的词汇,也不是让MES去适配EAM的字段,而是在两者之间建立一个统一状态模型中间层。这个中间层不存储业务明细,只做三件事:语义对齐、状态机转换、事件驱动同步。

语义对齐的核心是建立映射表。以设备状态为例,可以定义统一状态枚举:AVAILABLE、DOWN_PLANNED、DOWN_UNPLANNED、CHANGEOVER、MAINTENANCE。EAM的“运行”映射为AVAILABLE,“停机”根据是否已排入计划分别映射为DOWN_PLANNED或DOWN_UNPLANNED,“检修中”映射为MAINTENANCE。MES的“可用”映射为AVAILABLE,“故障停机”映射为DOWN_UNPLANNED,“计划停机”映射为DOWN_PLANNED,“换型中”映射为CHANGEOVER,“待料停机”映射为DOWN_UNPLANNED(因为待料本质是非计划停机)。映射表一旦确定,两个系统各自维护自己的状态,中间层负责翻译。

状态机转换解决的是“状态不能随意跳变”的问题。例如EAM工单从“执行中”不能直接跳到“已关闭”,必须经过“待验收”;MES工单从“已下达”不能直接跳到“生产中”,必须经过“已排产”和“已开工”。中间层需要定义合法转换路径,当任一系统发出状态变更事件时,中间层先校验转换合法性,再决定是否同步到对端。非法转换应被拦截并记录告警,而不是静默丢弃。

事件驱动同步是落地机制。推荐采用“状态变更事件+版本号”的方式:每次状态变更生成一条事件,携带对象类型、对象ID、旧状态、新状态、时间戳、版本号。中间层按对象ID维护最新版本,收到事件后先比较版本号,旧版本事件直接丢弃,避免网络乱序导致的状态回退。同步方向可以是双向的,但必须明确主数据源:设备资产主数据以EAM为准,生产执行主数据以MES为准,中间层只做状态翻译和转发。

三、落地示例:设备状态联动配置

假设某产线设备EAM编号EQ-001,MES工位编号ST-01。EAM侧设备状态为“检修中”,MES侧工位状态为“计划停机”。中间层映射规则如下:

{
  "objectType": "EQUIPMENT",
  "eamId": "EQ-001",
  "mesId": "ST-01",
  "mapping": {
    "EAM:RUNNING": "AVAILABLE",
    "EAM:STOPPED": "DOWN_UNPLANNED",
    "EAM:MAINTENANCE": "MAINTENANCE",
    "MES:AVAILABLE": "AVAILABLE",
    "MES:FAULT_STOP": "DOWN_UNPLANNED",
    "MES:PLAN_STOP": "DOWN_PLANNED",
    "MES:CHANGEOVER": "CHANGEOVER"
  },
  "syncDirection": "bidirectional",
  "masterSource": "EAM"
}

当EAM将EQ-001从“运行”改为“检修中”时,中间层收到事件,查表得到统一状态MAINTENANCE,再根据MES侧映射规则转换为“计划停机”,下发到MES。MES收到后更新ST-01状态,并触发排产重算。反向亦然:MES将ST-01从“可用”改为“故障停机”,中间层转换为DOWN_UNPLANNED,再映射为EAM的“停机”,EAM收到后自动生成一张维修工单草稿,等待派工。这样,两个系统各自保持自己的语义习惯,联动逻辑集中在中间层,维护成本最低。

关键判断依据:联动是否成功,不看接口返回码,而看三个一致性——状态枚举是否可映射、状态机转换是否合法、版本号是否单调递增。三者同时满足,才认为一次状态同步有效。

四、常见陷阱与规避

第一个陷阱是“同名直接映射”。EAM的“合格”和MES的“合格”不能直接画等号,必须区分判定对象是设备还是产品。第二个陷阱是“状态回退”。网络延迟可能导致旧事件后到,若不做版本号校验,状态会被错误地改回旧值。第三个陷阱是“单向同步”。只从EAM同步到MES,会导致MES侧的故障停机无法反馈到EAM,维修工单永远不触发。第四个陷阱是“忽略中间态”。EAM的“待验收”和MES的“已完工”都是中间态,若中间层只处理终态,联动就会在中间态卡住。

统一建模的本质,是在两个系统的语义鸿沟上架一座翻译桥。桥的这头是EAM的资产视角,桥的那头是MES的执行视角,桥面是统一状态枚举和状态机规则,桥墩是事件驱动和版本控制。把这四类状态——设备、工单、物料、质量——逐一映射清楚,EAM与MES的联动才能从“能通”走向“可信”。