Документация
Создайте собственную производственную программу
Сохраните реальную деталь, оцените ее производственную работу, проверьте опубликованные доказательства отсутствия ошибок и сохраните документ, который можно будет проверить еще раз.
Автоматически переведено с английского. Смотреть оригинал на английском
Знайте, какой результат вы запрашиваете
Собственное производство — это детерминированные вычисления CAD/CAM, независимые от языковой модели. POST /api/toolpaths/manufacture принимает явный снимок САПР, подготавливает производственные ресурсы, планирует или принимает заказанные операции, вычисляет данные резания, генерирует траектории движения инструмента, публикует одну программу ЧПУ и независимо воспроизводит этот текст. Ответ включает доказательства, подтверждающие уровень выпуска.
Эта конечная точка не создает чертеж, не сохраняет траекторию инструмента и не обновляет редактор. Успешный ответ — это ценность, которую необходимо тщательно проверять и упорствовать. Это отличается от /api/toolpaths/generate, который адаптирует настройки генератора приложений для вывода на фрезерный/токарный станок/принтер, а также из /api/toolpaths/verify, который воспроизводит поставляемую ЧПУ/программу с явно смоделированной заготовкой и инструментом.
Используйте конечные точки обработки для схем запроса/ответа, Справочник по САМ для основных представлений и сохраненная ссылка на программу за настойчивое поведение. Следующее задание намеренно достаточно маленькое, чтобы его можно было воспроизвести и проверить без редактирования существующего проекта.
Отправьте полный, проверенный снимок
Сохраните этот JSON как native-job.json. Он описывает заготовку из ПОМ размером 40 × 40 × 10 мм с центром (20, 20, 5), окруженную заготовкой 2 мм с каждой стороны X/Y и 1 мм сверху. Полезная нагрузка была расшифрована реальным CamKernelRequest схема и оценивается ядром; его базовый результат содержит три запланированные операции. Всегда проверяйте возвращенные утверждения, а не жестко запрограммируйте ожидаемый выпуск в клиенте.
{
"schemaVersion": 1,
"id": "blank-job",
"name": "POM blank",
"material": "POM",
"elements": [{
"id": "blank",
"type": "cube",
"x": 20, "y": 20, "z": 5,
"width": 40, "height": 40, "depth": 10
}],
"stock": { "x": 20, "y": 20, "width": 44, "height": 44, "depth": 11 },
"resolution": 0.5
} curl --fail-with-body \
-H "Authorization: Bearer $CADCAMFUN_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @native-job.json \
"$CADCAMFUN_URL/api/toolpaths/manufacture" > native-result.json Файл оболочки записывает точный ответ для проверки. Предоставление одного и того же перехваченного запроса дает детерминированный собственный вывод; использование новой позиции детали, фрезы, операции или контроля качества — это другая работа. Метки идентификации запроса полезны для отслеживания, но дайджесты артефакта связывают его фактический источник и содержимое NC.
Определение координат запаса и работы
Для моментального снимка используется центр X/Y и полная ширина/высота/глубина. Адаптер снимков сначала строит геометрию выбранной детали, находит ее наименьшую Z и помещает туда нижнюю часть заготовки; его верх — это дно плюс заявленная глубина. В этом примере деталь простирается от Z0 до Z10, а заготовка от Z0 до Z11. Границы запаса в X/Y составляют от −2 до 42.
Адаптер использует явные размеры для этих границ. При этом снова не добавляется допуск к отображению инвентарной записи, и topZ поле не заменяет привязку нижней части в этом собственном адаптере моментальных снимков. Сохраняйте различие между метаданными редактора и полями, которые фактически используются для создания производственного задания.
По умолчанию источником работы является stock-center: складской центр X/Y на вершине Z. stock-corner выбирает минимум X/Y на той же вершине. Геометрия входной операции находится в миллиметрах мира САПР, а результирующие перемещения программы/NC находятся в рабочих координатах. Обычное резание идет ниже работы Z0. workOffset является необязательным; программа по умолчанию — G54.
Без поставляемого материала подготовка задания на нижнем уровне ограничивает границы детали с дополнительными 2 мм с каждой стороны X/Y и 1 мм сверху. Часть, находящаяся за пределами явного запаса, отклоняется; Увеличение требуемой глубины резания не приводит к тому, что деталь будет содержаться в несовместимом материале.
Выберите материал, станок и фрезы.
Материал — это строка поиска, разрешенная по библиотеке материалов ядра, включая поддерживаемые идентификаторы, имена и псевдонимы. Неизвестный материал возвращает напечатанный выпуск подготовки. Дополнительный компьютер моментального снимка HTTP имеет зарегистрированный предустановленный идентификатор: vmc-standard, haas-vf2, hsc-mill, Desktop-mill или cnc-router. Если его не использовать, используется стандарт vmc. Предварительные настройки описывают типичные классы и ограничения машин, а не квалифицированную модель отдельной установки.
При отсутствии инструментов используется набор резаков по умолчанию. Поставка инструментов заменяет эту кроватку и требует 1–200 записей о фрезах. Фреза идентифицирует свой тип, диаметр, количество канавок, материал/покрытие, длину канавки, диаметр хвостовика и вылет. Дополнительные размеры держателя, максимальная частота вращения, количество карманов и геометрия для конкретного типа улучшают качество изготовления и зазор. Флейты должны быть целыми числами от 1 до 24; явные карманные номера: 1–999.
Идентификаторы рабочих инструментов должны называть фрезы в поставляемой библиотеке. Дублирующиеся идентификаторы фрез, недопустимые размеры и недостижимые комбинации стратегии/инструмента создают проблемы, а не угаданные замены. Схема допускает плоские, шариковые, бычьи, фасочные, точечные, сверлильные, торцевые, резьбовые и граверные виды.
Строка компьютера общедоступного моментального снимка не принимает пользовательскую запись компьютера. Интеграция кода, вызывающая нижний уровень ManufacturingJob API может явно указывать ограничения станка, ход и геометрию стола. Не отправляйте эту запись, если схема HTTP ожидает заданную строку.
Планируйте автоматически или указывайте порядок обработки
Когда операции отсутствуют, планировщик извлекает их из детали. Массив явных операций — это авторитетный порядок обработки, а не список предложений, которые нужно переупорядочить автоматически. Каждая операция имеет уникальный идентификатор и ссылку на инструмент. Поддерживаемые записи стратегии охватывают обработку торцов, адаптивных операций, карманов, профилей, отверстий, сверлений, резьб, гравировок, фасок и поверхностей с геометрией, соответствующей каждой из них.
В профиле используется цикл, внутренняя/внешняя сторона и мировая координата сверху/снизу. Карманный/адаптивный крой использует закрытую границу с дополнительными островными кольцами. При сверлении используются точки плюс верх/низ. Запись резьбовой фрезы включает центр, диаметр, шаг, внутренний флажок, вершину и длину. Запись поверхности выбирает черновой режим, параллельность, ватерлинию или крутой-мелкий режим; ссылка на остаток должна указывать на соответствующую предыдущую работу.
Коррекция процесса для каждой операции может включать в себя частоту вращения, подачу, врезную подачу, ступенчатое понижение, пошаговое перемещение, подачу СОЖ и радиальное зацепление. Отсутствующие значения берутся из данных резки материала/фрезы/станка. Шаг — это процент от 1 до 100; шаг понижения и подачи положительны. Артефакт записывает переопределенные поля отдельно от вычисленных параметров, чтобы проверяющий мог видеть, откуда взялся выбор процесса.
Нативное ядро хранит временные запасы между операциями и один раз публикует их объединенный IR. Напротив, combineCamOperations для сохраненных разделов типовых операций объединяется уже созданный текст ЧПУ; он не преобразует эти разделы в интегрированную программу-контроллер. Используйте собственный артефакт, когда требуется интегрированное создание и воспроизведение.
Установите контроль качества и поймите его стоимость
| Вход | Значение и границы |
|---|---|
finishAllowance | 0–5 припуск на черновую обработку, мм; опущено, используется материал по умолчанию. |
scallop | Положительный, не более 1 мм; по умолчанию 0.01 мм для исходной чистовой обработки. |
tolerance | Положительная толерантность пути; исходное значение по умолчанию 0.01 мм. |
resolution | Положительный размер ячейки воспроизведения; контролирует пространственное разрешение фондовых доказательств. |
deburr | Положительный, не более 5 мм; просит планировщика добавить поддерживаемую работу по фаске верхней кромки. |
subprograms | Необязательная трансляция-повторение, если диалект поддерживает это, например, подпрограммы Fanuc/Haas M98. |
Запрос поддерживает элементы САПР 1–2,000 и не более 500 явных операций. Меньшие допуски и ячейки воспроизведения увеличивают вычислительную работу и не доказывают автоматически неподдерживаемую геометрию. Сохраните полученное разрешение вместе с результатом. Сетка видового экрана и предварительный просмотр исходного материала с пониженной дискретизацией — это результаты отображения, а не независимая более тонкая симуляция.
Встроенная проводка устанавливает номера инструментов из назначений фрез и требует отвода перед заменой инструмента. Координаты формата сообщений с фиксированными десятичными знаками. Проверьте фактический NC и выбранный диалект; имя контроллера не устраняет необходимости проверять поведение установки после установки.
Интерпретация статуса, претензий и выпуска
Результатом является объединение: status: "failed" с проблемами или status: "ok" с артефактом. Нормальный артефакт все еще может иметь release: "blocked". Прочтите оба слоя; проверка статуса HTTP или только внешнего статуса недостаточна.
Артефакт сохраняет упорядоченные результаты операций, данные резания, программу IR, использованные фрезы, ЧПУ, статистику запасов, оценки времени цикла, проблемы и идентификационные дайджесты. Заявки имеют статус «пройдено», «не выполнено», «неподдерживаемо» или «неразрешено». Они охватывают режимы резания, пределы станка, завершение операции, зазор между быстродействующим устройством и держателем, строжку, удаление материала, независимое воспроизведение ЧПУ, перемещение станка и зазор между станком и столом.
Проблемы с серьезными ошибками или освобождение пустого блока ЧПУ. При отсутствии серьезных сбоев неполные доказательства обеспечивают предварительный просмотр, если не соблюдается правило выпуска. Текущее правило допускает неподдерживаемое заявление о перемещении машины, при этом возвращая проверенную программу; не все встроенные предустановки обеспечивают явное перемещение оси. Проверьте это утверждение, решая, распространяется ли результат на конкретную машину.
Доказательства имеют границы модели
Собственный повтор приклада/держателя представляет собой трехосную проверку поля высоты. Публичный собственный снимок не имеет поля огибающей фиксации. Автономная проверка принимает конверты приборов, но они не добавляются к исходным доказательствам косвенно. Этикетка проверенной программы является свидетельством ее зарегистрированной модели и проверок, а не сертификатом машины.
Результаты ядра идентифицируют своего производителя: идентификатор алгоритма cadcamfun-cam-kernel@1 и версия схемы контракта 1 (packages/core/src/cam/kernel/execute.ts, contracts.ts). Сравните оба варианта, чтобы решить, произошли ли сохраненные доказательства из одного и того же ядра.
Создайте переносимый документ на основе точного результата
A CamProgramDocument сохраняет ЧПУ, программу, настройки генератора/принтера, материал и снимок чертежа. Необязательный kernelRequest/kernelArtifact сохраняет свидетельства собственного источника. В этом примере захваченный запрос и результат преобразуются в этот документ без его сохранения; запустите его в рабочей области в зависимости от ядра, API и эффекта, например приложений/сопровождения.
import { Schema } from "effect"
import { cam } from "@cadcamfun/core"
import { CamKernelRequest, CamKernelResult, CamProgramDocument } from "@cadcamfun/api"
const request = Schema.decodeUnknownSync(CamKernelRequest)(await Bun.file("native-job.json").json())
const result = Schema.decodeUnknownSync(CamKernelResult)(await Bun.file("native-result.json").json())
if (result.status !== "ok" || result.value.release === "blocked") {
throw new Error("The captured job has no releasable artifact")
}
const document = Schema.decodeUnknownSync(CamProgramDocument)({
format: "cadcamfun-cam", version: 1,
gcode: result.value.nc, program: result.value.program,
settings: cam.generator.DEFAULT_SETTINGS,
printer: cam.generator.DEFAULT_PRINTER_EXTRAS,
stock: request.stock,
drawing: { elements: request.elements, stock: request.stock },
kernelRequest: request, kernelArtifact: result.value
})
await Bun.write("portable-program.json", JSON.stringify(document, null, 2)) В примере требуется явный запас, как и в предоставленном минимальном запросе. Его общие настройки редактора повторно открывают элементы управления, а захваченный kernelRequest является собственным источником истины. Сохраняйте все фактические настройки редактора при захвате из рабочей области приложения.
Сохранение против реального рисунка
Сохраните документ отдельно через POST /api/drawings/:id/toolpaths, с именем, G-кодом и данными, содержащими полный переносимый документ. Используйте реальный идентификатор чертежа, доступный вызывающему абоненту. Для переносимых сохранений требуется доступ на запись от владельца проекта или организации, АДМИНИСТРА/МЕНЕДЖЕРА; само по себе успешное вычисление не дает разрешения на сохранение.
Сопутствующий модуль декодирует документ, проверяет, соответствует ли NC строки документу, и повторно запускает захваченный запрос ядра, прежде чем доверять новому собственному артефакту. Он сравнивает полученный артефакт, программу и исходное ЧПУ. Отредактированные доказательства, заблокированный повтор или противоречивые байты отклоняются. Поля проверки/sourceRevision, предоставленные клиентом, не устанавливают доверие.
Когда выбранные элементы и заготовка соответствуют соответствующему чертежу, служба создает дайджест редакции чертежа. В сохраненном исходном артефакте эта редакция может отсутствовать, если исходный код не соответствует текущему чертежу. Держите это различие на виду: действительные захваченные выходные данные не обязательно являются свежими выходными данными для последней сохраненной модели.
Видеть конечные точки сохранения траектории инструмента и точный анализ CAD при сборке более богатого потока захвата/сохранения. Избегайте варианта траектории проекта, если не предполагается его отдельный контракт параметров запроса.
Регенерация после изменений и диагностика отторжения
Изменение геометрии, заготовки, происхождения, инструментов, материала, станка, порядка операций или ЧПУ изменяет взаимосвязь свидетельств. Восстановить обновленный захваченный запрос. Простое NC-редактирование может оставаться полезным обычным текстом, но оно не должно содержать более ранний собственный артефакт в качестве доказательства наличия новых байтов. Служба сохранения удаляет несовместимые собственные метаданные или отклоняет несовместимый новый документ.
Неизвестная предустановка машины — это ошибка проверки адаптера. Неизвестный материал/инструмент, недопустимое размещение заготовки, пустая геометрия и неподдерживаемая обработка создают проблемы при подготовке/планировании. Строжка, быстрая задержка, столкновение держателя и стола и точка несоответствия воспроизведения для создания движения/доказательства. Прежде чем менять элементы управления процессом, найдите идентификатор операции, этап, строку и точку в проблеме.
Исходная полезная нагрузка может пройти декодирование схемы JSON, но по-прежнему не сможет создать допустимое задание. И наоборот, артефакт может существовать с заблокированным выпуском. Сохраняйте исходную пару запрос/результат при диагностике любого состояния, а не перезаписывайте ее спекулятивным изменением настроек.
Происхождение реализации: packages/api/src/cam-kernel.ts, cam-program.ts, основной cam/kernel/snapshot.ts, execute.ts, schema.tsи сайдкар services/cam-program.ts. Целенаправленные доказательные тесты – это packages/core/src/cam/kernel/kernel.test.ts и apps/sidecar/test/cam-program.test.ts.
Просмотрите результат примера
Без operations в массиве планировщик выбрал три операции из набора фрез по умолчанию, каждая со своей сменой инструмента. Заголовок NC суммирует их перед любым движением:
%
O1000
(PROGRAM: POM BLANK)
(UNITS: MM)
(WORK OFFSET: G54)
(MACHINE: VERTICAL MACHINING CENTRE BT40, 12 000 RPM, 11 KW)
(MATERIAL: ACETAL POM-C DELRIN)
(STOCK: 44.00 X 44.00 X 11.00 MM)
(OP 1: FACE STOCK TOP | T1 [FACEMILL-50] | S1810 | F815-1629)
(OP 2: 3D ADAPTIVE ROUGHING | T2 [FLAT-16] | S7160 | F2848-5696)
(OP 3: 3D STEEP AND SHALLOW FINISHING | T3 [BALL-10] | S12000 | F1642-3283)
G21 G90 G17 G94 G40 G49 G80
G54
(OPERATION: FACE STOCK TOP)
T1 M6
G43 H1
M3 S1810
(OP1 FACE)
(FACE: FACE STOCK TOP)
G0 X-48.000 Y-22.000 Z10.000
Z5.000
Z2.000
Z1.000
G1 Z-1.000 F815
X48.000 F1629
Y0.000
X-48.000
Y22.000
X48.000
G0 Z2.000 Программа заканчивается G0 Z10.000, M5, M30 и %. Общая длина: 3071 строк. Поскольку машина не была предоставлена, vmc-standard применен пресет, чей пост fanuc: отсюда %/O1000 обрамление, T1 M6 смена инструментов и G43 H1 компенсация длины.
Чтение данных резки операции
Каждая операция несет в себе cutting запись, показывающая, как были получены его скорости и подачи. Это значения для черновой операции, описанной выше:
| Поле | Ценить | Значение |
|---|---|---|
rpm | 7160 | Скорость шпинделя от Vc и эффективный диаметр |
vc / vcRecommended | 359.9 / 360 м/мин | Достигнутая и рекомендуемая скорость над поверхностью |
fz | 0.199 мм | Подача на зуб после коррекции утончения стружки |
chipThickness | 0.159 мм | Итоговая средняя толщина стружки |
feed / plungeFeed | 5696 / 2848 мм/мин | Резка и врезная подача |
ap / ae | 10 / 3.2 мм | Осевая глубина и радиальное зацепление (20 % шага) |
rampAngle / helixPitch | 5° / 4.398 мм | Геометрия входа |
mrr | 182.258 см³/мин | Скорость съема материала |
powerKw / torqueNm / forceN | 1.862 / 1.986 / 248 | Расчетная нагрузка, сверенная с ограничениями машины |
deflectionMm | 0.0157 мм | Расчетное отклонение инструмента |
limitedBy, warnings, exceeded | пустой | Какой лимит ограничивает значение; здесь ничего не делалось |
source reads: "Acetal POM-C (Delrin) (ISO N): Vc 360 m/min, fz 0.159 mm at Ø16, kc1.1 300 N/mm² mc 0.2 (handbook starting values)". The reference в блоке перечислены строки таблицы материалов, используемые столбцы и каждый умножающий коэффициент (здесь cutSpeed 1.2, diameterScale 1.326, chipThinning 1.25). Его basis указано, что это начальные значения, указанные в справочнике, а не сертифицированные данные поставщика для резака.
Начальные значения, не гарантия
Относитесь к данным резки как к обоснованной первой попытке. Перед началом производства сверяйте их с данными поставщика инструмента и станка и корректируйте каждую операцию, когда вам будет лучше: артефакт затем записывает поле в overridden.
Личность артефакта
| Поле | Пример | Хэш |
|---|---|---|
identity.job | aa2159be8c7c4228… | Каноническая работа |
identity.part | 91a5382540991195… | Геометрия детали |
identity.nc | 1614df331826682c… | Точный текст ЧПУ |
identity.algorithm | cadcamfun-cam-kernel@1 | Имя и версия ядра |
Повторный запуск того же запроса воспроизводит те же идентификаторы. Когда сайдкар сохраняет собственный артефакт, она повторно запускает захваченный запрос и сравнивает его; отредактированные изменения ЧПУ identity.nc и отвергается как доказательство.
Рецепт: сгенерируйте и сохраните из TypeScript
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
const request = JSON.parse(await Bun.file("native-job.json").text())
const result = await client.toolpathGenerator.manufacture(request)
if (result.status === "failed") throw new Error(result.issues.map((i) => i.message).join("; "))
const artifact = result.value
const failed = artifact.claims.filter((claim) => claim.status === "failed")
console.log(artifact.release, failed.map((claim) => `${claim.id}: ${claim.detail}`))
if (artifact.release === "blocked") process.exit(1)
await Bun.write("program.nc", artifact.nc) Для сохранения в виде траектории дополнительно требуется портативный cadcamfun-cam документ, построенный на основе этого артефакта, его program, захваченный запрос и снимок чертежа, как описано выше. Метод SDK принимает тот же объект JSON, что и тело HTTP, типизированный как ToolpathGeneratorManufactureInput.