Перейти к содержанию
CADCAMFUN
Документы

Документация

Ядро CAM-обработки

От производственных заданий до ЧПУ и доказательств: планирование, фрезы, воксельный материал с кронштейном остаточного объема и сертифицированные проверки коллизий.

Автоматически переведено с английского. Смотреть оригинал на английском

Что такое ядро CAM

Ядро CAM в packages/core/src/cam/kernel (Исходные файлы 20, около 5 260 строк) требуют пересмотренного производственного задания для обработки ЧПУ плюс свидетельства об этом ЧПУ. Он выбирает фрезы и режимы резания, планирует операции с помощью функций САПР, запускает стратегии, публикует G-код, воспроизводит ЧПУ независимо от объемного материала и проверяет движение сборки инструмента на предмет столкновений. Его алгоритм идентичности cadcamfun-cam-kernel@1.

МодульРоль
материалымарки заготовок с данными об их обрабатываемости
резцысборки инструментов и библиотека по умолчанию (70 фрезы)
данные резкискорости, подачи, глубины, нагрузка и отклонение фрезы в материале
планировщикВозможности САПР → упорядоченные операции своими фрезами
выполнятьподготовка/запуск: стратегии, публикация, независимый повтор NC, происхождение акций, претензии и уровень выпуска
кинематика, головаtrunnion table (AC / BC) and tilting head (B about Y)
сборка3D-инструмент в сборе (зона резания, хвостовик, державка) в виде профиля и его тела вращения
столкновениенепрерывная проверка совместного движения: сертифицировано как чистое, столкновение или неразрешенное
движениеодновременное пятиосное: локации → позы стола, каждое движение разделено и проверено
запасобъемный запас в виде вокселей с скобкой остаточного объема
машинное оформлениедержатель и хвостовик прижимаются к столу при каждом движении ЧПУ
выпуклыйточное расстояние между выпуклыми оболочками (GJK)
Точки входа (execute.ts)
export const prepareJob: (job: ManufacturingJob) => CamResult<PreparedJob>
export const executeJob: (prepared: PreparedJob) => CamResult<CamArtifact>
export const runJob: (job: ManufacturingJob) => CamResult<CamArtifact>   // prepare, then execute
export const planOnly: (job: ManufacturingJob) => CamResult<{ operations; notes; unmachined }>
export const KERNEL_ALGORITHM = "cadcamfun-cam-kernel@1"

Функциональное планирование

Планировщик упорядочивает призматическую часть так, как это делает CAM-программист, исходя из особенностей, которыми действительно обладает параметрическая история:

  1. лицом к вершине акций
  2. черновая по контурам и внутри карманов (адаптивная или контурная, с припуском на стену)
  3. зенковки, точечное сверление, сверление или винтовое растачивание, зенковки, фрезерование резьбы
  4. закончить стены
  5. сломайте верхние кромки с помощью фаски 2D, когда требуется снять заусенцы
  6. 3Черновая и чистовая обработка тел произвольной формы

Тело без истории элементов (сетка, логическое значение примитивов, скульптурная деталь) обрабатывается с помощью стратегий поверхности 3D. Планирование выбирает только инструменты и регионы; данные резки вычисляются для каждой операции во время выполнения задания. Реальная обработка заготовки из ПОМ-С 44 × 44 × 11 мм предусматривала три операции: face с фрезой-50, surface-rough с плоским-16 и surface-finish с мячом-10, выпущенным как verified-program с временем цикла 149 сек. Этот пробег нарисован родное производство.

Резцы и инструмент в сборе

The default library has 70 cutters of nine kinds: flat (Ø1–16, plus aluminium ZrN variants), ball (Ø1–10), bull nose, face mill, spot drill, chamfer mill, engraver, thread mills (P0.5–P2) and drills. A cutter's assembly is its half-section profile from the tip, split into cutting zone, shank and holder.

плоский-6 и сборкаПрофиле(плоский-6) — реальный результат
{"id":"flat-6","name":"End mill Ø6 3F carbide ALTIN","kind":"flat","diameter":6,"flutes":3,
 "material":"carbide","coating":"altin","fluteLength":15,"shankDiameter":6,"stickout":29,
 "holder":{"diameter":40,"length":50}}

{"points":[{"r":0,"z":0},{"r":3,"z":0},{"r":3,"z":15},{"r":3,"z":29},{"r":20,"z":29},{"r":20,"z":79},{"r":0,"z":79}],
 "parts":["cutting","cutting","shank","holder","holder","holder"],"length":79,"assumedHolder":false}
плоская 6 сборка по ее развертке Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Профиль сборки вращался: канавки r 3 от z 0 до 15 (янтарный), хвостовик до z 29, держатель r 20 до z 79. Наконечник в начале прорези внизу, 3 мм в верхнюю часть приклада.

Воксельный сток и скобка остаточного объема

Stock — это воксельная сетка. После набора ходов каждый воксел становится материальным, удалено конечно (весь его куб лежал внутри фрезы в некоторой выбранной позиции) или удалено возможно (его куб находился в пределах расширения фрезы: половина диагонали плюс половина расстояния между образцами). Таким образом, оставшийся объем представляет собой скобку: материал, который невозможно удалить, определенно остается, материал, который не удален наверняка, может быть оставлен. Воксель никогда не называется удаленным без закрывающего его резака выборки. Наклоненные инструменты несут свою ось на каждую вершину, поэтому при пятиосном свипировании используются одни и те же два теста.

stock.ts
export const voxelStock: (min: Vec3, max: Vec3, voxel: number) => VoxelStock   // sample step = voxel / 2
export const removeTipPath: (stock: VoxelStock, cutter: Cutter, path: ReadonlyArray<Vec3>, axes?: ReadonlyArray<Vec3>) => void
export const remainingVolume: (stock: VoxelStock) => { lower: number; upper: number }
Прорезь и кольцо глубиной 3 мм с плоскостью 6 — реальная производительность
const s = voxelStock({ x: 0, y: 0, z: -10 }, { x: 40, y: 30, z: 0 }, 0.5)
// 80 × 60 × 20 = 96 000 voxels, step 0.25
removeTipPath(s, flat6, path)          // slot y = 15, x 8→32, then the ring 8..32 × 8..22, all at z −3
remainingVolume(s)                     // {"lower":9749.5,"upper":10740}   124 ms
// stock 12 000 mm³: between 1 260 and 2 250.5 mm³ removed
Воспроизведенный материал (внешняя граница) Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Верхняя поверхность каждого столбца вокселов, которая даже не удаляется, из приведенного выше фрагмента: прорезь и кольцо вырезаны на глубину 3 мм (один провисающий воксел отображается в виде ступенек вдоль стенок).

Кронштейн сужается вместе с размером вокселя: уменьшение воксела пополам уменьшает провисающую полосу вдоль каждой стены вдвое.

Непрерывная проверка столкновений

Контроллер перемещает свои соединения линейно между двумя точками, и между ними может произойти столкновение. checkMotion checks the whole move: probes (the holder and shank, each non-cutting profile segment enclosed by a capsule) against obstacles (the table envelope and the part box). The lower bound is a Lipschitz argument: a signed distance changes by at most the displacement of the moving solid, so the move is bisected until every interval is proven clear by margin, производится выборка перекрытия или заканчивается глубина (12).

ВердиктЗначение
прозрачныйна каждом интервале нижняя граница зазора не меньше запаса
столкновениеточка отбора проб находится внутри препятствия; at говорит, где на пути (от 0 до 1)
нерешенныйне удалось доказать чистоту интервала на глубине, и не было обнаружено перекрытия
flat-6 в линейной сцене над tableBox(20, 15, −10, 200, 100, 20) — реальный результат
// rapid along X at nose z 60
{"verdict":"clear","clearance":26.875,"evaluations":2}
// plunge from nose z 60 to nose z 0
{"verdict":"collision","clearance":-10,"at":1,"evaluations":2}
// standing poses
z 60 {"verdict":"clear","clearance":46.875,"evaluations":2}
z 20 {"verdict":"clear","clearance":6.875,"evaluations":2}
z 10 {"verdict":"unresolved","clearance":-3.125,"evaluations":4097}
z  5 {"verdict":"collision","clearance":-5,"at":0,"evaluations":1}

Быстрый отчет 26.875, а не постоянный 46.875, потому что проверка перемещения подтверждает нижнюю границу: она вычитает смещение по каждому интервалу, который она не подразделяла дальше. Поза нос-z-10 показывает, почему unresolved существует: сертифицированная нижняя граница отрицательна (огибающая может перекрываться), но внутри нет точки выборки, поэтому после оценок 4 097 программа проверки сообщает, что она может доказать, а не угадывает. Конверты консервативны: капсула закрывает сегмент держателя, поэтому можно сообщить о перекрытии там, где настоящий инструмент лишь приблизился бы.

Поиск неисправностей

СимптомПричинаИсправить
статус задания не выполнен: неподдерживаемая версия схемы задания.задание создано для другой схемы ядраперестроить задание с текущей версией схемы
широкая скобка оставшегося объемавоксель слишком грубый для функцийиспользуйте воксель меньшего размера; провисание составляет примерно один воксел вдоль каждой стены
столкновение на быстрой скоростидержатель или хвостовик конверта достигает стола или его частиподнять плоскость зазора или укоротить вылет
нерешенный на длинном вращательном движенииграница Липшица слаба вдали от центра вращенияразделить ход или принять разницу, которую может доказать шашка
запланирована операция с неожиданным резакомпригодность фрезы к материалу и жесткостьпередайте библиотеку инструментов с нужным вам фрезой