.container{margin:20px auto;background:#fff;padding:20px;border-radius:8px} h2{margin-top:30px} label{display:block;margin:8px 0} input,select{padding:5px;width:200px} .rowcalc{display:flex;gap:40px;flex-wrap:wrap} .card{border:1px solid #ddd;padding:15px;border-radius:6px} .result{font-size:18px;font-weight:bold} CNC фрезерование — расчёт (техкарта) 1. Заготовка Материал Алюминий (1200 мм/мин, ap 3 мм) Сталь углеродистая (500 мм/мин, ap 1.5 мм) Сталь легированная (400 мм/мин, ap 1.2 мм) Чугун (450 мм/мин, ap 1.5 мм) Латунь (900 мм/мин, ap 2.5 мм) Медь (600 мм/мин, ap 1.5 мм) Пластик (2000 мм/мин, ap 4 мм) Текстолит (1800 мм/мин, ap 3 мм) Композиты (1500 мм/мин, ap 2 мм) Длина X (мм) Ширина Y (мм) Толщина Z (мм) Количество деталей Коэф. сложности Простая Средняя Сложная 2. Инструмент Фреза Ø (мм) 3 мм 6 мм 10 мм Подача (мм/мин) Глубина прохода ap (мм) 3. Операции Контур Карман Сверление 4. Экономика Цена станка (₽/мин) Подготовка (мин) Наценка (%) Результат Машинное время: 0 мин Себестоимость: 0 ₽ Цена для клиента: 0 ₽ Рассчитать // ТЕХНОЛОГИЧЕСКИЕ ДАННЫЕ (как в техкарте) const materials = { al: { name:'Алюминий', feed:1200, ap:3 }, steel: { name:'Сталь углерод.', feed:500, ap:1.5 }, alloy: { name:'Сталь легир.', feed:400, ap:1.2 }, castiron: { name:'Чугун', feed:450, ap:1.5 }, brass: { name:'Латунь', feed:900, ap:2.5 }, copper: { name:'Медь', feed:600, ap:1.5 }, plastic: { name:'Пластик', feed:2000, ap:4 }, textolite: { name:'Текстолит', feed:1800, ap:3 }, composite: { name:'Композиты', feed:1500, ap:2 } }; const tools = { 3: { k: 1.2 }, 6: { k: 1 }, 10:{ k: 0.8 } }; function updateMaterial(){ let m = material.value; feed.value = materials[m].feed; ap.value = materials[m].ap; } function updateTool(){ calculate(); } function calculate(){ let X=+x.value, Y=+y.value, Z=+z.value; let feedVal=+feed.value; let apVal=+ap.value; let qtyVal=+qty.value; let complexityVal=+complexity.value; let priceVal=+price.value; let setupVal=+setup.value; let marginVal=+margin.value/100; let toolK = tools[tool.value].k; let passes = Math.ceil(Z / apVal); let time = 0; if(contour.checked){ let path = (X+Y)*2; time += (path/feedVal)*passes; } if(pocket.checked){ let area = X*Y; time += (area/(feedVal*toolK))*passes*0.002; } if(drill.checked){ time += 0.5 * 4; // 4 отверстия по 0.5 мин } time = (time * complexityVal * qtyVal) + setupVal; let cost = time * priceVal; let total = cost * (1 + marginVal); document.getElementById('time').innerText = time.toFixed(1); document.getElementById('cost').innerText = cost.toFixed(0); document.getElementById('total').innerText = total.toFixed(0); } updateMaterial();