1. MES与ERP工单同步接口配置

MES与ERP工单同步接口配置 学习卡片

接口同步的核心对象与数据流

MES 从 ERP 接收生产工单,本质上是把 ERP 中已下达的工单主数据与 MES 的工单执行表建立映射。同步接口需要处理四类关键字段:工单号(ERP 唯一标识)、物料编码、计划数量、交期。接口的可靠性取决于三个环节:拉取/推送方式、字段映射规则、异常重试策略。

ERP 系统 工单主数据表 工单号 / 物料 / 数量 / 交期 状态:已下达 同步接口层 拉取模式:定时轮询 字段映射 + 格式校验 幂等去重(工单号+版本) 异常捕获 → 重试队列 重试间隔:30s / 2min / 10min MES 系统 工单执行表 工单号 / 物料 / 数量 / 交期 状态:待排产 拉取 写入 失败重试(最多3次) 校验失败/超时 字段映射与校验规则 ERP 字段 MES 字段 校验规则 异常处理 WORK_ORDER_NO work_order_no 非空、唯一 重复则跳过 MATERIAL_CODE material_code 非空、存在物料主数据 记录错误日志 PLAN_QTY plan_qty 数值 > 0 拒绝写入 DUE_DATE due_date 日期格式 YYYY-MM-DD 格式转换失败则重试

接口配置的关键参数

以下参数决定了同步接口的行为边界,配置时需与 ERP 侧约定一致:

参数示例值说明
同步模式定时拉取MES 主动调用 ERP 接口,避免 ERP 推送时 MES 不可用导致丢单
轮询间隔60 秒根据工单下达频率调整,过短增加 ERP 压力,过长延迟工单可见性
增量标识last_sync_time只拉取该时间之后更新或新增的工单,避免全量扫描
重试次数3 次网络超时或 ERP 返回 5xx 时触发
重试间隔30s / 2min / 10min指数退避,避免瞬时故障反复冲击
幂等键工单号 + 版本号同一工单多次拉取不产生重复记录

异常重试的实现逻辑

接口调用失败时,不能简单丢弃。以下伪代码展示了重试队列的核心判断逻辑:

def sync_work_orders(last_sync_time):
    try:
        orders = erp_client.fetch_orders(since=last_sync_time)
    except (Timeout, ERP5xxError) as e:
        retry_queue.push(task_id, retry_count=0)
        return

    for order in orders:
        if not validate(order):
            error_log.write(order.work_order_no, reason)
            continue
        if mes_db.exists(order.work_order_no, order.version):
            continue  # 幂等跳过
        mes_db.insert(order)

def retry_worker():
    task = retry_queue.pop()
    if task.retry_count >= 3:
        alert("工单同步失败超过3次", task.work_order_no)
        return
    delay = [30, 120, 600][task.retry_count]
    schedule(task, delay)
    task.retry_count += 1
验证方法:在 ERP 中新建一张测试工单(工单号 TEST-001,物料 M001,数量 100,交期 2025-06-30),等待一个轮询周期后检查 MES 工单执行表是否出现对应记录。再手动断开 ERP 接口模拟超时,观察重试队列是否按 30s/2min/10min 间隔重试,3 次后是否触发告警。
常见配置错误:增量标识使用工单创建时间而非更新时间,导致 ERP 修改交期后 MES 无法感知;幂等键仅用工单号,导致同一工单的版本变更被错误跳过。