ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MES需求分析文档拆解:生产批次、数据采集与ERP集成落地实践

MES需求分析文档拆解:生产批次、数据采集与ERP集成落地实践 简介这份《MES需求分析》完整Word文档面向制造业信息化从业者、MES产品经理与实施顾问系统梳理了制造执行系统在生产管理中的核心需求。内容覆盖生产数据采集与批次绑定、生产看板、统计分析、BOM多版本管理、工单管理、抛料率分析、生产准备、上料防错、强制制程设定、过程追踪、设备数据采集与监控等模块并延伸至质量检验管理、质量追溯与物料管理对RoHS、MSD、SMD超期报警等电子行业绿色环保要求也有涉及。资源包共1个docx文件约1.64MB结构完整、条理清晰可直接作为需求调研与方案设计的参考底稿。已有79人学习适合需要快速搭建MES需求框架、对照实际产线查漏补缺的读者帮助理解从生产计划分解到质量追溯的全流程管理逻辑。1. 一份 MES 需求分析文档为什么值得反复拆见过太多团队在 MES 选型和落地时翻车根因往往不在技术而在需求阶段就没把业务讲清楚。这份《MES需求分析.docx》完整覆盖了从生产管理、设备数据采集、质量检验到物料追溯的全链路需求尤其对电子制造场景下的批次绑定、上料防错、抛料率分析等细节做了颗粒度很细的描述。它适合三类人正在做 MES 选型的 IT 负责人、需要写需求规格书的实施顾问、以及想理解制造业数字化底层逻辑的开发工程师。文档本身不是代码但它决定了后续所有代码和配置的方向——需求写偏了后面全是返工。我拿到这份文档后重点拆了它的数据流设计和系统集成部分下面把能直接抄作业的内容整理出来。2. 生产批次与数据采集从配料工序到充填绑定的完整链路2.1 为什么生产批次的定义源头在配料工序这份文档里最反直觉的一条设计是生产批次不是从生产订单生成的而是从配料工序产生的。当配料工序的原料批次发生变化时系统就会生成一个新的生产批次。这就导致一张生产订单可能对应多个生产批次多张生产订单也可能合并成一个生产批次。这个设计直接影响了数据采集的时序。文档明确指出生产批次只能在充填工序开始才能做采集数据与生产批次的绑定。那充填之前的开罐和分选称重工序怎么办文档要求系统必须能实现这些前置工序的用料批次、生产记录、检验记录与生产批次的绑定。常见做法是给每个前置工序分配一个临时批次号在充填工序通过批次合并规则做关联映射。理解了这个逻辑才能看懂后面所有采集点的设计意图。生产报工的内容被限定为生产批次、工序、作业员或班组、生产开始结束时间、产量、废品数量。数据采集方式明确为设备提取结合手工录入通过条码扫描或手工录入采集原材料批次数据和消耗数量同时采集工序的签入签出、中断、中断原因等信息。2.2 数据采集的接口设计与条码规则文档对数据采集的定义是“可配置”的定义从何种设备以何种格式采集哪些数据以何种规则计算所采集数据以及何种方式呈现设备信息。这意味着采集层不能写死需要一套配置驱动的采集框架。我一般会按下面的结构来设计采集配置表把设备协议、数据格式、计算规则拆成独立字段-- 设备数据采集配置表 CREATE TABLE device_collection_config ( id BIGINT PRIMARY KEY AUTO_INCREMENT, device_id VARCHAR(64) NOT NULL COMMENT 设备唯一编码, protocol_type VARCHAR(32) NOT NULL COMMENT 协议类型: OPCUA/MODBUS/SERIAL, data_format VARCHAR(128) NOT NULL COMMENT 数据格式模板,如 {temp:float},{status:int}, collect_interval INT DEFAULT 1000 COMMENT 采集间隔(毫秒), calc_rule VARCHAR(256) COMMENT 计算规则表达式,如 avg(temp,60), bind_batch_stage VARCHAR(32) COMMENT 绑定批次阶段: FILLING/PRE_FILLING, is_active TINYINT DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );这张表的关键字段是bind_batch_stage它决定了采集到的数据在哪个工序阶段与生产批次绑定。充填工序之前设为PRE_FILLING充填及之后设为FILLING。calc_rule字段支持简单的聚合表达式比如对温度做 60 秒滑动平均避免原始数据直接入库造成存储压力。条码扫描方面文档要求将常用信息操作员、产品种类、设备起停等打印在信息卡上现场操作工用条码扫描器直接读取。这意味着条码规则需要覆盖人员工号、设备编号、物料批次号、工单号四类编码建议统一用前缀区分编码类型前缀示例长度人员工号EMPEMP001238设备编号DEVDEV-SMT-0110物料批次LOTLOT20240115A12工单号WOWO-2024-0115-00116注意条码前缀一旦上线就不要改现场信息卡是提前印刷的改前缀等于全部重印。2.3 生产看板与统计分析的实现要点文档对生产看板的要求是实时呈现工单进度、工单状态、完工数量以及生产工单任务表和工单/工序当前状态。统计分析则要求覆盖已完成订单的作业时间、工单相关的生产时间/停线时间/设置时间、工单/制品/废品统计。这里有个容易忽略的点看板的数据刷新频率和统计分析的查询频率是两回事。看板要求秒级刷新统计分析可以走离线汇总。我一般会做两层Redis 缓存当前工单状态供看板读取MySQL 按小时做统计快照供报表查询。如果直接用看板查询语句去跑统计分析数据库连接池很快就会被拖垮。3. 工单管理与 ERP 集成双向数据流怎么落地3.1 工单管理的核心字段与状态机文档对工单管理的要求很具体PCB 过站时物料倒冲管理自动核算已使用的物料并倒扣把 ERP 的生产计划分解成生产工单和工序作业计划下达时考虑物料的齐套性支持手动/自动下载、按需求下载、调度生产、优先级/配置修改、多级别审批、报废报告。工单状态机的设计直接决定了后续所有操作的合法性校验。根据文档描述我梳理出工单必须包含的状态节点# 工单状态机定义 WORK_ORDER_STATES { CREATED: {next: [MATERIAL_CHECK], desc: 已创建,待齐套检查}, MATERIAL_CHECK: {next: [READY, SHORTAGE], desc: 齐套性检查中}, SHORTAGE: {next: [MATERIAL_CHECK], desc: 物料短缺,等待补料}, READY: {next: [SCHEDULED], desc: 物料齐套,待排程}, SCHEDULED: {next: [RELEASED], desc: 已排程,待下达}, RELEASED: {next: [IN_PROGRESS], desc: 已下达,待开工}, IN_PROGRESS:{next: [PAUSED, COMPLETED], desc: 生产中}, PAUSED: {next: [IN_PROGRESS], desc: 暂停}, COMPLETED: {next: [CLOSED], desc: 已完工}, CLOSED: {next: [], desc: 已关闭} }每个状态迁移都需要记录操作人、时间戳和原因。特别是SHORTAGE状态文档要求备料与预发料不一致时报警这个报警触发点就在齐套性检查环节。MATERIAL_CHECK到READY的迁移条件就是所有物料的需求量小于等于可用量。3.2 MES 与 ERP 的双向集成接口设计文档用了一整节讲 MES 与 ERP 的集成核心逻辑是ERP 在生产计划前端MES 在后端。MES 需要 ERP 生成的“粗”计划作为排产源头车间任务开工前向 ERP 领料完工后反馈完工信息给 ERP 做入库登记和闭环控制。具体的数据流向文档列得很清楚方向数据内容触发时机ERP→MES车间生产任务数据排产计划生成时ERP→MES零件限额领料详细信息领料单审批后MES→ERP限额领料需求工单进入 READY 状态MES→ERP完工入库信息工单进入 COMPLETED 状态ERP→MES物料编码基本信息基础数据同步ERP→MES物资库存质量信息库存变更时接口实现上常见做法是用中间表加定时任务的方式做准实时同步而不是直接调 API。原因是 ERP 系统的接口响应时间不可控直接调用容易阻塞 MES 的生产操作。中间表方案虽然延迟稍高但稳定性好很多。-- ERP 到 MES 的工单同步中间表 CREATE TABLE erp_wo_sync ( sync_id BIGINT PRIMARY KEY AUTO_INCREMENT, erp_wo_no VARCHAR(32) NOT NULL COMMENT ERP工单号, product_code VARCHAR(64) NOT NULL, plan_qty DECIMAL(12,2) NOT NULL, plan_start DATETIME, plan_end DATETIME, bom_version VARCHAR(16) COMMENT BOM版本号, routing_version VARCHAR(16) COMMENT 工艺路线版本, sync_status TINYINT DEFAULT 0 COMMENT 0待处理 1已处理 2处理失败, sync_time DATETIME DEFAULT CURRENT_TIMESTAMP, error_msg VARCHAR(512), INDEX idx_sync_status (sync_status), INDEX idx_erp_wo (erp_wo_no) );sync_status字段是排错的关键。定时任务只捞sync_status0的记录处理成功后置为 1失败置为 2 并写入error_msg。运维人员只需要盯sync_status2的记录就能快速定位集成问题。3.3 BOM 多版本管理与工艺路线绑定文档要求 BOM 支持多版本管理可根据工单选定 BOM不同版本的 BOM 与不同版本的工艺、程式一一对应。这意味着 BOM 版本号、工艺路线版本号、SMT 程式版本号三者必须形成绑定关系。我一般会建一张版本绑定表来维护这个关系CREATE TABLE bom_routing_binding ( id BIGINT PRIMARY KEY AUTO_INCREMENT, product_code VARCHAR(64) NOT NULL, bom_version VARCHAR(16) NOT NULL, routing_version VARCHAR(16) NOT NULL, smt_program_ver VARCHAR(16) COMMENT SMT程式版本, effective_date DATE NOT NULL COMMENT 生效日期, expire_date DATE COMMENT 失效日期,空表示长期有效, is_default TINYINT DEFAULT 0, UNIQUE KEY uk_product_bom (product_code, bom_version, effective_date) );工单下达时根据产品编码和计划开工日期去这张表里匹配生效的版本组合。如果匹配到多条取is_default1的那条。如果一条都匹配不到工单卡在MATERIAL_CHECK状态并报警。提示BOM 版本切换时务必检查是否有在制工单仍在使用旧版本。常见做法是给旧版本设置expire_date而不是直接删除否则历史追溯会断链。4. 上料防错与抛料率分析SMT 车间的两个硬骨头4.1 上料防错的校验逻辑与追溯链建立文档对上料防错的要求分三段收集贴片机上料信息站位/Feeder/物料等并进行合法性校验建立工单和物料的追溯链收集 MI 段、AI 段、整机段的上料信息并校验建立锡膏与产品代码的对应关系支持锡膏使用时防错检查。合法性校验的核心是比对“应该上的料”和“实际上上的料”。应该上的料来自工单绑定的 BOM 和站位表实际上上的料来自扫码枪读取的料卷条码。校验逻辑用伪代码表示def check_feeder_loading(work_order, station_code, scanned_reel_barcode): 上料防错校验 work_order: 当前工单对象 station_code: 贴片机站位编码 scanned_reel_barcode: 扫描到的料卷条码 # 1. 根据工单BOM版本获取该站位的预期物料 expected get_bom_item_by_station( work_order.product_code, work_order.bom_version, station_code ) if not expected: return False, 站位未在BOM中定义 # 2. 解析料卷条码获取物料编码和批次 reel_info parse_reel_barcode(scanned_reel_barcode) # 3. 物料编码比对 if reel_info.material_code ! expected.material_code: return False, f物料编码不匹配: 预期{expected.material_code}, 实际{reel_info.material_code} # 4. 替代料检查 if reel_info.material_code in expected.alternatives: pass # 替代料放行 # 5. 有效期和暴露时间检查(MSD物料) if expected.is_msd: if reel_info.expose_hours expected.max_expose_hours: return False, fMSD暴露时间超限: {reel_info.expose_hours}h # 6. 建立追溯链 create_trace_link(work_order.wo_no, station_code, scanned_reel_barcode) return True, 校验通过这个校验函数里第 4 步的替代料检查容易被漏掉。文档在物料管理部分明确提到“对元件、物料进行禁用监测”替代料如果不在允许列表里即使物料编码不同也应该拦截。4.2 抛料率的计算模型与报警阈值文档把抛料率分为损耗抛料和异常抛料两种。损耗抛料根据工单领料和退料来计算异常抛料需要导入 SMT 机器的抛料信息来做详细对比分析。抛料率超过预设临界值时报警并分析原因材料不良、Feeder 不良、人员操作等。计算模型本身不复杂关键是数据来源要分清-- 抛料率计算视图 CREATE VIEW v_scrap_rate AS SELECT wo.wo_no, wo.product_code, m.material_code, m.material_name, -- 损耗抛料率 (领料量 - 退料量 - 理论消耗量) / 领料量 ROUND( (issue.qty - return_qty.qty - theory.theory_qty) / issue.qty * 100, 2 ) AS loss_scrap_rate, -- 异常抛料率 机器抛料数 / 理论贴装数 ROUND( machine.scrap_count / theory.theory_qty * 100, 2 ) AS abnormal_scrap_rate, CASE WHEN (issue.qty - return_qty.qty - theory.theory_qty) / issue.qty * 100 cfg.loss_threshold THEN LOSS_ALARM WHEN machine.scrap_count / theory.theory_qty * 100 cfg.abnormal_threshold THEN ABNORMAL_ALARM ELSE NORMAL END AS alarm_status FROM work_order wo JOIN material_issue issue ON wo.wo_no issue.wo_no LEFT JOIN material_return return_qty ON wo.wo_no return_qty.wo_no LEFT JOIN theory_consumption theory ON wo.wo_no theory.wo_no LEFT JOIN machine_scrap machine ON wo.wo_no machine.wo_no CROSS JOIN scrap_threshold_config cfg WHERE wo.status IN (IN_PROGRESS, COMPLETED);scrap_threshold_config表里按物料类别或产品系列配置不同的阈值。比如 0402 电阻的损耗抛料率阈值可以设 3%而 IC 类物料设 1%。异常抛料率的阈值通常更低因为机器抛料是异常事件。4.3 锡膏管理的时序控制文档对锡膏管理的要求很细回温、领用、回存、用完、报废、开封、搅拌、转换工单等管理以及当前状态、回温计时、未开封计时、开封计时等预警提示。锡膏的状态流转是有严格时间约束的。我一般用一张状态流水表来记录每次状态变更CREATE TABLE solder_paste_log ( id BIGINT PRIMARY KEY AUTO_INCREMENT, paste_barcode VARCHAR(64) NOT NULL COMMENT 锡膏条码, product_code VARCHAR(64) COMMENT 关联产品代码, action VARCHAR(32) NOT NULL COMMENT OPEN/STIR/ISSUE/RETURN/USE_UP/SCRAP, action_time DATETIME NOT NULL, operator VARCHAR(32), work_order_no VARCHAR(32), remark VARCHAR(256), INDEX idx_paste_barcode (paste_barcode), INDEX idx_action_time (action_time) );回温计时从冷库取出开始通常要求 4 小时以上。开封计时从OPEN动作开始一般要求 24 小时内用完。搅拌时间根据锡膏类型不同常见 3-5 分钟。这些时间参数建议做成配置项不同品牌的锡膏要求不一样。注意锡膏回存后再次领用时回温计时需要重新开始。很多系统在这里翻车把回存当成暂停导致回温时间累计计算错误。5. 质量追溯与系统集成从原料批次到成品序列号的正反向查询5.1 三种追溯路径的数据模型文档定义了三种追溯方式依照生产批次追溯、依照原料批次追溯、依照生产设备追溯。这三种追溯本质上是对同一套数据的不同查询方向。正向追溯原料→成品给定原料批次查它用在了哪些生产批次上这些生产批次又做成了哪些成品。反向追溯成品→原料给定成品序列号或批次号查它经过了哪些工序、用了哪些原料批次、每道工序的设备参数和检验记录是什么。支撑这两种追溯的核心表是批次关联表CREATE TABLE batch_trace_relation ( id BIGINT PRIMARY KEY AUTO_INCREMENT, production_batch VARCHAR(32) NOT NULL COMMENT 生产批次, material_batch VARCHAR(32) COMMENT 原料批次, work_order_no VARCHAR(32) NOT NULL, process_code VARCHAR(32) NOT NULL COMMENT 工序编码, device_code VARCHAR(32) COMMENT 设备编码, operator_id VARCHAR(32), start_time DATETIME, end_time DATETIME, qty_consumed DECIMAL(12,3) COMMENT 消耗数量, UNIQUE KEY uk_batch_process (production_batch, process_code, material_batch), INDEX idx_material_batch (material_batch), INDEX idx_work_order (work_order_no) );这张表同时支撑三种追溯路径。按生产批次查走production_batch索引按原料批次查走material_batch索引按设备查走device_code索引。文档还要求支持一个料卷分成多料卷、或多料卷合并为一个料卷的追溯管理这需要在material_batch字段上做父子关系映射。5.2 MES 与 APS、PLM、质量管理系统的集成边界文档用了一节专门分析 MES 与周边系统的集成其中 APS 和 PLM 的集成最容易被做偏。APS 集成方面文档列了 APS 需要的基础数据生产提前期、采购提前期、最大/小库存量、现存量、可用量、在途量、安全库存量、经济批量、BOM 版本、材料消耗定额、替代件、工艺路线、替代工序、工序优先级、工序制约关系、工序加工/准备/转移时间、工作中心设备能力、设备效率、替代设备、瓶颈设备。这些数据大部分来自 MES 和其他系统APS 本身不生产数据它只做排程计算。MES 向 APS 输入的信息包括生产任务、加工工艺、库存数据、设备信息、工人信息。APS 向 MES 输出的信息包括排程仿真及结果对比分析、排程结果。排程结果可以细化到某时某工人在某设备上加工某工序以及需要配备的工装工具和物资辅料。PLM 集成方面文档明确 PLM 保存结构化工艺文件数据MES 从 PLM 导入工艺数据PLM 实现工艺文件的自动查错、流程审批和归档管理。关键约束是 PLM 与 MES 中产品结构树要统一、审批流程要统一。集成方向数据内容同步方式频率PLM→MES工艺路线、BOM、图纸中间表定时任务工艺变更时触发MES→PLM工艺文件执行反馈接口回调工单完工时APS→MES排程结果、制造指令消息队列排程完成后MES→APS生产任务、设备状态接口查询按需5.3 设备数据采集的协议适配与异常处理文档对设备数据采集的要求分自动和人工两种。自动采集通过组态王或设备传感器接口的输出人工采集通过故障按钮汇报设备状态。设备状态包括设置、启动、生产、组织性停机无工单或缺料、技术故障型停机工具故障、电气或机械故障。协议适配层建议做成插件式每种协议一个适配器class DeviceAdapter: 设备采集适配器基类 def connect(self, device_config): raise NotImplementedError def read_data(self): raise NotImplementedError def disconnect(self): raise NotImplementedError class OpcUaAdapter(DeviceAdapter): def connect(self, device_config): # OPC UA 连接逻辑 self.client OpcUaClient(device_config[endpoint]) self.client.connect() def read_data(self): # 按配置的节点列表读取 nodes self.config[nodes] return {node: self.client.read(node) for node in nodes} class ModbusAdapter(DeviceAdapter): def connect(self, device_config): self.client ModbusTcpClient( device_config[ip], portdevice_config.get(port, 502) ) def read_data(self): # 按寄存器地址读取 registers self.config[registers] return self.client.read_holding_registers(registers)异常处理的关键是区分“设备离线”和“采集超时”。设备离线是连接断开需要重连采集超时是连接正常但读取无响应需要记录并跳过本次采集。两种情况的报警级别不同离线需要立即通知维护超时可以观察几个周期再决定是否报警。6. 需求文档落地时的几个验证技巧拿到这份需求分析文档后我一般会做三件事来验证它的可落地性。第一用文档里的数据采集要求反推数据库表结构。文档提到“生产报工的内容为生产批次、工序、作业员或班组、生产开始结束时间、产量、废品数量”这六个字段就是报工表的最小字段集。如果文档里某个需求找不到对应的数据字段说明需求描述还不够细需要回去补充。第二用系统集成章节画数据流图。文档列了 MES 与 ERP、APS、质量管理系统、PLM、设备管理系统、人力资源管理系统六个系统的集成关系。把每个方向的输入输出数据列出来检查是否有循环依赖或数据断点。比如 MES 向 ERP 提供完工入库信息ERP 接收后自动勾兑生产计划这个闭环里如果 ERP 的勾兑结果没有反馈回 MESMES 就不知道计划是否已经关闭。第三用追溯要求做一次模拟查询。文档要求“从产成品序列号或批次号追查到当日的生产环境包括温度、湿度、洁净度等信息”。这意味着环境数据必须和生产批次绑定存储。如果环境数据是独立存储的追溯查询就需要跨库关联性能会成问题。我一般会在批次关联表里冗余存储关键环境参数用空间换时间。-- 批次环境参数冗余表 CREATE TABLE batch_env_snapshot ( production_batch VARCHAR(32) PRIMARY KEY, temperature DECIMAL(5,2) COMMENT 温度℃, humidity DECIMAL(5,2) COMMENT 湿度%, cleanliness INT COMMENT 洁净度等级, snapshot_time DATETIME, device_code VARCHAR(32) );这张表在充填工序绑定生产批次时同步写入追溯查询时直接单表命中不用再去环境采集表里做时间范围扫描。从那以后我每次拿到需求文档都会先做这三步验证确认数据模型能闭环、集成关系无断点、追溯路径可直达再开始写代码。希望帮到你。本文还有配套的精品资源点击获取
返回列表