低代码搭MES生产管理系统工序报工质检追溯和设备对接

2 阅读12分钟

低代码搭建MES(制造执行系统)是很多制造企业正在尝试的方向。传统的MES系统定制费用高、周期长,而低代码平台让企业自己的人就能搭出覆盖工序报工、质检追溯、设备对接三大模块的生产管理系统。这篇文章分享MES搭建过程中三个关键模块的实现思路和踩坑经验,给准备用低代码搭MES的同行做个参考。

一、工序报工模块怎么搭

1. 报工流程的设计

工序报工是MES系统的核心功能之一。车间工人完成一道工序后,在系统里报完工数量、报废数量和工时,生产计划员就能实时看到生产进度。

报工流程的设计需要考虑工厂的实际情况。以常见的注塑车间为例,一个产品从原料投入到成品入库,通常经过注塑、检验、包装三道工序。每道工序都需要单独报工。

# 工序报工数据结构示例
work_report = {
    "work_order": "WO-2025-0801-003",
    "product_code": "FD-1000-001",
    "product_name": "500ml食品级塑料瓶",
    "planned_qty": 10000,
    "processes": [
        {
            "process_seq": 1,
            "process_name": "注塑",
            "machine_id": "M-001",
            "operator": "张三",
            "shift": "白班",
            "report_time": "2025-08-01 14:30:00",
            "completed_qty": 10000,
            "defect_qty": 150,
            "scrap_qty": 50,
            "labor_hours": 6.5
        },
        {
            "process_seq": 2,
            "process_name": "质量检验",
            "inspector": "李四",
            "report_time": "2025-08-01 16:00:00",
            "inspected_qty": 10000,
            "passed_qty": 9800,
            "failed_qty": 200,
            "defect_types": {
                "尺寸偏差": 80,
                "外观不良": 70,
                "色差": 50
            }
        },
        {
            "process_seq": 3,
            "process_name": "包装",
            "operator": "王五",
            "report_time": "2025-08-01 18:00:00",
            "packed_qty": 9800,
            "packaging_material": "PK-0400-001",
            "carton_qty": 200
        }
    ]
}

# 计算各工序良率
for p in work_report["processes"]:
    if "completed_qty" in p and "defect_qty" in p:
        total = p["completed_qty"]
        good = total - p.get("defect_qty", 0) - p.get("scrap_qty", 0)
        yield_rate = (good / total) * 100 if total > 0 else 0
        print(f"工序{p['process_seq']} {p['process_name']}: "
              f"投入{total}, 良品{good}, 良率{yield_rate:.1f}%")

2. 报工终端的选择

车间工人报工的终端选择是个实际问题。用电脑不方便,车间环境脏,键盘鼠标容易坏。用手机报工的话,屏幕小,戴手套操作不便。比较推荐的方案是在每台机台旁边装一个工业触摸屏终端,屏幕大、操作直观、防尘防水。

低代码搭建报工界面时,要注意几个细节:

  • 输入框要大:工人在车间操作,手套可能都没摘,按钮太小点不到
  • 数字输入用数字键盘:报工数量、报废数量都是纯数字,弹数字键盘比全键盘方便
  • 默认值要合理:比如完工数量默认带出工单计划数量,工人只需要改少量数字
  • 提交后给反馈:报工成功后弹个绿色提示,失败给红色提示加原因说明

3. 倒班和报工的关系

工厂通常两班倒或三班倒。MES报工需要区分班次,因为不同班次的工时和产出需要分开统计。在搭贝AI低代码平台上,可以通过设置班次规则实现自动班次识别,报工时根据当前时间自动判断属于白班还是夜班。

# 班次自动判断逻辑
from datetime import datetime

def get_shift(report_time: str) -> str:
    """根据报工时间自动判断班次"""
    dt = datetime.strptime(report_time, "%Y-%m-%d %H:%M:%S")
    hour = dt.hour
    
    if 8 <= hour < 20:
        return "白班(08:00-20:00)"
    else:
        return "夜班(20:00-08:00)"

# 批量报工的班次统计
reports = [
    {"operator": "张三", "time": "2025-08-01 10:30:00", "qty": 2000},
    {"operator": "李四", "time": "2025-08-01 14:00:00", "qty": 2500},
    {"operator": "王五", "time": "2025-08-01 22:00:00", "qty": 1800},
    {"operator": "赵六", "time": "2025-08-01 03:00:00", "qty": 1500},
]

shift_summary = {}
for r in reports:
    shift = get_shift(r["time"])
    if shift not in shift_summary:
        shift_summary[shift] = {"total_qty": 0, "workers": []}
    shift_summary[shift]["total_qty"] += r["qty"]
    shift_summary[shift]["workers"].append(r["operator"])

for shift, data in shift_summary.items():
    print(f"{shift}: 产量{data['total_qty']}, 工人{','.join(data['workers'])}")

二、质检追溯模块怎么搭

1. 追溯的核心是数据关联

质检追溯的核心思想是:给每个产品一个唯一的身份标识,通过这个标识能查到它用了什么原料、在什么时间经过了哪些工序、操作人是谁、质检结果是什么。

塑料行业常用的追溯标识是批次号和序列号。批次号用于原料和半成品管理,序列号用于成品管理。批次号编码规则一般是"日期+供应商代码+流水号"的格式。

# 质量追溯数据模型
quality_trace = {
    "batch_no": "BN-20250801-S01-001",
    "product_code": "FD-1000-001",
    "production_date": "2025-08-01",
    "trace_chain": [
        {
            "stage": "原料投入",
            "material_batch": "PE-20250728-A01",
            "supplier": "供应商A",
            "material_qty": 280.0,
            "operator": "张三",
            "equipment": "注塑机M-001"
        },
        {
            "stage": "注塑加工",
            "machine_params": {
                "temperature": 195,
                "pressure": 1200,
                "cycle_time": 35
            },
            "start_time": "2025-08-01 08:15:00",
            "end_time": "2025-08-01 14:30:00"
        },
        {
            "stage": "质量检验",
            "inspector": "李四",
            "sample_size": 50,
            "results": {
                "尺寸合格": True,
                "外观合格": True,
                "重量偏差": 0.3,
                "色差DeltaE": 1.2
            }
        },
        {
            "stage": "成品入库",
            "warehouse": "成品仓A区",
            "location": "A-03-02",
            "入库时间": "2025-08-01 18:30:00"
        }
    ]
}

def trace_by_batch(batch_no: str, trace_data: dict) -> str:
    """根据批次号查询完整追溯链"""
    if trace_data["batch_no"] != batch_no:
        return "批次号不匹配"
    
    print(f"\n批次追溯报告: {batch_no}")
    print(f"产品: {trace_data['product_code']}")
    print(f"生产日期: {trace_data['production_date']}")
    print("-" * 50)
    
    for stage_info in trace_data["trace_chain"]:
        stage = stage_info["stage"]
        print(f"\n【{stage}】")
        for key, value in stage_info.items():
            if key != "stage":
                print(f"  {key}: {value}")

trace_by_batch("BN-20250801-S01-001", quality_trace)

2. 不良品管理

质检发现的不良品需要有完整的处理流程。MES系统应该能记录每个不良品的缺陷类型、发现工序、处理方式(返工/报废/让步接收)。不良品数据汇总后形成质量统计报表,帮助找到高发缺陷和根本原因。

3. 质检报表的自动生成

质检数据积累后,可以用低代码平台的报表功能自动生成日报、周报、月报。搭贝AI低代码平台的数据看板可以实时展示良率趋势、缺陷分布、各工序的质量对比,企业级低代码平台在这些统计功能的灵活性上差别很大,选型的时候要看报表自定义能力。

三、设备对接模块怎么搭

1. 设备对接的两种方式

注塑机、挤出机这些生产设备的数据对接是MES搭建中最有技术含量的部分。常见的对接方式有两种:

  • PLC直接采集:通过工业总线协议(如Modbus TCP、OPC UA)直接读取设备PLC的寄存器数据,实时性高但开发难度大
  • 设备接口API:部分新设备自带数据接口,可以直接调API获取设备状态、产量、报警信息,开发简单但依赖设备厂商开放接口

2. 采集哪些数据

不是所有设备数据都需要采集,重点采集和MES直接相关的数据:

# 设备数据采集示例(Modbus TCP读取)
from pymodbus.client import ModbusTcpClient

class InjectionMachineMonitor:
    """注塑机数据采集"""
    
    def __init__(self, ip: str, port: int = 502):
        self.client = ModbusTcpClient(ip, port=port)
        self.connect()
    
    def connect(self):
        if self.client.connect():
            print(f"设备连接成功")
        else:
            print(f"设备连接失败")
    
    def read_machine_status(self) -> dict:
        """读取注塑机状态数据"""
        # 读取寄存器数据(地址映射需根据实际设备手册配置)
        status_data = {}
        
        # 设备状态(地址0):0=停机, 1=运行, 2=报警
        result = self.client.read_holding_registers(0, 1)
        status_data["machine_status"] = self._decode_status(result.registers[0])
        
        # 模具温度(地址1)
        result = self.client.read_holding_registers(1, 1)
        status_data["mold_temp"] = result.registers[0] / 10.0
        
        # 注塑压力(地址2)
        result = self.client.read_holding_registers(2, 1)
        status_data["injection_pressure"] = result.registers[0]
        
        # 当前产量计数(地址3-4)
        result = self.client.read_holding_registers(3, 2)
        status_data["total_shots"] = result.registers[0] * 65536 + result.registers[1]
        
        # 当前周期时间(地址5)
        result = self.client.read_holding_registers(5, 1)
        status_data["cycle_time_sec"] = result.registers[0] / 10.0
        
        return status_data
    
    def _decode_status(self, code: int) -> str:
        status_map = {0: "停机", 1: "运行中", 2: "报警"}
        return status_map.get(code, "未知")
    
    def close(self):
        self.client.close()

# 使用示例
monitor = InjectionMachineMonitor("192.168.1.100")
status = monitor.read_machine_status()
print(f"设备状态: {status}")
monitor.close()

3. 设备异常报警

设备对接不仅仅是采集数据,更重要的是异常报警。设置合理的报警规则,当设备停机超过设定时间、温度超出工艺范围、压力异常时,自动触发报警并通知相关人员。

搭贝AI低代码平台可以配置设备报警规则和通知模板,制造业MES低代码搭建时,报警逻辑的实现是一个重点评估项。低代码行业应用中,设备管理模块的成熟度直接影响MES系统的可用性。

4. 设备数据的存储和分析

设备采集的数据量很大,高频数据建议存时序数据库,低频汇总数据存关系型数据库。每天汇总生成设备OEE(综合设备效率)报表,包含可用率、表现指数和质量指数三个维度。

# OEE计算示例
def calculate_oee(available_time: float, 
                  planned_time: float,
                  ideal_cycle_time: float,
                  total_count: int,
                  reject_count: int) -> dict:
    """
    计算设备OEE
    available_time: 实际运行时间(分钟)
    planned_time: 计划生产时间(分钟)
    ideal_cycle_time: 理论周期时间(秒/件)
    total_count: 总产量
    reject_count: 不良品数量
    """
    # 可用率 = 实际运行时间 / 计划生产时间
    availability = available_time / planned_time if planned_time > 0 else 0
    
    # 表现指数 = (理论周期 * 总产量) / (实际运行时间 * 60)
    ideal_run_time = (ideal_cycle_time * total_count) / 60  # 转换为分钟
    performance = ideal_run_time / available_time if available_time > 0 else 0
    
    # 质量指数 = 良品数 / 总产量
    good_count = total_count - reject_count
    quality = good_count / total_count if total_count > 0 else 0
    
    oee = availability * performance * quality
    
    return {
        "availability_pct": round(availability * 100, 1),
        "performance_pct": round(performance * 100, 1),
        "quality_pct": round(quality * 100, 1),
        "oee_pct": round(oee * 100, 1),
        "good_count": good_count,
        "reject_count": reject_count
    }

# 示例:某注塑机一天的OEE
oee_result = calculate_oee(
    available_time=420,      # 实际运行420分钟
    planned_time=480,        # 计划480分钟(8小时)
    ideal_cycle_time=30,     # 理论30秒/件
    total_count=82000,       # 总产量
    reject_count=1640        # 不良品
)
print(oee_result)
# {'availability_pct': 87.5, 'performance_pct': 97.6, 'quality_pct': 98.0, 'oee_pct': 83.7}

四、低代码搭MES的注意事项

1. 先跑通再优化

不要一上来就想搭一个大而全的MES系统。建议先选择一个车间或一条产线做试点,把工序报工、质检追溯和设备对接三个模块的基本功能跑通,然后根据实际使用反馈逐步优化。

2. 重视数据迁移

如果之前用Excel或纸质表单管理生产数据,切换到MES时需要做数据迁移。物料主数据、BOM数据、工艺路线这些基础数据必须先整理干净再导入系统。

3. 工人培训要到位

MES系统好不好用,最终是车间工人说了算。系统上线前做充分的培训,让工人熟悉报工操作和质检录入。建议制作操作指南卡片,贴在机台旁边,工人随时可以查看。

4. 网络环境的考虑

车间网络可能不稳定,特别是在大型设备较多的区域,无线信号容易受干扰。建议给关键报工终端拉有线网络,无线网络作为备用。低代码平台最好支持离线缓存功能,网络断了时数据先存本地,网络恢复后自动同步。

常见问题

Q:低代码搭MES和买现成的MES系统相比有什么优势?

低代码搭MES最大的优势是灵活性和成本。现成的MES系统往往功能固定,改一个报工流程都要找厂商排期,费用不低。低代码平台让企业自己的员工就能调整表单和流程,响应速度快很多。搭贝AI低代码平台在这方面的可视化拖拽能力比较突出,适合没有专业开发团队的制造企业。

Q:设备对接需要专业程序员来做吗?

如果是PLC直接采集的方式,需要懂工业通讯协议的人来做。如果设备自带API接口,低代码平台通过HTTP请求组件就能完成对接,不需要专业程序员。建议先确认设备类型和厂商是否开放接口,再决定对接方式。

Q:质检追溯的批次号怎么设计?

批次号设计遵循"可追溯、可排序"的原则。常见的格式是"日期+产线代码+流水号",比如BN-20250801-L01-001表示2025年8月1日1号线第1个批次。批次号长度控制在20位以内,方便人工录入和扫码。

Q:MES系统上线后产量数据不准怎么办?

先排查是报工环节的问题还是系统计算的问题。常见的报工问题包括工人忘记报工、重复报工、数量填错。系统计算问题可能是损耗率设置不对、报废数量没扣除。建议上线初期人工核对一周的产量数据,发现差异及时定位原因并修正。