Industry 4.0 · цифровые двойники станков и промышленной автоматики · отечественная R&D-разработка +7 925 353-56-35 info@synctwin.ru

Станки: от двойника до движения

Одиннадцать шагов: завести станок, описать его оси, привязать к железу, написать программу обработки и прогнать её — сначала на виртуальных осях, потом на приводах. Каждый шаг — одно действие: что делаете, что видите, пример. Незнакомые слова — в Понятиях.

Идея

Почему сначала двойник

Станок в платформе — это его двойник: оси и пределы, приводы, шпиндель, навесное, инструменты, нули. Конфигурация системы ЧПУ не пишется руками — она всегда генерится из двойника и уезжает на стенд при пуске. Отсюда два следствия, из которых состоит вся дальнейшая работа:

  • Станок рождается виртуальным. Двойник заводится и работает до того, как рядом появилось железо: оси едут, программа прогоняется, время считается. Приводы подключаются потом, по одной оси.
  • Правка делается в двойнике, а не в конфиге. Отредактированный на стенде файл — это вторая правда, которая исчезнет при следующем пуске. Меняете поле в двойнике — меняется всё, что из него растёт.
01–04

Оборудование

Завести станок из конструктора, описать оси, подключить приводы, заполнить инструмент.

05–06

Программа

Создать программу обработки под этот станок и написать её в лаборатории.

07–09

Прогон

Задать установку, поднять станок на вирт. осях, затем на серво, наблюдать ход.

10–11

У станка

Наладка приводов и локальная панель — работа руками рядом с оборудованием.

Шаг 1

Завести станок из конструктора

Раздел меню ОБОРУДОВАНИЕ → Станки. В шапке списка — кнопка «Новый станок (конструктор)».

Что такое конструктор

Конструктор — порода станка: кинематика и состав узлов. Он определяет, какие оси есть, как они связаны и какой решатель их считает. Ваш станок — экземпляр этой породы со своими числами.

КонструкторЧем отличаетсяПолка
Фрезер 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» отдельно предупреждает: кинематика исследовательская, на живом железе не проверена.

Что заполняете

  • Основные — имя станка, какие оси идут на приводы, ход по X, Y, Z;
  • Шпиндель — минимальные и максимальные обороты;
  • Опции — режим симуляции, наличие щупа;
  • Расширенные настройки (свёрнуты) — период серво-цикла, шаг ШВП, счётчиков энкодера на оборот, максимальные скорость, ускорение и ошибка слежения.

Что видите

Справа, пока заполняете, — живое превью того, что уедет на станок: вкладки .ini, .hal, ethercat-conf.xml и tools.tbl, плюс сводка — рабочая зона, оси, обороты шпинделя, щуп, кинематика, максимальная подача. Кнопка «Сохранить в каталог» заводит станок; «Скачать ZIP» отдаёт те же файлы наружу.

Обороты шпинделя — рабочий конверт головы, а не справка. С 30.08 оба числа уезжают в конфиг станка секцией [SPINDLE_0], и LinuxCNC клампит по ним S-слово — одинаково на симуляции и на приводах, в обе стороны вращения. Раньше нижний предел не доезжал никуда, а верхний — только к станку со шпинделем на шине.

Ход оси — полная длина хода по этой оси, а не половина от нуля. Число из паспорта конструктора — стартовое; настоящим оно становится после замера на месте (шаг 2).

Шаг 2

Паспорт осей и пределы

Карточка станка → вкладка «Настройки». Таблица осей — по строке на ось:

  • Ось — буква оси (у рук — «Сустав» и номер сустава);
  • MIN и MAX — границы хода в единицах оси;
  • База — куда ось встаёт по кнопке привязки нулей;
  • Напр. — инверсия направления, если ось едет не в ту сторону.

Паспорт или замер

Платформа помнит, откуда взято каждое число, и не выдаёт одно за другое. Пока ось не проверена на месте, у неё стоит честная подпись «из паспорта станка, касанием не проверено». Кнопка «Ход из паспорта конструктора» возвращает пределы всех осей к паспортным — передаточные числа, энкодер и нули при этом не трогаются.

Проверьте пределы до первого движения на серво. Ход, взятый «на глаз», разъезжается с железом молча: рабочая зона в двойнике окажется шире реальной, и упор найдётся не в симуляции, а на станке.

Шаг 3

Приводы и шина

Карточка станка → «Настройки» → «Оснащение» → «Шина EtherCAT». Кнопка «Сконфигурить XML по шине» снимает фактический состав шины со стенда, опознаёт устройства по каталогу и кладёт результат в двойник — описание шины пересобирается из него.

Что видите

Таблицу устройств: Слейв · vid:pid · Что это · Драйвер · Роль и статус каждой строки — «добавлен», «сменился», «совпал», «нет на шине». Это ответ на вопрос «что реально висит на кабеле», а не на вопрос «какая ось чем управляется».

Ось без привода — виртуальная

Ось, которой не назначен привод на шине, остаётся виртуальной, и платформа говорит об этом дословно:

Ось Z виртуальная: привод на шине ей не назначен — в 3D она поедет, на железе нет

Это нормальное рабочее состояние: станок переводится на приводы по одной оси, остальные пока едут в двойнике.

Сопоставление «ось ↔ устройство шины» делается при наладке, в cncctl (шаг 10), а не на карточке станка. На карточке об этом стоит подсказка со ссылкой «Открыть cncctl».

Шаг 4

Инструмент в слотах

Вкладка «Инструменты» на карточке станка — что физически стоит в слотах этого станка. Общий справочник — раздел меню СПРАВОЧНИКИ → Инструмент.

В программе стоит ссылка на слот (tool: T4), а не диаметр. Число отвечает только на вопрос «какой диаметр», а дальше по цепочке спрашивают ещё четыре: профиль кончика (им режет симуляция), вылет (его сверяют перед пуском), зубья и материал фрезы (по ним считаются обороты и подача), номер слота в таблице станка. Ссылка отвечает на все пять сразу.

Лаборатория объявляет T1…Tn по столу выбранного станка. Слот, которого в столе нет, объявлен пустым и падает при использовании — со списком того, что в столе есть, а не загадочной ошибкой. Шаг с фрезой, которой нет в каталоге, помечается тегом «нет в каталоге».

Параметры фрез, навесного и материалов — справочник «Инструмент, фрезы, навесное, материалы».

Подбора фрезы за человека нет. Не указали tool: — работает старый путь «просто диаметр», с честной пометкой, что профиль и вылет неизвестны. Молчаливая подстановка диаметра уже стоила запоротой детали, и её здесь не будет.

Шаг 5

Создать программу обработки

Меню ПРОГРАММЫ → Обработка. Заголовок раздела — «Программы обработки», кнопка «Новая программа».

В окне «Новая CAD-программа» отвечаете на два вопроса и только на них:

  • Станок — под какой станок пишем; пригодность считается по роду программы, неподходящее оборудование в списке не предлагается;
  • Материал заготовки — из каталога материалов; от него зависят режимы резания.

Кнопка «Открыть» ведёт прямо в лабораторию. Программа появится в списке тогда, когда в ней будет что сохранять, — пустых карточек не заводится.

Станок выбирается один раз. Внутри лаборатории его не переспрашивают: программа с самого начала пишется под конкретное оборудование, а не «вообще».

Шаг 6

Написать программу в лаборатории

Лаборатория описывает деталь, а не станок: вы называете болванку и то, что из неё убираете. Слева код, справа — 3D-результат, который пересчитывается на каждое изменение.

Глаголы

ГлаголЧто делает
stockобъявить болванку: габарит и материал
faceторцевать верх — база для всего дальнейшего
pocketвыбрать карман
contourпройти контур
drillсверлить по списку точек
threadфрезеровать резьбу
chamferснять фаску по кромке
engraveгравировать
indexповернуть заготовку на следующую сторону

Параметры каждой операции, единицы, умолчания и ограничения — справочник «Операции реза».

Пять правил, по которым это читается

  • Координаты — в системе заготовки: X и Y от её левого-нижнего угла, Z = 0 — верх, вниз отрицательно. Машинные координаты добавит платформа; скрипт про станок ничего не знает.
  • Только вычитание: деталь = болванка минус проходы. Чего нет в болванке — не появится, поэтому программу можно повторить на железе.
  • Одинаковые операции одной фрезой — один шаг: четыре отверстия Ø6 это один drill со списком точек, а не четыре шага. Каждый шаг — одна смена инструмента.
  • Никаких магических чисел: размеры выражаются через param() и друг через друга, чтобы деталь осталась параметрической.
  • Порядок как на станке: база (face) → объём (pocket/contour) → отверстия → край (chamfer).

Проверки перед пуском

Проверка вылета фрезы объявляется в самой программе — глаголом toolcheck(). Панель «Проверки перед пуском» в лаборатории меряет вылет по моменту привода и сравнивает с ожидаемым. Расхождение говорит прямо: в патроне не та фреза или зажата не так.

Замер вылета работает только на серво: на виртуальных осях момента не существует. Ожидаемый вылет надо назвать — в toolcheck() или полной длиной фрезы в каталоге, иначе сравнивать не с чем.

Откат и черновик

  • «Отменить (⌘Z)» — шаг назад по истории правок;
  • если вы ушли со страницы, не сохранив, при возврате появится строка «Есть незакрытый черновик от …» и кнопка «Вернуть черновик»;
  • «Сохранить как CAD-программу» — первый раз; дальше кнопка становится «Сохранить в эту программу».
Шаг 7

Установка: где лежит заготовка

Карточка станка → вкладка «Установка». Здесь живёт факт: что реально лежит на столе, какого размера, из чего, от какого угла отсчитан ноль и чем его определяли.

Программа этого не знает и знать не должна — она описывает деталь. Поэтому одна программа переезжает между станками и приспособлениями без правок: меняется установка, код остаётся тем же.

Ноль детали задаётся касанием. На станке с щупом — щупом; без щупа доступно касание по моменту привода: инструмент опускается до касания стола, контакт определяется по моменту, щуп не нужен. Найденная заготовка отмечается отдельно, и если её «нашли» на виртуальных осях, так и написано: «Заготовка найдена (эмуляция на вирт. осях)».

Эмуляция — не замер. Ноль, полученный на виртуальных осях, годится, чтобы проверить программу, и не годится, чтобы резать.

Шаг 8

Поднять станок и прогнать

Всё управление — на карточке станка, вкладка «Работа». Отдельной страницы прогона нет: ход виден там же, где пульт.

8.1

Выбрать стенд и режим

Выбор бокса стоит рядом с кнопками пуска: контроллер всегда поднимается НА боксе. Тут же переключатель «вирт. оси / реальные приводы» — он сохраняется в двойнике, чтобы все окна показывали один режим.

8.2

Поднять

Кнопка питания поднимает контроллер из двойника и снимает E-STOP. Конфигурация генерится и уезжает на стенд в этот момент.

8.3

Привязать оси

«Привязать оси (Home)?» — нули осей встают по абсолютным энкодерам, без поиска концевиков.

8.4

Пуск

Кнопка «Пуск» кладёт программу в контроллер, если её там ещё нет, и пускает. Рядом — «Пауза», «Продолжить», «Стоп».

Ряд кнопок читается слева направо, как на стойке: питание → база → зарядить → пуск. Правый край ряда — «Мониторинг»: отдельный экран с осциллографами (шаг 9).

Что говорит платформа

  • смена режима на поднятом станке спрашивает подтверждение: «LinuxCNC перезапустится из двойника в этом режиме. Идущий прогон оборвётся, привязка осей (База) слетит» — и предлагает «Поднять заново»;
  • кнопка питания объясняет своё состояние словами: «Висит E-STOP. Нажатие снимет аварию и включит станок» · «Контроллер не поднят. Нажатие поднимет LinuxCNC и включит станок»;
  • если в программе объявлены проверки вылета (шаг 6), они отрабатывают здесь; расхождение названо прямо: «в патроне не та фреза или зажата не так».

Как выглядит отказ

Отказ — это названная причина, а не пустой экран. Станок не поднялся, конфиг не доставлен, двойник разошёлся со стендом, нужен перезапуск, инструмент не найден — каждое состояние показывается тегом на карточке станка и в списке станков. Отсутствие связи со стендом отличается от «на связи, но не поднят»: это разные строки.

Ниже — отказы, которые встречаются именно на пути «завести станок → сгенерить конфиг → поднять → отправить программу → базировать → пуск». Тексты приведены дословно.

ГдеТекст отказаЧто это значитЧто делать
конфиг У машины нет привязанного конструктора — задайте конструктор станка Двойник завели, но породу ему не назначили: генерить конфиг не из чего. Открыть карточку станка и выбрать конструктор.
конфиг Конструктор «…» не найден Двойник ссылается на породу, которой в платформе нет — обычно после переезда или переименования. Назначить существующую породу из списка.
конфиг Сбой рендера конфига: … Порода есть, но с числами двойника конфиг не собирается: причина дописана в тот же текст. Читать хвост строки — там названо поле. Правится в двойнике, не в файле на стенде.
пуск mode должен быть 'sim' или 'servo' Режим пуска назван третьим словом. Третьего режима нет. Переключатель на экране даёт ровно два значения; отказ виден только при вызове ручки напрямую.
отправка код discipline_mismatch Программа не того рода: рез отправляют на механизм, у которого решателя реза нет, или наоборот. Искать программу в разделе её рода — подсказка отказа так и говорит.
отправка код head_mismatch Род сверен, но навесное не то: программа писалась под другую голову. «Рука с захватом» и «рука со струбциной» для движения не одно и то же. Сменить навесное на станке или взять программу под установленную голову.
отправка код preflight_failed со списком замечаний Проверка ЗАМЫСЛА: в программе есть операция, ссылающаяся на инструмент, которого нет в библиотеке, и подобное. Каждое замечание идёт со своим кодом и текстом — чинить по списку, он полный.
отправка Вылет не замерен у T… (tool_length_unmeasured) Проверка ФАКТА станка: слот занят, но вылет инструмента не замерен либо помечен как симулированный. На станке с механикой это блокирует отправку. Замерить вылет. У стенда, отмеченного как «без механики», отказ понижается до замечания — и в тексте прямо сказано, каким флагом и почему.
оснащение Роль «…» не отмечена как установленная — сначала «Оснащение» Команда адресована оснастке, которую на станке не объявили установленной. Отметить в разделе «Оснащение» карточки станка.
стенд Не удалось выбрать стенд автоматически — укажите node_id Боксов доступно не один и не ноль: платформа не угадывает, на какой везти. Выбрать стенд явно.
двойник Ось X виртуальная: привод на шине ей не назначен — в 3D она поедет, на железе нет Не отказ, а предупреждение — и самое важное на всём пути. Ось живёт в двойнике, но привода за ней нет. Прогон на вирт. осях пройдёт целиком и ничего не докажет про эту ось. Назначать привод — в наладке.

Смена режима на поднятом станке

Переключение «вирт. оси ↔ серво» на уже поднятом станке спрашивает подтверждение и говорит цену прямо: «LinuxCNC перезапустится из двойника в этом режиме. Идущий прогон оборвётся, привязка осей (База) слетит», кнопка — «Поднять заново». Базирование после смены режима надо повторить всегда.

Шаг 9

Наблюдение

Отдельный экран мониторинга станка показывает:

  • Координаты (DRO) — положение осей, состояние, шпиндель, подача;
  • Цифровой двойник (живой трек) — 3D-сцена станка, идущая за живой позой;
  • графики «Положение, мм», «Скорость, мм/с» и «Момент на валу, % (от номинала)».

Момент — в процентах от номинала привода. Пока у привода не задан паспортный номинальный момент, шкалы в ньютон-метрах не существует, и платформа её не рисует.

Шаг 10

Наладка — отдельный инструмент

Наладка (cncctl) — рабочее место наладчика приводов, а не второй экран станка. Разница по задаче:

Станочный режимНаладка
вопросдеталь выходит правильной?привод настроен правильно?
предметпрограмма, заготовка, инструмент, нулиось, слейв шины, паспорт мотора, контур регулирования
инструментыпульт, монитор, G-codeобзор шины и модулей, привязка ось↔слейв, параметры и словари SDO, осциллографы, тюнинг, люфт и трение, вибрация, разбор кодов аварий, толчковый джог

Привязка «ось ↔ устройство шины» (шаг 3), паспорт мотора и настройка контуров делаются здесь. Результат уходит в двойник, поэтому второй правды не появляется.

Наладка — работа рядом с оборудованием. Через облако проходит замысел (программа, «выполняй», «стоп») и факт (что произошло); жесты — толчковый джог, сырые команды приводу — остаются локальными.

Шаг 11

Панель у станка — без облака

На боксе поднимается локальная веб-панель: открывается по адресу бокса в цеховой сети, работает, даже когда связи с платформой нет.

  • показывает координаты (DRO) и состояние станка, обновляясь от бокса напрямую;
  • показывает потолок коррекции подачи — тот, что задан в двойнике, а не выдуманный панелью;
  • называет оси и суставы теми же именами, что и остальные окна.

Правило четырёх окон: двойник · стенд · наладка · панель у станка. Любая настройка станка должна одинаково читаться во всех четырёх. Если поле есть только в одном — оператор будет крутить его вслепую.

Готовится

Что скоро появится

Готовится

Режимы стенда: станок · наладка · автоматика

В момент времени на стенде поднят ровно один режим; переключение гасит предыдущий. Это снимает вопрос «кто сейчас владеет железом» — сегодня на него отвечает дисциплина, а не система. Сроков не называем.

Готовится

Парк проектов на стенде

Единый каталог на боксе, где лежат уехавшие туда проекты — по каталогу на проект. Понадобится, когда на одном стенде живёт больше одной работы.

Границы

Чего этот путь не делает

Ненаписанная граница читается как обещание, поэтому вот они — прямо.

Не делаетПочемуЧто вместо
Рез недоступен шарнирным и параллельным кинематикам Траектория реза выводится в декартовых координатах детали. У шестиосевого робота, гексапода, трипода и линейной дельты такого решателя нет — и платформа отказывает честно, вместо приблизительного пересчёта. программа рода «движения»
Породы с бейджем «R&D» не проверены на железе Кинематика собрана и считается, но живого прогона за ней нет. Экран говорит это прямо при выборе. вирт. оси; на приводы — только осознанно
Ось без назначенного привода поедет в симуляции и не поедет на железе Двойник знает ось, шина — нет. Это не ошибка платформы, а незаконченная привязка, и она названа строкой рядом с осью. назначение привода в наладке
Правка конфигурации на самом стенде не сохраняется Конфиг всегда генерится из двойника. Отредактированный на стенде файл — вторая правда, он исчезнет при следующем пуске. правка полей двойника
Момент не показывается в ньютон-метрах Пока у привода не задан паспортный номинальный момент, шкалы в Н·м не существует — и платформа её не рисует, а показывает проценты от номинала. паспорт привода
Вылет инструмента не подставляется за вас Умолчание диаметра живёт только в показе модели, не в генерации кода. Отправку на серво блокирует незамеренный вылет, а не «подходящее» число. замер вылета
Несколько деталей в одной программе Программа описывает ОДНУ деталь от угла её заготовки. Раскладка нескольких по столу — работа установки, а не генератора. рабочие смещения установки

Отдельно про мощь CAM: сложные трёхмерные поверхности и полноценная пятиосевая обработка — не наша игра, и мы этого не обещаем. Наша сила в другом — в сквозном пути от браузера до серво и в двойнике как единственном источнике правды.

Пример

От нуля до движения: плита с отверстиями

Плита 120 × 80 × 12 мм из алюминия: снять верх, выбрать карман, просверлить четыре отверстия Ø6, снять фаску. Всё, что ниже, — реальные глаголы лаборатории.

1. Станок

Станки → «Новый станок (конструктор)» → «Фрезер 3-осевой · IS620N · серво EtherCAT» (полка «Готово к работе»). Имя, ход по X/Y/Z, обороты шпинделя → «Сохранить в каталог».

2. Оси

Настройки → проверить MIN/MAX/База по каждой оси. До замера у них стоит подпись «из паспорта станка, касанием не проверено» — это нормально для первого прогона на вирт. осях.

3. Программа

Программы → Обработка → «Новая программа» → станок из шага 1, материал «алюминий» → «Открыть».

4. Код детали

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-программу».

5. Установка

Карточка станка → «Установка»: габарит заготовки, материал, ноль по касанию.

6. Прогон на вирт. осях

Вкладка «Работа» → переключатель на «вирт. оси» → поднять станок → «Привязать оси (Home)» → «Пуск». Кадры проходят, трек рисуется в рабочей зоне двойника, время считается. Железо стоит.

7. Прогон на серво

Тот же путь, переключатель на «реальные приводы». Станок поднимется заново из двойника — привязку осей («База») после этого надо повторить. Дальше — «Пуск» и наблюдение по DRO, живому треку и графикам момента.

Не пропускайте шаг 6. Прогон на виртуальных осях стоит минуту и ловит всё, что ловится без железа: вылет за рабочую зону, несуществующий слот инструмента, порядок операций. На серво остаются только те ошибки, которые видно железом.

Дальше: Автоматика · Понятия · Операции реза · Установка бокса