injection molding company

Injection Molding Unit Cost Breakdown

Use our interactive Injection Molding Unit Cost Breakdown & What-If Analyzer below to model your exact piece price across resin weight, runner regrind recovery, press hourly rate, cycle time, cavity count, scrap rate, and mold amortization.

.imc-wrap *{box-sizing:border-box;margin:0;padding:0;} .imc-wrap{ –cb:#fff;–cs:#f8f9fb;–cs2:#f1f4f8; –bd:#e4e7ec;–bdm:#cbd0d8; –tx:#111827;–mu:#6b7280;–hi:#9ca3af; –bl:#2563eb;–bl-l:#eff6ff;–bl-b:#bfdbfe;–bl-t:#1d4ed8; –pu:#7c3aed;–pu-l:#f5f3ff;–pu-b:#ddd6fe;–pu-t:#5b21b6; –te:#0d9488;–te-l:#f0fdfa;–te-b:#99f6e4;–te-t:#0f766e; –gn:#16a34a;–gn-l:#f0fdf4;–gn-b:#bbf7d0;–gn-t:#166534; –am:#d97706;–am-l:#fffbeb;–am-b:#fde68a;–am-t:#92400e; –re:#dc2626;–re-l:#fef2f2;–re-b:#fecaca;–re-t:#991b1b; –gy:#6b7280;–gy-l:#f9fafb;–gy-b:#e5e7eb;–gy-t:#374151; –mn:’Courier New’,Courier,monospace; –sf:-apple-system,BlinkMacSystemFont,’Segoe UI’,Roboto,Helvetica,Arial,sans-serif; –r:8px;–rl:12px; font-family:var(–sf);font-size:15px;color:var(–tx);background:transparent;line-height:1.5; } @media(prefers-color-scheme:dark){.imc-wrap{ –cb:#1e2025;–cs:#272b33;–cs2:#2f3440;–bd:#363c47;–bdm:#4a5261; –tx:#f1f3f7;–mu:#8d96a5;–hi:#5c6575; –bl:#60a5fa;–bl-l:#1e2d45;–bl-b:#2d4a7a;–bl-t:#93c5fd; –pu:#a78bfa;–pu-l:#2e1065;–pu-b:#4c1d95;–pu-t:#c4b5fd; –te:#2dd4bf;–te-l:#042f2e;–te-b:#115e59;–te-t:#5eead4; –gn:#4ade80;–gn-l:#052e16;–gn-b:#166534;–gn-t:#86efac; –am:#fbbf24;–am-l:#2d1f00;–am-b:#78350f;–am-t:#fcd34d; –re:#f87171;–re-l:#2d0a0a;–re-b:#7f1d1d;–re-t:#fca5a5; –gy:#9ca3af;–gy-l:#1f2937;–gy-b:#374151;–gy-t:#d1d5db; }} body.dark .imc-wrap,.dark .imc-wrap{ –cb:#1e2025;–cs:#272b33;–cs2:#2f3440;–bd:#363c47;–bdm:#4a5261; –tx:#f1f3f7;–mu:#8d96a5;–hi:#5c6575; –bl:#60a5fa;–bl-l:#1e2d45;–bl-b:#2d4a7a;–bl-t:#93c5fd; –pu:#a78bfa;–pu-l:#2e1065;–pu-b:#4c1d95;–pu-t:#c4b5fd; –te:#2dd4bf;–te-l:#042f2e;–te-b:#115e59;–te-t:#5eead4; –gn:#4ade80;–gn-l:#052e16;–gn-b:#166534;–gn-t:#86efac; –am:#fbbf24;–am-l:#2d1f00;–am-b:#78350f;–am-t:#fcd34d; –re:#f87171;–re-l:#2d0a0a;–re-b:#7f1d1d;–re-t:#fca5a5; –gy:#9ca3af;–gy-l:#1f2937;–gy-b:#374151;–gy-t:#d1d5db; } .imc-card{background:var(–cb);border:1px solid var(–bd);border-radius:var(–rl);padding:1.75rem 1.75rem 2rem;max-width:960px;margin:0 auto;} .imc-hdr{display:flex;align-items:center;gap:10px;margin-bottom:1.75rem;padding-bottom:1.25rem;border-bottom:1px solid var(–bd);flex-wrap:wrap;} .imc-badge{font-family:var(–mn);font-size:10px;letter-spacing:.08em;background:var(–cs);border:1px solid var(–bd);border-radius:4px;padding:3px 8px;color:var(–mu);white-space:nowrap;} .imc-hdr h2{font-size:17px;font-weight:600;color:var(–tx);margin:0;border:none;padding:0;flex:1;min-width:0;} .imc-ts{font-family:var(–mn);font-size:10px;color:var(–hi);} .imc-sec{margin-bottom:1.5rem;} .imc-sec-hd{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(–mu);margin-bottom:12px;padding-bottom:6px;border-bottom:1px solid var(–bd);} .imc-lbl{display:block;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(–mu);margin-bottom:6px;} .imc-hint{font-size:11px;color:var(–hi);margin-top:4px;line-height:1.5;} .imc-g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;} .imc-g4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;} @media(max-width:580px){.imc-g3,.imc-g4{grid-template-columns:1fr 1fr;}} @media(max-width:380px){.imc-g3,.imc-g4{grid-template-columns:1fr;}} .imc-ni{display:flex;align-items:center;border:1px solid var(–bd);border-radius:var(–r);overflow:hidden;background:var(–cb);}/* FIX 1: 移除 all: unset, 使用安全的浏览器重置 */ .imc-ni input[type=number]{-webkit-appearance:none;appearance:none;background:transparent;border:none;outline:none;flex:1;font-family:var(–mn);font-size:16px;font-weight:700;color:var(–tx);padding:9px 12px;-moz-appearance:textfield;} .imc-ni input[type=number]::-webkit-inner-spin-button,.imc-ni input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;} .imc-ni-unit{font-size:11px;font-weight:600;color:var(–mu);padding:0 10px 0 0;white-space:nowrap;} .imc-qp{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;}/* FIX 2: 修复按键的 all: unset */ .imc-qb{-webkit-appearance:none;appearance:none;background:var(–cb);border:1px solid var(–bd);outline:none;font-family:var(–mn);font-size:10px;font-weight:600;padding:3px 8px;border-radius:var(–r);color:var(–mu);cursor:pointer;transition:all .12s;} .imc-qb:hover{background:var(–cs);border-color:var(–bdm);color:var(–tx);} .imc-rr{display:flex;align-items:center;gap:8px;}/* FIX 3: 修复滑块的原生拖动能力 */ .imc-rr input[type=range]{-webkit-appearance:none;appearance:none;background:var(–bd);border:none;outline:none;flex:1;height:4px;border-radius:2px;cursor:pointer;margin:0;} .imc-rr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(–bl);border:2px solid var(–cb);box-shadow:0 0 0 1px var(–bl);} .imc-rr input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(–bl);border:2px solid var(–cb);}.imc-rv{font-family:var(–mn);font-size:11px;font-weight:700;color:var(–tx);min-width:48px;text-align:right;white-space:nowrap;} .imc-div{height:1px;background:var(–bd);margin:1.5rem 0;} .imc-total-band{display:flex;align-items:center;justify-content:space-between;background:var(–cs);border:1px solid var(–bd);border-radius:var(–rl);padding:1.25rem 1.5rem;margin-bottom:1.25rem;flex-wrap:wrap;gap:12px;} .imc-total-lbl{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(–mu);margin-bottom:4px;} .imc-total-val{font-family:var(–mn);font-size:36px;font-weight:700;color:var(–tx);line-height:1;} .imc-total-unit{font-size:13px;color:var(–mu);margin-left:4px;} .imc-total-right{display:flex;gap:12px;flex-wrap:wrap;} .imc-kpi{background:var(–cb);border:1px solid var(–bd);border-radius:var(–r);padding:10px 14px;text-align:center;min-width:80px;} .imc-kpi-lbl{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(–hi);margin-bottom:3px;} .imc-kpi-val{font-family:var(–mn);font-size:16px;font-weight:700;color:var(–tx);} .imc-wf-wrap{margin-bottom:1.25rem;} .imc-wf-ttl{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(–mu);margin-bottom:10px;} .imc-wf-svg{width:100%;display:block;} .imc-comps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:1.25rem;} @media(max-width:600px){.imc-comps{grid-template-columns:1fr 1fr;}} @media(max-width:380px){.imc-comps{grid-template-columns:1fr;}} .imc-comp{border-radius:var(–r);padding:12px 14px;border:1px solid var(–bd);background:var(–cb);position:relative;overflow:hidden;} .imc-comp-bar{position:absolute;bottom:0;left:0;height:3px;transition:width .4s ease;} .imc-comp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;} .imc-comp-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;} .imc-comp-name{font-size:11px;font-weight:600;color:var(–mu);flex:1;margin:0 6px;} .imc-comp-rank{font-size:9px;font-family:var(–mn);font-weight:700;padding:2px 5px;border-radius:3px;} .imc-comp-val{font-family:var(–mn);font-size:18px;font-weight:700;color:var(–tx);margin-bottom:2px;} .imc-comp-sub{font-size:12px;font-weight:600;color:var(–mu);} .imc-comp-delta{font-size:11px;font-family:var(–mn);font-weight:700;margin-top:4px;} .imc-comp-delta.dn{color:var(–gn);} .imc-comp-delta.up{color:var(–re);} .imc-opp{background:var(–cs);border:1px solid var(–bd);border-radius:var(–rl);padding:1.25rem 1.5rem;margin-bottom:1.25rem;} .imc-opp-ttl{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(–mu);margin-bottom:12px;} .imc-opp-row{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(–bd);} .imc-opp-row:last-child{border-bottom:none;padding-bottom:0;} .imc-opp-rk{font-family:var(–mn);font-size:11px;font-weight:700;width:20px;flex-shrink:0;color:var(–hi);padding-top:1px;} .imc-opp-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:4px;} .imc-opp-body{flex:1;min-width:0;} .imc-opp-lv{font-size:12px;font-weight:600;color:var(–tx);} .imc-opp-lv span{font-size:10px;color:var(–mu);font-weight:400;margin-left:4px;} .imc-opp-ac{font-size:11px;color:var(–mu);margin-top:2px;line-height:1.4;} .imc-opp-sv{font-family:var(–mn);font-size:12px;font-weight:700;color:var(–gn);flex-shrink:0;white-space:nowrap;text-align:right;} .imc-wi-btn{display:flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(–bd);border-radius:var(–r);background:var(–cs);cursor:pointer;font-size:13px;font-weight:600;color:var(–mu);width:100%;margin-bottom:12px;transition:all .15s;font-family:var(–sf);} .imc-wi-btn:hover{border-color:var(–bdm);color:var(–tx);} .imc-wi-btn.on{background:var(–bl-l);border-color:var(–bl-b);color:var(–bl-t);} .imc-wi-sw{width:36px;height:20px;border-radius:10px;background:var(–bd);position:relative;flex-shrink:0;transition:background .2s;} .imc-wi-btn.on .imc-wi-sw{background:var(–bl);} .imc-wi-kn{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .2s;} .imc-wi-btn.on .imc-wi-kn{left:18px;} .imc-wi-panel{display:none;} .imc-wi-panel.show{display:block;} .imc-wi-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:1.25rem;} @media(max-width:560px){.imc-wi-grid{grid-template-columns:1fr 1fr;}} .imc-wi-lv{background:var(–cs);border:1px solid var(–bd);border-radius:var(–r);padding:12px 14px;} .imc-wi-lv-nm{font-size:11px;font-weight:600;color:var(–mu);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px;} .imc-wi-lv-bs{font-size:10px;color:var(–hi);margin-bottom:8px;} .imc-cmp-wrap{background:var(–cs);border:1px solid var(–bd);border-radius:var(–rl);overflow:hidden;margin-bottom:1.25rem;} .imc-cmp-hdr{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.5fr) minmax(0,1.5fr) minmax(0,1.2fr);background:var(–cs2);padding:8px 14px;gap:8px;border-bottom:1px solid var(–bd);} .imc-cmp-hdr span{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(–mu);} .imc-cmp-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.5fr) minmax(0,1.5fr) minmax(0,1.2fr);padding:8px 14px;border-bottom:1px solid var(–bd);gap:8px;align-items:center;} .imc-cmp-row:last-child{border-bottom:none;background:var(–bl-l);} .imc-cmp-nm{font-size:12px;color:var(–mu);display:flex;align-items:center;gap:6px;} .imc-cmp-d{width:8px;height:8px;border-radius:50%;flex-shrink:0;} .imc-cmp-v{font-family:var(–mn);font-size:12px;font-weight:600;color:var(–tx);} .imc-cmp-dl{font-family:var(–mn);font-size:12px;font-weight:700;} .imc-cmp-dl.pos{color:var(–gn);} .imc-cmp-dl.neg{color:var(–re);} .imc-alerts{display:flex;flex-direction:column;gap:8px;} .imc-alert{display:flex;gap:10px;align-items:flex-start;padding:10px 14px;border-radius:var(–r);font-size:12px;line-height:1.6;border-left:3px solid transparent;} .imc-alert.ao{background:var(–gn-l);border-left-color:#22c55e;color:var(–gn-t);} .imc-alert.aw{background:var(–am-l);border-left-color:#f59e0b;color:var(–am-t);} .imc-alert.ae{background:var(–re-l);border-left-color:#ef4444;color:var(–re-t);} .imc-alert.ai{background:var(–bl-l);border-left-color:var(–bl);color:var(–bl-t);} .imc-alert.at{background:var(–te-l);border-left-color:#0d9488;color:var(–te-t);} .imc-alert-ico{font-size:13px;flex-shrink:0;margin-top:1px;font-weight:700;}
COST BREAKDOWN v2

Unit Cost Breakdown & What-If Analyzer

live
Material & product
Part weight (g)
g
Runner weight (g/shot)
g
Total per shot, shared across all cavities
Material price (USD/kg)
$/kg
Regrind recovery (%)
60%
Runner recovered at 60% of virgin price
Machine & process
Machine rate (USD/hr)
$/hr
Labor rate (USD/hr)
$/hr
Set 0 for fully automated cell
Cycle time (s/shot)
s
Number of cavities
cav
Quality & overhead
Scrap / defect rate (%)
2.0%
World-class: <0.5% · Typical: 1–3% · Poor: >5%
Overhead / admin rate (%)
18%
Covers facility, utilities, admin on top of variable costs
Mold amortization (USD/pc)
$/pc
Mold cost ÷ lifetime parts. Set 0 to exclude.
Unit cost per good part
0.2543USD/pc
Cost / 1K pcs
$254
Output
4/shot
Pcs/hr
514
Mat% of total
22%
Cost composition — proportional waterfall
Optimization opportunities — ranked by cost impact
Cycle time
Base: 28s
28s
Cavities
Base: 4
4
Part weight
Base: 25g
25g
Material price
Base: $2.20/kg
$2.2
Scrap rate
Base: 2.0%
2.0%
Machine rate
Base: $65/hr
$65
/* FIX 4: 增加防御性分号 ;(function(){…})(); 防止 WP 插件压缩合并时抛错 */ ;(function(){ ‘use strict’;/* 增加防冲突寻址:如果同一页面被 Gutenberg 插入了多次,确保只取当前容器内的节点 */ var wrap = document.getElementById(‘imc-root’) || document; function el(id){ return wrap.querySelector(‘#’+id) || document.getElementById(id); }var st={pwt:25,rwt:8,mp:2.20,reg:60,mr:65,lr:8,ct:28,cav:4,scr:2.0,oh:18,mold:0.015}; var wi={ct:28,cav:4,pwt:25,mp:2.2,scr:2.0,mr:65}; var wiOn=false;var COMPS=[ {id:’mat’, name:’Material’, hex:’#3b82f6′}, {id:’mach’, name:’Machine time’, hex:’#7c3aed’}, {id:’labor’,name:’Labor’, hex:’#0d9488′}, {id:’scrap’,name:’Scrap loss’, hex:’#ef4444′}, {id:’oh’, name:’Overhead’, hex:’#d97706′}, {id:’mold’, name:’Mold amor.’, hex:’#6b7280′} ];function calcCosts(p){ var cav=Math.max(p.cav,1); var runnerPc=p.rwt/cav; var mat=(p.pwt/1000)*p.mp+(runnerPc/1000)*p.mp*(1-p.reg/100); var mach=(p.mr/3600)*(p.ct/cav); var labor=(p.lr/3600)*(p.ct/cav); var scrF=p.scr>=100?999:p.scr/100/Math.max(1-p.scr/100,0.001); var varBase=mat+mach+labor; var scrap=varBase*scrF; var oh=(varBase+scrap)*(p.oh/100); var mold=p.mold||0; var total=varBase+scrap+oh+mold; return{mat:mat,mach:mach,labor:labor,scrap:scrap,oh:oh,mold:mold,total:total,varBase:varBase}; }function fmtC(n){ if(n<0.01)return '$'+n.toFixed(5); if(n<0.1)return '$'+n.toFixed(4); if(n<1)return '$'+n.toFixed(4); return '$'+n.toFixed(3); } function fmtD(n){ var abs=Math.abs(n); var s=(n<0?'-':'+'); if(abs<0.00001)return '—'; return s+(abs*100).toFixed(3)+'c'; }function drawWaterfall(costs,wiCosts){ var svg=el('imcWfSvg'); if(!svg)return; var W=800,H=88,pL=4,pT=22,pB=20,gap=2; var cW=W-pL*2; var barH=H-pT-pB; var total=costs.total||1; var html=''; var x=pL; for(var i=0;i<COMPS.length;i++){ var c=COMPS[i]; var v=costs[c.id]; if(v<=0)continue; var w=Math.max(v/total*cW-gap,6); var cx=(x+w/2).toFixed(1); html+='’; if(w>30){ var pv=Math.round(v/total*100); html+=”+pv+’%’; } html+=”+c.name.split(‘ ‘)[0]+”; if(wiOn&&wiCosts){ var wv=wiCosts[c.id]; var ww=Math.max(wv/total*cW-gap,6); if(Math.abs(ww-w)>2){ var barCol=ww<w?'#22c55e':'#ef4444'; html+='’; } } var lx=(x+w/2).toFixed(1); html+=”+fmtC(v)+”; x+=w+gap; } svg.innerHTML=html; }function renderComps(costs,wiCosts){ var total=costs.total||1; var ranked=COMPS.slice().sort(function(a,b){return costs[b.id]-costs[a.id];}); var html=”; for(var i=0;i<COMPS.length;i++){ var c=COMPS[i]; var v=costs[c.id]; var pct=Math.round(v/total*100); var rank=1; for(var j=0;j<ranked.length;j++){if(ranked[j].id===c.id){rank=j+1;break;}} var rankBg='',rankColor='var(–hi)'; if(rank===1){rankBg=c.hex;rankColor='#fff';} else if(rank0.000001){ var dcls=d<0?'dn':'up'; var arrow=d<0?'↓':'↑'; deltaHtml='
‘+arrow+’ ‘+(Math.abs(d)*100).toFixed(3)+’¢
‘; } } html+=’
‘ +’
‘ +’
‘ +’
‘ +’‘+c.name+’‘ +’#’+rank+’‘ +’
‘ +’
‘+fmtC(v)+’
‘ +’
‘+pct+’% of total
‘ +deltaHtml +’
‘; } el(‘imcComps’).innerHTML=html; }function renderOpps(costs){ var ranked=COMPS.slice().filter(function(c){return costs[c.id]>0.000001;}) .sort(function(a,b){return costs[b.id]-costs[a.id];}); var actions={ mat:[‘Reduce part weight or resin cost’,’Each gram off saves ‘+(costs.mat/st.pwt*100).toFixed(3)+’c/pc. Run wall thickness audit or switch to an equivalent-MFI grade with lower price.’], mach:[‘Reduce cycle time or increase cavity count’,’Rule of thumb: -10% cycle = -10% machine cost. Adding cavities divides press time per part — assess tooling ROI.’], labor:[‘Automate or share operator across presses’,’Take-out robot typically pays back in under 18 months at this labor rate. One operator across two presses halves this cost line.’], scrap:[‘Improve first-pass yield’,’Each 1pp reduction saves ‘+(costs.varBase*0.01/(1-Math.min(st.scr/100,0.99))*100).toFixed(2)+’c/pc. Prioritize SPC on top-3 defect modes.’], oh:[‘Increase throughput to dilute fixed overhead’,’Overhead per unit drops as volume rises. Doubling annual output can reduce this line by 30-40%.’], mold:[‘Extend mold life to amortize over more parts’,’Preventive maintenance every 100K shots typically adds 20-30% to mold service life.’] }; var html=”; for(var i=0;i<Math.min(ranked.length,4);i++){ var c=ranked[i]; var act=actions[c.id]; if(!act)continue; var save10=fmtC(costs[c.id]*0.10); html+='
‘ +’#’+(i+1)+’‘ +’
‘ +’
‘ +’
‘+act[0]+’ (‘+c.name+’)
‘ +’
‘+act[1]+’
‘ +’
‘ +’
‘+save10+’/pc
per 10% cut
‘ +’
‘; } el(‘imcOpps’).innerHTML=html; }function renderCmpTable(base,wiC){ var cmpEl=el(‘imcCmpTable’); if(!wiOn||!wiC){cmpEl.innerHTML=”;return;} var html=’
ComponentBaseWhat-ifDelta
‘; for(var i=0;i<COMPS.length;i++){ var c=COMPS[i]; var b=base[c.id],w=wiC[c.id],d=w-b; var dcls=d0.000001?’neg’:”; html+=’
‘ +’
‘+c.name+’
‘ +’
‘+fmtC(b)+’
‘ +’
‘+fmtC(w)+’
‘ +’
‘+fmtD(d)+’
‘ +’
‘; } var bd=base.total,wd=wiC.total,dd=wd-bd; var dcls2=dd0.000001?’neg’:”; html+=’
‘ +’
TOTAL
‘ +’
‘+fmtC(bd)+’
‘ +’
‘+fmtC(wd)+’
‘ +’
‘+fmtD(dd)+’
‘ +’
‘; cmpEl.innerHTML=html; }function render(){ var costs=calcCosts(st); var wiP=wiOn?{pwt:wi.pwt,rwt:st.rwt,mp:wi.mp,reg:st.reg,mr:wi.mr,lr:st.lr,ct:wi.ct,cav:wi.cav,scr:wi.scr,oh:st.oh,mold:st.mold}:null; var wiC=wiP?calcCosts(wiP):null;el(‘imcTotal’).textContent=costs.total.toFixed(4); el(‘imcPer1k’).textContent=’$’+Math.round(costs.total*1000).toLocaleString(); var pph=Math.round(Math.max(st.cav,1)*3600/Math.max(st.ct,1)); el(‘imcOut’).textContent=Math.max(st.cav,1)+’/shot’; el(‘imcPph’).textContent=pph.toLocaleString(); el(‘imcMatPct’).textContent=Math.round(costs.mat/costs.total*100)+’%’;drawWaterfall(costs,wiC); renderComps(costs,wiC); renderOpps(costs); renderCmpTable(costs,wiC);var alerts=[]; var matPct=costs.mat/costs.total*100; var machPct=costs.mach/costs.total*100; if(matPct>55)alerts.push({c:’ai’,i:’i’,m:’Material is ‘+Math.round(matPct)+’% of unit cost. A 10% weight reduction saves ‘+fmtC(costs.mat*0.10)+’/pc — run a wall-thickness audit first.’}); if(machPct>45)alerts.push({c:’aw’,i:’!’,m:’Machine time dominates at ‘+Math.round(machPct)+’%. Cycle reduction or higher cavity count will have the best ROI at $’+st.mr+’/hr.’}); if(st.scr>5)alerts.push({c:’ae’,i:’X’,m:’Scrap rate ‘+st.scr+’% is high — investigate top defect modes before using this as a quoted cost basis.’}); if(st.cavcosts.mat)alerts.push({c:’at’,i:’i’,m:’Single cavity: machine cost exceeds material cost. A 2-cavity tool would halve machine cost per part.’}); if(st.mold>0&&st.mold/costs.total>0.15)alerts.push({c:’aw’,i:’!’,m:’Mold amortization is ‘+Math.round(st.mold/costs.total*100)+’% of unit cost — volume is low. Consider a prototype tool or increase run quantities.’}); if(wiOn&&wiC){ var d=wiC.total-costs.total; if(Math.abs(d)>0.000001){ var yr1M=Math.round(Math.abs(d)*1000000); var cls=d<0?'ao':'aw'; alerts.push({c:cls,i:d<0?'$':'!',m:'What-if '+(d<0?'reduces':'increases')+' unit cost by '+(Math.abs(d)*100).toFixed(3)+'¢/pc ('+Math.round(Math.abs(d)/costs.total*100)+'%). At 1M pcs/year: $'+yr1M.toLocaleString()+'/yr.'}); } } if(alerts.length===0)alerts.push({c:'ao',i:'OK',m:'Parameters look balanced. Use the What-if toggle to model improvement scenarios.'}); var aHtml=''; for(var i=0;i<alerts.length;i++){ aHtml+='
‘+alerts[i].i+’‘+alerts[i].m+’
‘; } el(‘imcAlerts’).innerHTML=aHtml; el(‘imcTs’).textContent=’updated ‘+new Date().toLocaleTimeString([],{hour:’2-digit’,minute:’2-digit’,second:’2-digit’}); }function syncWi(){ el(‘wiCt’).value=st.ct; el(‘wiCtOut’).textContent=st.ct+’s’; wi.ct=st.ct; el(‘wiCtBase’).textContent=’Base: ‘+st.ct+’s’; el(‘wiCav’).value=st.cav; el(‘wiCavOut’).textContent=st.cav; wi.cav=st.cav; el(‘wiCavBase’).textContent=’Base: ‘+st.cav; el(‘wiPwt’).value=st.pwt; el(‘wiPwtOut’).textContent=st.pwt+’g’; wi.pwt=st.pwt; el(‘wiPwtBase’).textContent=’Base: ‘+st.pwt+’g’; el(‘wiMp’).value=st.mp; el(‘wiMpOut’).textContent=’$’+st.mp; wi.mp=st.mp; el(‘wiMpBase’).textContent=’Base: $’+st.mp+’/kg’; el(‘wiScr’).value=st.scr; el(‘wiScrOut’).textContent=st.scr+’%’; wi.scr=st.scr; el(‘wiScrBase’).textContent=’Base: ‘+st.scr+’%’; el(‘wiMr’).value=st.mr; el(‘wiMrOut’).textContent=’$’+st.mr; wi.mr=st.mr; el(‘wiMrBase’).textContent=’Base: $’+st.mr+’/hr’; } function updateWiBases(){ el(‘wiCtBase’).textContent=’Base: ‘+st.ct+’s’; el(‘wiCavBase’).textContent=’Base: ‘+st.cav; el(‘wiPwtBase’).textContent=’Base: ‘+st.pwt+’g’; el(‘wiMpBase’).textContent=’Base: $’+st.mp+’/kg’; el(‘wiScrBase’).textContent=’Base: ‘+st.scr+’%’; el(‘wiMrBase’).textContent=’Base: $’+st.mr+’/hr’; }var numFields=[ {id:’imcPwt’,key:’pwt’},{id:’imcRwt’,key:’rwt’},{id:’imcMp’,key:’mp’}, {id:’imcMr’,key:’mr’},{id:’imcLr’,key:’lr’},{id:’imcCt’,key:’ct’}, {id:’imcCav’,key:’cav’},{id:’imcMold’,key:’mold’} ]; for(var ni=0;ni<numFields.length;ni++){ (function(f){ var inp=el(f.id); if(!inp)return; inp.addEventListener('input',function(e){ var v=parseFloat(e.target.value); if(isNaN(v)||v<0)return; st[f.key]=v; if(wiOn)updateWiBases(); render(); }); })(numFields[ni]); }if(el('imcReg')){ el('imcReg').addEventListener('input',function(e){ st.reg=parseFloat(e.target.value); el('imcRegOut').textContent=st.reg+'%'; el('imcRegHint').textContent='Runner recovered at '+st.reg+'% of virgin price'; render(); }); } if(el('imcScr')){ el('imcScr').addEventListener('input',function(e){ st.scr=parseFloat(e.target.value); el('imcScrOut').textContent=st.scr.toFixed(1)+'%'; if(wiOn)updateWiBases(); render(); }); } if(el('imcOh')){ el('imcOh').addEventListener('input',function(e){ st.oh=parseFloat(e.target.value); el('imcOhOut').textContent=st.oh+'%'; render(); }); }var qbs=wrap.querySelectorAll('.imc-qb'); for(var qi=0;qi<qbs.length;qi++){ (function(b){ b.addEventListener('click',function(){ var t=b.dataset.t,v=parseFloat(b.dataset.v); if(isNaN(v))return; st[t]=v; var inp=el('imc'+t.charAt(0).toUpperCase()+t.slice(1)); if(inp)inp.value=v; if(wiOn)updateWiBases(); render(); }); })(qbs[qi]); }if(el('imcWiBtn')){ el('imcWiBtn').addEventListener('click',function(){ wiOn=!wiOn; this.classList.toggle('on',wiOn); el('imcWiPanel').classList.toggle('show',wiOn); if(wiOn)syncWi(); render(); }); }var wiDefs=[ {id:'wiCt',key:'ct',out:'wiCtOut',fmt:function(v){return v+'s';}}, {id:'wiCav',key:'cav',out:'wiCavOut',fmt:function(v){return ''+v;}}, {id:'wiPwt',key:'pwt',out:'wiPwtOut',fmt:function(v){return v+'g';}}, {id:'wiMp',key:'mp',out:'wiMpOut',fmt:function(v){return '$'+v;}}, {id:'wiScr',key:'scr',out:'wiScrOut',fmt:function(v){return v+'%';}}, {id:'wiMr',key:'mr',out:'wiMrOut',fmt:function(v){return '$'+v;}} ]; for(var wi2=0;wi2<wiDefs.length;wi2++){ (function(d){ var inp=el(d.id); if(!inp)return; inp.addEventListener('input',function(e){ wi[d.key]=parseFloat(e.target.value); el(d.out).textContent=d.fmt(wi[d.key]); render(); }); })(wiDefs[wi2]); }render(); })();
Steven Cheng
Steven Cheng
Articles: 169