低代码搭建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系统上线后产量数据不准怎么办?
先排查是报工环节的问题还是系统计算的问题。常见的报工问题包括工人忘记报工、重复报工、数量填错。系统计算问题可能是损耗率设置不对、报废数量没扣除。建议上线初期人工核对一周的产量数据,发现差异及时定位原因并修正。