Одиннадцать шагов: завести станок, описать его оси, привязать к железу, написать программу обработки и прогнать её — сначала на виртуальных осях, потом на приводах. Каждый шаг — одно действие: что делаете, что видите, пример. Незнакомые слова — в Понятиях.
Станок в платформе — это его двойник: оси и пределы, приводы, шпиндель, навесное, инструменты, нули. Конфигурация системы ЧПУ не пишется руками — она всегда генерится из двойника и уезжает на стенд при пуске. Отсюда два следствия, из которых состоит вся дальнейшая работа:
Завести станок из конструктора, описать оси, подключить приводы, заполнить инструмент.
Создать программу обработки под этот станок и написать её в лаборатории.
Задать установку, поднять станок на вирт. осях, затем на серво, наблюдать ход.
Наладка приводов и локальная панель — работа руками рядом с оборудованием.
Раздел меню ОБОРУДОВАНИЕ → Станки. В шапке списка — кнопка «Новый станок (конструктор)».
Конструктор — порода станка: кинематика и состав узлов. Он определяет, какие оси есть, как они связаны и какой решатель их считает. Ваш станок — экземпляр этой породы со своими числами.
| Конструктор | Чем отличается | Полка |
|---|---|---|
| Фрезер 3-осевой | IS620N · серво EtherCAT | Готово к работе |
| Фрезер 3-осевой | DIY · LPT step/dir | Готово к работе |
| Фрезер 5-осевой | Trunnion XYZAB | Бета |
| Токарный | X+Z · bench / mini-lathe | Бета |
| Лазер | XY гантри · резка/гравировка | Бета |
| КУКА — перекладка | KR16 · перенос деталей | Исследовательские |
| КУКА — сварщик | KR16 · горелка MIG/MAG | Исследовательские |
| Гексапод | платформа Стюарта · 6 штанг | Исследовательские |
| Дельта линейная | 3 колонны · lineardeltakins | Исследовательские |
| Трипод | 3-PRS наклонная голова | Исследовательские |
| Проволочная эрозия | XYUV · реверсивная проволока | Исследовательские |
Подробный разбор пород и кинематик — справочник «Порода — это кинематика».
Зрелость подписана прямо на карточке породы коротким бейджем — «серийный» · «бета» · «R&D» · «в разработке», — а сами карточки разложены по разделам страницы: «Станки» · «Ещё типы — токарный, лазер» · «В разработке / R&D». В коротком списке быстрого создания (кнопка «Новый станок») те же полки названы длиннее: «Готово к работе» · «Бета — работает, проверено не на всём» · «Исследовательские — только виртуальные оси». Полка — это честный ответ на вопрос «можно ли это ставить на железо», и выбор породы с бейджем «R&D» отдельно предупреждает: кинематика исследовательская, на живом железе не проверена.
Справа, пока заполняете, — живое превью того, что уедет на станок: вкладки .ini, .hal,
ethercat-conf.xml и tools.tbl, плюс сводка — рабочая зона, оси, обороты шпинделя,
щуп, кинематика, максимальная подача. Кнопка «Сохранить в каталог» заводит станок;
«Скачать ZIP» отдаёт те же файлы наружу.
Обороты шпинделя — рабочий конверт головы, а не справка. С 30.08 оба числа
уезжают в конфиг станка секцией [SPINDLE_0], и LinuxCNC клампит по ним S-слово — одинаково
на симуляции и на приводах, в обе стороны вращения. Раньше нижний предел не доезжал никуда, а верхний —
только к станку со шпинделем на шине.
Ход оси — полная длина хода по этой оси, а не половина от нуля. Число из паспорта конструктора — стартовое; настоящим оно становится после замера на месте (шаг 2).
Карточка станка → вкладка «Настройки». Таблица осей — по строке на ось:
Платформа помнит, откуда взято каждое число, и не выдаёт одно за другое. Пока ось не проверена на месте, у неё стоит честная подпись «из паспорта станка, касанием не проверено». Кнопка «Ход из паспорта конструктора» возвращает пределы всех осей к паспортным — передаточные числа, энкодер и нули при этом не трогаются.
Проверьте пределы до первого движения на серво. Ход, взятый «на глаз», разъезжается с железом молча: рабочая зона в двойнике окажется шире реальной, и упор найдётся не в симуляции, а на станке.
Карточка станка → «Настройки» → «Оснащение» → «Шина EtherCAT». Кнопка «Сконфигурить XML по шине» снимает фактический состав шины со стенда, опознаёт устройства по каталогу и кладёт результат в двойник — описание шины пересобирается из него.
Таблицу устройств: Слейв · vid:pid · Что это · Драйвер · Роль и статус каждой строки — «добавлен», «сменился», «совпал», «нет на шине». Это ответ на вопрос «что реально висит на кабеле», а не на вопрос «какая ось чем управляется».
Ось, которой не назначен привод на шине, остаётся виртуальной, и платформа говорит об этом дословно:
Ось Z виртуальная: привод на шине ей не назначен — в 3D она поедет, на железе нет
Это нормальное рабочее состояние: станок переводится на приводы по одной оси, остальные пока едут в двойнике.
Сопоставление «ось ↔ устройство шины» делается при наладке, в cncctl (шаг 10), а не на карточке станка. На карточке об этом стоит подсказка со ссылкой «Открыть cncctl».
Вкладка «Инструменты» на карточке станка — что физически стоит в слотах этого станка. Общий справочник — раздел меню СПРАВОЧНИКИ → Инструмент.
В программе стоит ссылка на слот (tool: T4), а не диаметр.
Число отвечает только на вопрос «какой диаметр», а дальше по цепочке спрашивают ещё четыре:
профиль кончика (им режет симуляция), вылет (его сверяют перед пуском), зубья и материал фрезы
(по ним считаются обороты и подача), номер слота в таблице станка. Ссылка отвечает на все пять сразу.
Лаборатория объявляет T1…Tn по столу выбранного станка. Слот, которого в столе нет,
объявлен пустым и падает при использовании — со списком того, что в столе есть, а не загадочной ошибкой.
Шаг с фрезой, которой нет в каталоге, помечается тегом «нет в каталоге».
Параметры фрез, навесного и материалов — справочник «Инструмент, фрезы, навесное, материалы».
Подбора фрезы за человека нет. Не указали tool: —
работает старый путь «просто диаметр», с честной пометкой, что профиль и вылет неизвестны.
Молчаливая подстановка диаметра уже стоила запоротой детали, и её здесь не будет.
Меню ПРОГРАММЫ → Обработка. Заголовок раздела — «Программы обработки», кнопка «Новая программа».
В окне «Новая CAD-программа» отвечаете на два вопроса и только на них:
Кнопка «Открыть» ведёт прямо в лабораторию. Программа появится в списке тогда, когда в ней будет что сохранять, — пустых карточек не заводится.
Станок выбирается один раз. Внутри лаборатории его не переспрашивают: программа с самого начала пишется под конкретное оборудование, а не «вообще».
Лаборатория описывает деталь, а не станок: вы называете болванку и то, что из неё убираете. Слева код, справа — 3D-результат, который пересчитывается на каждое изменение.
| Глагол | Что делает |
|---|---|
| stock | объявить болванку: габарит и материал |
| face | торцевать верх — база для всего дальнейшего |
| выбрать карман | |
| contour | пройти контур |
| drill | сверлить по списку точек |
| thread | фрезеровать резьбу |
| chamfer | снять фаску по кромке |
| engrave | гравировать |
| index | повернуть заготовку на следующую сторону |
Параметры каждой операции, единицы, умолчания и ограничения — справочник «Операции реза».
drill
со списком точек, а не четыре шага. Каждый шаг — одна смена инструмента.param() и друг через друга,
чтобы деталь осталась параметрической.face) → объём (pocket/contour)
→ отверстия → край (chamfer).Проверка вылета фрезы объявляется в самой программе — глаголом toolcheck().
Панель «Проверки перед пуском» в лаборатории меряет вылет по моменту привода
и сравнивает с ожидаемым. Расхождение говорит прямо: в патроне не та фреза или зажата не так.
Замер вылета работает только на серво: на виртуальных осях момента не существует.
Ожидаемый вылет надо назвать — в toolcheck() или полной длиной фрезы в каталоге, иначе сравнивать не с чем.
Карточка станка → вкладка «Установка». Здесь живёт факт: что реально лежит на столе, какого размера, из чего, от какого угла отсчитан ноль и чем его определяли.
Программа этого не знает и знать не должна — она описывает деталь. Поэтому одна программа переезжает между станками и приспособлениями без правок: меняется установка, код остаётся тем же.
Ноль детали задаётся касанием. На станке с щупом — щупом; без щупа доступно касание по моменту привода: инструмент опускается до касания стола, контакт определяется по моменту, щуп не нужен. Найденная заготовка отмечается отдельно, и если её «нашли» на виртуальных осях, так и написано: «Заготовка найдена (эмуляция на вирт. осях)».
Эмуляция — не замер. Ноль, полученный на виртуальных осях, годится, чтобы проверить программу, и не годится, чтобы резать.
Всё управление — на карточке станка, вкладка «Работа». Отдельной страницы прогона нет: ход виден там же, где пульт.
Выбор бокса стоит рядом с кнопками пуска: контроллер всегда поднимается НА боксе. Тут же переключатель «вирт. оси / реальные приводы» — он сохраняется в двойнике, чтобы все окна показывали один режим.
Кнопка питания поднимает контроллер из двойника и снимает E-STOP. Конфигурация генерится и уезжает на стенд в этот момент.
«Привязать оси (Home)?» — нули осей встают по абсолютным энкодерам, без поиска концевиков.
Кнопка «Пуск» кладёт программу в контроллер, если её там ещё нет, и пускает. Рядом — «Пауза», «Продолжить», «Стоп».
Ряд кнопок читается слева направо, как на стойке: питание → база → зарядить → пуск. Правый край ряда — «Мониторинг»: отдельный экран с осциллографами (шаг 9).
Отказ — это названная причина, а не пустой экран. Станок не поднялся, конфиг не доставлен, двойник разошёлся со стендом, нужен перезапуск, инструмент не найден — каждое состояние показывается тегом на карточке станка и в списке станков. Отсутствие связи со стендом отличается от «на связи, но не поднят»: это разные строки.
Ниже — отказы, которые встречаются именно на пути «завести станок → сгенерить конфиг → поднять → отправить программу → базировать → пуск». Тексты приведены дословно.
| Где | Текст отказа | Что это значит | Что делать |
|---|---|---|---|
| конфиг | У машины нет привязанного конструктора — задайте конструктор станка | Двойник завели, но породу ему не назначили: генерить конфиг не из чего. | Открыть карточку станка и выбрать конструктор. |
| конфиг | Конструктор «…» не найден | Двойник ссылается на породу, которой в платформе нет — обычно после переезда или переименования. | Назначить существующую породу из списка. |
| конфиг | Сбой рендера конфига: … | Порода есть, но с числами двойника конфиг не собирается: причина дописана в тот же текст. | Читать хвост строки — там названо поле. Правится в двойнике, не в файле на стенде. |
| пуск | mode должен быть 'sim' или 'servo' | Режим пуска назван третьим словом. Третьего режима нет. | Переключатель на экране даёт ровно два значения; отказ виден только при вызове ручки напрямую. |
| отправка | код discipline_mismatch | Программа не того рода: рез отправляют на механизм, у которого решателя реза нет, или наоборот. | Искать программу в разделе её рода — подсказка отказа так и говорит. |
| отправка | код head_mismatch | Род сверен, но навесное не то: программа писалась под другую голову. «Рука с захватом» и «рука со струбциной» для движения не одно и то же. | Сменить навесное на станке или взять программу под установленную голову. |
| отправка | код preflight_failed со списком замечаний | Проверка ЗАМЫСЛА: в программе есть операция, ссылающаяся на инструмент, которого нет в библиотеке, и подобное. | Каждое замечание идёт со своим кодом и текстом — чинить по списку, он полный. |
| отправка | Вылет не замерен у T… (tool_length_unmeasured) | Проверка ФАКТА станка: слот занят, но вылет инструмента не замерен либо помечен как симулированный. На станке с механикой это блокирует отправку. | Замерить вылет. У стенда, отмеченного как «без механики», отказ понижается до замечания — и в тексте прямо сказано, каким флагом и почему. |
| оснащение | Роль «…» не отмечена как установленная — сначала «Оснащение» | Команда адресована оснастке, которую на станке не объявили установленной. | Отметить в разделе «Оснащение» карточки станка. |
| стенд | Не удалось выбрать стенд автоматически — укажите node_id | Боксов доступно не один и не ноль: платформа не угадывает, на какой везти. | Выбрать стенд явно. |
| двойник | Ось X виртуальная: привод на шине ей не назначен — в 3D она поедет, на железе нет | Не отказ, а предупреждение — и самое важное на всём пути. Ось живёт в двойнике, но привода за ней нет. | Прогон на вирт. осях пройдёт целиком и ничего не докажет про эту ось. Назначать привод — в наладке. |
Переключение «вирт. оси ↔ серво» на уже поднятом станке спрашивает подтверждение и говорит цену прямо: «LinuxCNC перезапустится из двойника в этом режиме. Идущий прогон оборвётся, привязка осей (База) слетит», кнопка — «Поднять заново». Базирование после смены режима надо повторить всегда.
Отдельный экран мониторинга станка показывает:
Момент — в процентах от номинала привода. Пока у привода не задан паспортный номинальный момент, шкалы в ньютон-метрах не существует, и платформа её не рисует.
Наладка (cncctl) — рабочее место наладчика приводов, а не второй экран станка. Разница по задаче:
| Станочный режим | Наладка | |
|---|---|---|
| вопрос | деталь выходит правильной? | привод настроен правильно? |
| предмет | программа, заготовка, инструмент, нули | ось, слейв шины, паспорт мотора, контур регулирования |
| инструменты | пульт, монитор, G-code | обзор шины и модулей, привязка ось↔слейв, параметры и словари SDO, осциллографы, тюнинг, люфт и трение, вибрация, разбор кодов аварий, толчковый джог |
Привязка «ось ↔ устройство шины» (шаг 3), паспорт мотора и настройка контуров делаются здесь. Результат уходит в двойник, поэтому второй правды не появляется.
Наладка — работа рядом с оборудованием. Через облако проходит замысел (программа, «выполняй», «стоп») и факт (что произошло); жесты — толчковый джог, сырые команды приводу — остаются локальными.
На боксе поднимается локальная веб-панель: открывается по адресу бокса в цеховой сети, работает, даже когда связи с платформой нет.
Правило четырёх окон: двойник · стенд · наладка · панель у станка. Любая настройка станка должна одинаково читаться во всех четырёх. Если поле есть только в одном — оператор будет крутить его вслепую.
В момент времени на стенде поднят ровно один режим; переключение гасит предыдущий. Это снимает вопрос «кто сейчас владеет железом» — сегодня на него отвечает дисциплина, а не система. Сроков не называем.
Единый каталог на боксе, где лежат уехавшие туда проекты — по каталогу на проект. Понадобится, когда на одном стенде живёт больше одной работы.
Ненаписанная граница читается как обещание, поэтому вот они — прямо.
| Не делает | Почему | Что вместо |
|---|---|---|
| Рез недоступен шарнирным и параллельным кинематикам | Траектория реза выводится в декартовых координатах детали. У шестиосевого робота, гексапода, трипода и линейной дельты такого решателя нет — и платформа отказывает честно, вместо приблизительного пересчёта. | программа рода «движения» |
| Породы с бейджем «R&D» не проверены на железе | Кинематика собрана и считается, но живого прогона за ней нет. Экран говорит это прямо при выборе. | вирт. оси; на приводы — только осознанно |
| Ось без назначенного привода поедет в симуляции и не поедет на железе | Двойник знает ось, шина — нет. Это не ошибка платформы, а незаконченная привязка, и она названа строкой рядом с осью. | назначение привода в наладке |
| Правка конфигурации на самом стенде не сохраняется | Конфиг всегда генерится из двойника. Отредактированный на стенде файл — вторая правда, он исчезнет при следующем пуске. | правка полей двойника |
| Момент не показывается в ньютон-метрах | Пока у привода не задан паспортный номинальный момент, шкалы в Н·м не существует — и платформа её не рисует, а показывает проценты от номинала. | паспорт привода |
| Вылет инструмента не подставляется за вас | Умолчание диаметра живёт только в показе модели, не в генерации кода. Отправку на серво блокирует незамеренный вылет, а не «подходящее» число. | замер вылета |
| Несколько деталей в одной программе | Программа описывает ОДНУ деталь от угла её заготовки. Раскладка нескольких по столу — работа установки, а не генератора. | рабочие смещения установки |
Отдельно про мощь CAM: сложные трёхмерные поверхности и полноценная пятиосевая обработка — не наша игра, и мы этого не обещаем. Наша сила в другом — в сквозном пути от браузера до серво и в двойнике как единственном источнике правды.
Плита 120 × 80 × 12 мм из алюминия: снять верх, выбрать карман, просверлить четыре отверстия Ø6, снять фаску. Всё, что ниже, — реальные глаголы лаборатории.
Станки → «Новый станок (конструктор)» → «Фрезер 3-осевой · IS620N · серво EtherCAT» (полка «Готово к работе»). Имя, ход по X/Y/Z, обороты шпинделя → «Сохранить в каталог».
Настройки → проверить MIN/MAX/База по каждой оси. До замера у них стоит подпись «из паспорта станка, касанием не проверено» — это нормально для первого прогона на вирт. осях.
Программы → Обработка → «Новая программа» → станок из шага 1, материал «алюминий» → «Открыть».
const глубина = param('глубина кармана', 4, { min: 1, max: 8 })
stock(120, 80, 12, 'aluminum')
face({ depth: 0.4 })
pocket({ rect: [20, 20, 80, 40], depth: глубина })
drill({ points: [[15, 15], [105, 15], [105, 65], [15, 65]], d: 6, thru: true })
chamfer({ edge: 'top', size: 0.6, vbit: 90 }) Четыре отверстия — один шаг drill со списком точек: одна фреза, одна смена инструмента.
Глубина кармана вынесена в param() — её можно крутить, не переписывая код.
Справа сразу видно деталь и проходы. → «Сохранить как CAD-программу».
Карточка станка → «Установка»: габарит заготовки, материал, ноль по касанию.
Вкладка «Работа» → переключатель на «вирт. оси» → поднять станок → «Привязать оси (Home)» → «Пуск». Кадры проходят, трек рисуется в рабочей зоне двойника, время считается. Железо стоит.
Тот же путь, переключатель на «реальные приводы». Станок поднимется заново из двойника — привязку осей («База») после этого надо повторить. Дальше — «Пуск» и наблюдение по DRO, живому треку и графикам момента.
Не пропускайте шаг 6. Прогон на виртуальных осях стоит минуту и ловит всё, что ловится без железа: вылет за рабочую зону, несуществующий слот инструмента, порядок операций. На серво остаются только те ошибки, которые видно железом.
Дальше: Автоматика · Понятия · Операции реза · Установка бокса