简介:这份PPT围绕模具制造行业的管理信息化建设展开,面向模具、注塑、五金、压铸类企业的管理者、信息化负责人及ERP实施人员,也适合希望了解制造业信息系统选型与落地思路的学习者。内容以i-M3模具企业管理系统为主线,梳理了管理信息化的必要性、系统主要流程、实施流程以及信息系统实施不理想的原因与成功标志,并给出与客户沟通、知识共享、模具技术沟通模板等具体做法。资源为单个pptx演示文稿,压缩包约1.33MB,共1个文件,属于可直接用于宣讲、培训或内部研讨的成套演示资料,模块划分清晰,便于按章节查阅。已有93人浏览学习。读者可从中获得模具行业ERP的功能框架,包括市场业务、计划与进程、BOM、生产与车间作业、采购、库存、成本、品质及人力资源等模块的组合逻辑,也能通过报价单、合同、进度报告与设计变更沟通等失败案例,理解管理纰漏造成的延期与返工代价,为系统选型和流程梳理提供参照。
1. 一份叫《某模具企业管理信息化解决方案.pptx》的文件,为什么十个厂九个落不了地
模具企业管理信息化的演示文稿通常长一个样:设计—加工—试模—交付全流程打通、设备联网、无纸化车间、老板手机上看进度。老板看完很兴奋,IT 负责人回到车间一算账就凉了半截——三十台机床,四个版本的 CAM 软件混着用,图纸在共享盘里叫「最终版2_修改后_真的最终」,老师傅的工时记在烟盒背面。方案逻辑没问题,问题是模具厂的生产逻辑跟批量制造不是一回事。
批量制造的主键是物料号,一套 BOM 对着几万件产量;模具厂的主键是模具号,一套模具就是一个项目,T0 试模那天之前谁也不敢打包票能过。把 MRP 那套「按预测备料、按库存扣减」照搬过来,最常见的后果是钢材堆满一仓库,该延期的模具照样延期。模具行业真正需要的是按模具号串起来的项目视图:BOM、工艺路线、工时、外协、试模记录、单套成本,全部挂在同一根主键上。
这套做法适合年产值三千万到五亿、每年两三百到三千套模具、以注塑模压铸模冲压模为主的厂,尤其是接单杂、套数多、交期紧、靠老师傅经验顶的那一类。往下走四步:先搭数据底座,再做车间报工,然后算成本与交期,最后才是上线验证。
2. 模具管理信息化的数据底座:模具号、BOM 与工艺路线怎么建模
数据底座没建好,后面的报工、排产、成本全是沙上建塔。这一章讲清楚四件事:主键怎么定、BOM 怎么分层、工艺路线怎么标准化、图纸和变更怎么落库。每一步都给可执行的建表语句和参数口径。
2.1 模具号编码规则决定后面三年的运维成本
常见做法是「客户简称 + 下单日期」,头三个月能用,半年后一定会撞号:同一个客户一天下三套模,日期精确到天就重复了。可检索、可扩展的规则是分段定长编码,例如MJ2408-A0137-01。
| 段位 | 长度 | 取值来源 | 生成后是否可改 |
|---|---|---|---|
| 模具类型码 | 2 | MJ 注塑模 / MO 压铸模 / MC 冲压模 / MF 其他 | 否 |
| 年月 | 4 | 下单年月 | 否 |
| 客户代码 | 1+4 | 客户主数据里的短码 | 否 |
| 流水号 | 4 | 全厂统一自增,不按客户分段 | 否 |
| 结构版本 | 2 | 同一套模重大改版时递增 | 可增版,不可改写历史 |
三条铁律:模具号全厂唯一且报废后不重用,否则三年的工时数据会被污染;流水号必须全厂统一自增,不要按客户或按年份清零;版本号只允许新增,不允许覆盖,新版本是新的模具号后缀而不是改老号。模具下面的零件编号用模具号-零件序号-件号,例如MJ2408-A0137-01-P012-01,模仁、滑块、斜顶、镶件都走这个规则,方便后面按零件报工和追料。
2.2 模具 BOM 拆两层:模架标准件走库存,非标件走采购
模具 BOM 一定要分两层看。第一层是模具装配结构:上模、下模、模架、滑块、斜顶、热流道系统、冷却水路,这一层回答「这套模由什么组成」。第二层是零件到毛坯的展开:模仁对应哪块钢板、哪个规格、哪家钢厂的料,这一层回答「要买什么、买多少」。两层混成一层,采购看不懂,车间也看不懂。
分层的直接收益是采购策略能分开:顶针、弹簧、导柱导套、螺丝、水路接头这类标准件走仓库安全库存,按周补货;模架、模仁料、镶件、热流道这类非标件必须按模具号挂采购订单,绝不能进通用库存。非标件一旦进了通用库存,财务上就是呆滞,车间里就是「明明买过却找不到」。
-- 模具主数据 CREATE TABLE mold_master ( mold_no VARCHAR(32) NOT NULL COMMENT '模具号,全厂唯一,报废不重用', mold_type VARCHAR(8) NOT NULL COMMENT 'MJ/MO/MC/MF', customer_code VARCHAR(8) NOT NULL COMMENT '客户短码', order_date DATE NOT NULL COMMENT '接单日期', plan_t0_date DATE NULL COMMENT '计划T0试模日期', cavity_count SMALLINT NOT NULL DEFAULT 1 COMMENT '型腔数', steel_grade VARCHAR(32) NULL COMMENT '模仁钢材牌号,如 718H/NAK80/S136', status VARCHAR(16) NOT NULL DEFAULT 'DESIGN' COMMENT 'DESIGN/MACHINING/TRIAL/DELIVERED/CLOSED', PRIMARY KEY (mold_no), KEY idx_status_t0 (status, plan_t0_date) -- 交期预警走这个索引 ) COMMENT='模具主数据'; -- 模具BOM(两层共用,用 level 区分) CREATE TABLE mold_bom ( id BIGINT NOT NULL AUTO_INCREMENT, mold_no VARCHAR(32) NOT NULL, part_no VARCHAR(48) NOT NULL COMMENT '零件号,如 MJ2408-A0137-01-P012-01', parent_part VARCHAR(48) NULL COMMENT '上层装配件,NULL 表示第一层', bom_level TINYINT NOT NULL COMMENT '1=装配层 2=零件毛坯层', item_code VARCHAR(32) NOT NULL COMMENT '物料编码,标准件指向库存物料', item_class VARCHAR(8) NOT NULL COMMENT 'STD标准件/STOCK库存件/NONSTD非标件', qty DECIMAL(12,3) NOT NULL DEFAULT 1, unit VARCHAR(8) NOT NULL DEFAULT 'PCS', PRIMARY KEY (id), UNIQUE KEY uk_bom (mold_no, part_no, item_code), KEY idx_item (item_code) ) COMMENT='模具BOM';item_class这个字段是整个采购逻辑的分水岭:值为NONSTD的行,采购下单时必须带mold_no,收货时也只能入到这套模具的专属料位;值为STD的行才允许按安全库存自动补货。bom_level不要用递归查询去推,直接落库,因为模具的装配层结构基本稳定,落库比递归快一个数量级,报表也好写。
2.3 工艺路线与工序字典:把「飞模、配模」这类口语工序标准化
车间口语里的工序名是最难治理的一块。同一道活儿,A 师傅叫「飞模」,B 师傅叫「配模」,C 师傅写「合模」,报表一跑出来三个工序,工时统计直接崩。做法是先建一张工序字典表,把全厂工序冻结成有限集合,再去挂设备组和标准工时。
| 工序编码 | 工序名称 | 设备组 | 是否外协 | 典型工时占比 |
|---|---|---|---|---|
| CNC-R | CNC 粗加工 | 龙门/加工中心 | 否 | 12% |
| CNC-F | CNC 精加工 | 高速机 | 否 | 18% |
| GRD | 平面磨/大水磨 | 磨床组 | 否(大水磨常外协) | 8% |
| EDM-R | 放电粗公 | 火花机 | 否 | 10% |
| EDM-F | 放电精公 | 精密火花机 | 否 | 7% |
| WEDM | 线切割(快/慢) | 线切割组 | 慢走丝常外协 | 6% |
| DRL | 钻孔/攻牙 | 钻床 | 否 | 4% |
| HT | 热处理 | — | 是 | 2% |
| NIT | 氮化/渗碳 | — | 是 | 2% |
| POL | 抛光/省模 | 钳工组 | 否(蚀纹外协) | 12% |
| FIT | 配模/飞模 | 钳工组 | 否 | 9% |
| ASM | 总装 | 钳工组 | 否 | 5% |
| TRIAL | 试模 | 注塑机 | 否 | 3% |
| REP | 修模 | 钳工组 | 否 | 2% |
外协标记is_outsource必须落在工序字典上,而不是落在工单上。原因很实际:热处理、氮化、蚀纹、慢走丝这几道外协工序是成本漏点,只要字典上标了外协,报工时系统就强制要求填外协单号,漏一个都提交不了。
CREATE TABLE process_dict ( proc_code VARCHAR(16) NOT NULL COMMENT '工序编码', proc_name VARCHAR(32) NOT NULL COMMENT '标准工序名', equip_group VARCHAR(16) NULL COMMENT '设备组,外协为空', is_outsource TINYINT NOT NULL DEFAULT 0, hourly_rate DECIMAL(10,2) NULL COMMENT '设备小时费率,元/小时', PRIMARY KEY (proc_code) ) COMMENT='工序字典'; CREATE TABLE routing ( id BIGINT NOT NULL AUTO_INCREMENT, mold_no VARCHAR(32) NOT NULL, part_no VARCHAR(48) NOT NULL, seq SMALLINT NOT NULL COMMENT '工序顺序号,10/20/30 递增,方便插工序', proc_code VARCHAR(16) NOT NULL, equip_group VARCHAR(16) NULL, std_hours DECIMAL(8,2) NOT NULL DEFAULT 0 COMMENT '标准工时(小时)', allow_overlap TINYINT NOT NULL DEFAULT 0 COMMENT '是否允许与上道工序重叠开工', PRIMARY KEY (id), UNIQUE KEY uk_routing (mold_no, part_no, seq), KEY idx_part (mold_no, part_no, seq) ) COMMENT='零件工艺路线';seq用 10、20、30 递增而不是 1、2、3,是为了中途插工序不用重排全表——模具改版加一道精修工序是常事。allow_overlap是给排产用的:热处理和外协这类工序可以和下道准备工序重叠,不设这个开关,排产结果会平白多出好几天。
2.4 图纸版本与 ECN 变更:别让「最终版2」进数据库
图纸管理的核心不是存文件,是保证同一时刻只有一份受控版本。做法是文件表加状态机,用唯一索引把「受控」状态卡死。
CREATE TABLE mold_doc ( id BIGINT NOT NULL AUTO_INCREMENT, mold_no VARCHAR(32) NOT NULL, part_no VARCHAR(48) NULL, doc_type VARCHAR(16) NOT NULL COMMENT '3D/2D/电极图/工艺卡', version VARCHAR(16) NOT NULL COMMENT 'A/B/C 或 1.0/2.0', file_path VARCHAR(255) NOT NULL, file_md5 CHAR(32) NOT NULL COMMENT '内容指纹,防同名不同内容', status VARCHAR(16) NOT NULL COMMENT 'DRAFT/RELEASED/OBSOLETE', uploader VARCHAR(32) NOT NULL, upload_at DATETIME NOT NULL, PRIMARY KEY (id), KEY idx_mold_part (mold_no, part_no, doc_type, status) ) COMMENT='模具图纸与工艺文件';MySQL 没有部分唯一索引,可以用一个冗余列实现:controlled_key,受控时填mold_no+part_no+doc_type,非受控填 NULL,然后在controlled_key上建唯一索引。PostgreSQL 直接写CREATE UNIQUE INDEX ... WHERE status='RELEASED'更干净。file_md5的作用是防止有人把同一份图改个文件名重新上传当新版本,文件名可以骗人,MD5 骗不了。
ECN 变更表要记录三个要素:变更点、影响范围、生效工序。生效工序很关键——如果 ECN 下达时零件已经加工到第 40 道工序,那么前 30 道工序的工时要归到变更前,后面的归到变更后,成本才能算清增补了多少。
3. 车间报工与 MES:把模具加工进度做成实时可查
数据底座的下一层是现场。这一章解决三个问题:采集路线选哪一种、报工接口怎么写、试模修模怎么闭环。模具车间的数据采集和流水线完全不是一套思路,流水线追求节拍和产量,模具车间追求的是「这道工序在谁手上、还剩多少小时」。
3.1 采集路线怎么选:扫码、机床信号还是手工填报
| 路线 | 精度 | 单点成本 | 维护难度 | 适用对象 |
|---|---|---|---|---|
| 扫码报工 | 分钟级,靠人 | 低(几十到几百元) | 低 | 全部工序,起步必做 |
| 机床信号采集 | 秒级,客观 | 高(单台数千元起) | 高,协议杂乱 | 瓶颈设备:CNC、精密火花机、慢走丝 |
| 手工纸质填报 | 天级 | 极低 | 数据不可用 | 只作为断网降级方案 |
我一般建议先全厂铺扫码,跑三个月把工序字典和标准工时磨准,再挑三到五台瓶颈设备做信号采集。一上来就全厂联网,八成会卡在协议上:不同年份的机床,接口从串口、现场总线到以太网协议各不相同,数据点表还得一台台对。信号采集的价值在于拿到主轴运转时间,用来校正人工填报的水分——模具厂报工最大的问题是「一个人同时开三台火花机,三台都报满工时」。
3.2 派工与扫码报工的最小可用实现
报工接口的字段设计比实现重要。模具是单件生产,数量字段用不上「产量」,要用「完成百分比」和「是否完工」。
# work_report.py —— 扫码报工接口(Flask 示例) from flask import Flask, request, jsonify from datetime import datetime app = Flask(__name__) @app.post("/api/work_report") def work_report(): d = request.get_json() # 幂等键:工单+工序+设备+班次,防止车间网络抖动导致重复提交 idem = f"{d['wo_no']}|{d['proc_code']}|{d['equip_code']}|{d['shift']}" if cache.exists(idem): return jsonify(code=200, msg="duplicate ignored"), 200 cache.setex(idem, 86400, 1) # 起始/结束时间由扫码动作生成,员工只填完成百分比 start = datetime.fromisoformat(d["start_at"]) end = datetime.fromisoformat(d["end_at"]) actual_hours = round((end - start).total_seconds() / 3600, 2) if actual_hours > 24: return jsonify(code=400, msg="单次报工超过24小时,请检查时间"), 400 # 外协工序强制校验外协单号 proc = db.query_one("SELECT is_outsource FROM process_dict WHERE proc_code=%s", (d["proc_code"],)) if proc["is_outsource"] and not d.get("outsource_no"): return jsonify(code=400, msg="外协工序必须填写外协单号"), 400 db.execute(""" INSERT INTO work_log (wo_no, mold_no, part_no, proc_code, equip_code, operator, shift, start_at, end_at, actual_hours, finish_pct, qty_ok, qty_ng, ng_reason, outsource_no) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) """, (d["wo_no"], d["mold_no"], d["part_no"], d["proc_code"], d["equip_code"], d["operator"], d["shift"], start, end, actual_hours, d["finish_pct"], d.get("qty_ok", 0), d.get("qty_ng", 0), d.get("ng_reason"), d.get("outsource_no"))) return jsonify(code=200, actual_hours=actual_hours)调用方式(车间扫码枪走这条):
curl -X POST http://mes.local/api/work_report \ -H "Content-Type: application/json" \ -d '{"wo_no":"WO2408-0231","mold_no":"MJ2408-A0137-01", "part_no":"MJ2408-A0137-01-P012-01","proc_code":"CNC-F", "equip_code":"CNC-05","operator":"E1023","shift":"D", "start_at":"2024-08-13T08:12:00","end_at":"2024-08-13T13:41:00", "finish_pct":100,"qty_ok":1}'逻辑上有三个点要注意。第一,时间戳由扫码动作生成,员工只填完成百分比和不良数——让员工手填起止时间,报出来的工时永远漂亮得不像话。第二,actual_hours做了 24 小时上限校验,防止有人早上忘了扫完工晚上才补,把跨夜时长算进来。第三,幂等键覆盖到班次粒度,模具车间一天两班或三班,同一工序跨班报工是正常的,不能简单按工序去重。
finish_pct这个字段容易设计错。不要做成 0 到 100 的自由输入,做成 0/50/100 三档,或者干脆用「是否完工」布尔值加「剩余工时」估数。自由百分比输入两个月后就会失真,师傅们懒得算。
3.3 工时参数:标准工时、准备工时、宽放系数怎么定
标准工时不是拿来考核的,是拿来排产和报价的,口径必须写死。
| 参数 | 推荐取值 | 作用 | 失真信号 |
|---|---|---|---|
| 宽放系数 | 12%–18% | 覆盖生理、疲劳、等待 | 实际工时系统性超标准 30% 以上 |
| 准备工时占比 | CNC 15%、火花机 25% | 换刀、换电极、找正 | 小件单件报工远超标准 |
| 工时精度 | 0.25 小时 | 报工最小刻度 | 出现 0.01 小时这类记录 |
| 标准工时复核周期 | 季度 | 工艺改进后更新 | 同一工序标准三年未动 |
宽放系数新手最容易拍脑袋填 30%,结果排产全部超期。合理做法是先按实动工时统计一个月,把「等待吊装、等待电极、等待上道工序」的时间单独归一类,再决定宽放给多少。等待时间大于实动时间,说明问题在排产不在工时,调宽放系数只会掩盖它。
单件生产没法算 OEE,因为模具车间没有「节拍」概念。可替代的指标是两个:设备稼动率(主轴/放电有效时间 ÷ 计划开机时间)和计划达成率(按期完工工序数 ÷ 计划完工工序数)。前者用信号采集拿,后者用报工数据算,两个指标一起看才不会被单一数据骗。
3.4 试模与修模闭环:T0、T1 次数怎么落表
试模是模具行业最特殊的环节,也是信息化价值最高的环节。T0 指第一次试模,T1、T2 依次类推,行业里 T0 一次通过率能到 40% 就算不错。
CREATE TABLE trial_record ( id BIGINT NOT NULL AUTO_INCREMENT, mold_no VARCHAR(32) NOT NULL, trial_seq TINYINT NOT NULL COMMENT '0=T0, 1=T1 ...', trial_date DATE NOT NULL, machine_code VARCHAR(16) NOT NULL COMMENT '试模机台', mat_material VARCHAR(32) NULL COMMENT '试模用料,如 PP/ABS/PC', defect_class VARCHAR(32) NULL COMMENT '问题分类:尺寸/外观/装配/成型/水路', defect_desc VARCHAR(255) NULL, fix_content VARCHAR(255) NULL COMMENT '修模内容', fix_hours DECIMAL(8,2) NULL COMMENT '修模工时', next_plan DATE NULL COMMENT '下次试模计划日', PRIMARY KEY (id), UNIQUE KEY uk_trial (mold_no, trial_seq), KEY idx_defect (defect_class, trial_date) ) COMMENT='试模与修模记录';defect_class的分类项要跟工艺组一起定,不能由 IT 拍。常见分类是尺寸、外观、装配、成型、水路、顶出六类,统计出来哪一类占前三,下一批模具的设计检查表就往哪三类加检查项。fix_hours和routing里的修模工序工时要对得上,对不上说明修模没走报工。
T0 一次通过率的 SQL 很简单,但很多厂跑不出来,因为试模记录是纸质表格:
SELECT COUNT(*) AS mold_total, SUM(CASE WHEN t.trial_seq = 0 AND NOT EXISTS ( SELECT 1 FROM trial_record t2 WHERE t2.mold_no = t.mold_no AND t2.trial_seq > 0) THEN 1 ELSE 0 END) AS t0_pass, ROUND(100.0 * SUM(CASE WHEN t.trial_seq = 0 AND NOT EXISTS ( SELECT 1 FROM trial_record t2 WHERE t2.mold_no = t.mold_no AND t2.trial_seq > 0) THEN 1 ELSE 0 END) / COUNT(*), 1) AS t0_pass_rate FROM trial_record t WHERE t.trial_seq = 0 AND t.trial_date BETWEEN '2024-01-01' AND '2024-12-31';4. 单套模具成本与交期:核算模型和有限产能排产的参数
前两章把料和工都记录下来了,这一章把记录变成钱和日期。模具行业算成本的最小单位是「一套模具」,不是「一个批次」,也不是「一个车间」。
4.1 料工费三块怎么归集到一套模具
料的部分有三个漏点:钢材毛坯的利用率、标准件的分摊、外协件。钢材按整板买、按套用,利用率 60%–75% 是常态,余料要么退库要么留用,留用的部分如果不在系统里做转移,下一套模具的成本就会虚高。标准件建议按套分摊,不要按实际领用——领料单在模具车间几乎不可能百分百准确。外协件必须走外协单,包含单价、数量、回厂日期。
工的部分按routing的标准工时乘设备费率,再按work_log的实际工时做差异分析。差异率超过 20% 的工序要单独看,不是改标准工时,就是查报工有没有水分。
费的部分是制造费用分摊,两种口径:按工时分摊(适合人工密集的钳工段)或按模具套数均摊(适合折旧为主的设备段)。口径一旦定了,报表里必须写清楚,否则采购和车间会因为「为什么这套模成本这么高」吵半年。
4.2 成本核算的计算逻辑与代码
def mold_cost(mold_no, cost_ver="V1"): """单套模具成本核算:料 + 工 + 外协 + 制造费用""" # 1) 材料费:非标件按实际采购,标准件按分摊系数 mat = db.query_one(""" SELECT SUM(CASE WHEN item_class='NONSTD' THEN qty * std_price ELSE 0 END) AS nonstd_amt, SUM(CASE WHEN item_class='STD' THEN qty * std_price ELSE 0 END) AS std_amt FROM mold_bom b JOIN item_price p ON p.item_code = b.item_code WHERE b.mold_no = %s """, (mold_no,)) # 2) 加工费:优先用实际工时,无实际工时则回落到标准工时 labor = db.query_one(""" SELECT SUM(COALESCE(w.actual_hours, r.std_hours) * d.hourly_rate) AS labor_amt, SUM(CASE WHEN w.id IS NULL THEN 1 ELSE 0 END) AS no_report_cnt FROM routing r JOIN process_dict d ON d.proc_code = r.proc_code LEFT JOIN work_log w ON w.mold_no = r.mold_no AND w.part_no = r.part_no AND w.proc_code = r.proc_code WHERE r.mold_no = %s AND d.is_outsource = 0 """, (mold_no,)) # 3) 外协费 out = db.query_one( "SELECT COALESCE(SUM(amount),0) AS out_amt FROM outsource_order WHERE mold_no=%s", (mold_no,)) # 4) 制造费用:按加工工时占比分摊当月制造费用池 overhead_rate = cfg.get("overhead_per_hour", 0) # 元/小时,财务月度刷新 overhead = labor["labor_amt"] / avg_rate * overhead_rate total = mat["nonstd_amt"] + mat["std_amt"] + labor["labor_amt"] + out["out_amt"] + overhead return { "mold_no": mold_no, "material": round(mat["nonstd_amt"] + mat["std_amt"], 2), "labor": round(labor["labor_amt"], 2), "outsource": round(out["out_amt"], 2), "overhead": round(overhead, 2), "total": round(total, 2), "unreported_proc": labor["no_report_cnt"], # 未报工工序数,>0 说明成本被低估 }这段代码里最关键的不是加总,是unreported_proc。只要还有工序没报工,COALESCE就会回落到标准工时,成本必然偏离实际。核算前先把未报工工序清干净,报表才有意义。overhead_per_hour这个参数我一般要求财务每月刷新一次,写死在代码里是自欺欺人。
4.3 有限产能排产的关键参数与瓶颈识别
模具排产和批量排产最大的区别是瓶颈漂移:一套模具在 CNC 阶段瓶颈可能是龙门,到了放电阶段瓶颈变成精密火花机,到了装配阶段瓶颈变成钳工工时。所以排产不能一套参数走到底,要按设备组分别设。
| 参数 | 说明 | 常见坑 |
|---|---|---|
| 设备组日产能 | 按小时,非按件 | 用件数排产,模具是单件,无意义 |
| 换型时间 | CNC 换刀 0.5–2h,火花机换电极 0.3–1h | 忽略换型,排出来永远比实际快 |
| 优先级规则 | 交期紧 → 试模在即 → 客户等级 | 只按交期,试模在即的模具会被压死 |
| 排产方向 | 瓶颈前用倒排,瓶颈后顺排 | 全流程倒排,前道工序会挤成一团 |
| 重叠工序 | 热处理、外协允许重叠 | 不允许重叠,交期凭空多两三天 |
瓶颈识别不用复杂算法,跑一周的工序排队数据就能看出来:同一设备组内等待工时最长的那个组就是瓶颈。识别出来之后,把信号采集优先装到瓶颈设备上,收益最大。
4.4 交期里程碑与预警阈值
一套模具的里程碑固定为七段:设计完成、钢材到位、粗加工完成、精加工完成、装配完成、T0 试模、交付。每段落一个计划日期和一个实际日期,差值就是预警依据。
| 预警等级 | 触发条件 | 动作 |
|---|---|---|
| 黄 | T0 前 10 天精加工未开工 | 工艺组复核工时,必要时加班或外协 |
| 橙 | T0 前 3 天精加工未完成 | 生产经理介入,重排优先级 |
| 红 | 超过计划 T0 日期 | 项目经理通知客户,重定交期 |
SELECT m.mold_no, m.plan_t0_date, DATEDIFF(m.plan_t0_date, CURDATE()) AS days_left, MAX(CASE WHEN r.proc_code IN ('CNC-F','EDM-F','WEDM') THEN w.end_at END) AS last_finish, CASE WHEN CURDATE() > m.plan_t0_date THEN 'RED' WHEN DATEDIFF(m.plan_t0_date, CURDATE()) <= 3 AND COUNT(CASE WHEN r.proc_code IN ('CNC-F','EDM-F') AND w.end_at IS NOT NULL THEN 1 END) = 0 THEN 'ORANGE' WHEN DATEDIFF(m.plan_t0_date, CURDATE()) <= 10 AND COUNT(CASE WHEN r.proc_code = 'CNC-R' AND w.end_at IS NOT NULL THEN 1 END) = 0 THEN 'YELLOW' ELSE 'GREEN' END AS warn_level FROM mold_master m LEFT JOIN routing r ON r.mold_no = m.mold_no LEFT JOIN work_log w ON w.mold_no = r.mold_no AND w.part_no = r.part_no AND w.proc_code = r.proc_code WHERE m.status NOT IN ('DELIVERED','CLOSED') GROUP BY m.mold_no, m.plan_t0_date ORDER BY FIELD(warn_level,'RED','ORANGE','YELLOW','GREEN'), days_left;5. 上线验证与几个能省下返工的具体技巧
方案落地的最后一段路最难走,因为前面所有建模的隐患都会在这一段集中暴露。这一章给三个能直接抄的东西:数据体检 SQL、并行试跑方法、看板取舍。
5.1 基础数据体检:几条 SQL 先跑一遍
上线前必跑的四条,跑不过就别开系统:
-- 1) 有 BOM 但标准件没有物料主数据的行 SELECT b.mold_no, b.item_code FROM mold_bom b LEFT JOIN item_master i ON i.item_code = b.item_code WHERE i.item_code IS NULL AND b.item_class IN ('STD','STOCK'); -- 2) 有 BOM 但没有工艺路线的零件 SELECT DISTINCT b.mold_no, b.part_no FROM mold_bom b LEFT JOIN routing r ON r.mold_no = b.mold_no AND r.part_no = b.part_no WHERE b.bom_level = 2 AND r.id IS NULL; -- 3) 标准工时为 0 或缺失的工序 SELECT mold_no, part_no, proc_code FROM routing WHERE std_hours IS NULL OR std_hours = 0; -- 4) 工序字典里外协工序但设备组不为空(口径冲突) SELECT proc_code, proc_name FROM process_dict WHERE is_outsource = 1 AND equip_group IS NOT NULL;第一条查出来的是采购漏填,第二条是工艺漏排,第三条会让排产和成本全线失真,第四条是口径自相矛盾。这四条 SQL 我一般做成上线前的检查清单,每条必须为 0 行才放行。
5.2 新旧并行试跑与差异对账
不要一次性切换。选十到二十套新接的模具,新旧两套口径同时记,周期覆盖完整的四个阶段——设计、粗加工、精加工、装配。对账只对两个数:单套模具工时、单套模具材料费。
差异超过 20% 的工序逐个做根因分析,通常落在三个地方:新旧口径对准备工时的包含范围不一致(含/不含换刀)、材料费含税不含税没对齐、外协工时被重复计入。这三个问题在并行期发现,成本是可控的;切换后再发现,就得回头重算历史数据,那才是真的麻烦。
并行期还有一个副产品:师傅们的报工习惯会在这一段时间成型。这时候表格字段该简化的简化,扫码页面该放大按钮的放大按钮,等系统正式上线再改,阻力大一倍。
5.3 权限与看板:车间屏上只放三个数
车间大屏最容易做成「数据大杂烩」,一张屏塞十几个图表,没人看。模具车间的看板只放三个数就够了:今日待开工工序数、超期工序数、最近三套待 T0 模具的倒计时天数。前两个是给班长派工用的,第三个是给全车间看交期压力的。
权限上有一条硬规则:routing.std_hours和process_dict.hourly_rate的写权限必须收到工艺组和财务手里,车间只读。标准工时谁都能改,报工数据三个月内必然失效——手填的人会主动去找那个「让考核好看」的数值。同理,overhead_per_hour只能由财务月度刷新,不进日常权限体系。
报表口径也要固化。同一张报表里,「工时」要么全含准备工时要么全不含,「材料费」要么全含税要么全不含,写在报表页脚,不接受口头解释。口径固化之后第一件事,是把工序标准工时的修改权限收口,其他角色一律只读——这是模具厂数据可信度的下限。
本文还有配套的精品资源,点击获取