ООО «СинкТвин Технологии» +7 925 353-56-35 info@synctwin.ru

От программы к станку

Программа сохранена. Дальше — шесть ступеней, и на каждой платформа либо пускает дальше, либо называет причину. Конфиг контроллера всегда порождается из двойника в момент запуска; на стенде его не правят.

Жизненный цикл программы: выбор машины, программа, симуляция — preflight, запуск, хоминг — прогон на железе, обратная связь, та же программа на другом станке В браузере — замысел 01 Выбор машины один раз, при создании программы 02 Программа деталь параметрами или логика шагами 03 Симуляция виртуальные оси, проверка реза Проверка — до железа 06 Хоминг оси нашли ноль, станок готов 05 Запуск конфиг из двойника уходит на стенд 04 Preflight инструмент, вылеты, рабочая зона На железе — факт 07 Прогон программа идёт на сервоприводах 08 Обратная связь позиции и ошибка слежения на экране 09 Другой станок та же программа, другое оборудование
Жизненный цикл: машина выбрана один раз → программа → preflight → запуск и база → прогон → обратная связь → та же программа на другом станке.
ступеньчто происходитгдечто видно / что держит
установкагде лежит заготовка, ноль деталикарточка станка → установкаMachine.current_setup · work_offsets.p1 → G54
preflightстатические проверки программы против двойникакарточка программы → бейдж и «Pre-flight check»отчёт: ошибки блокируют, предупреждения — нет
launchподнять LinuxCNC из двойника: конфиг генерится и уезжает на бокскарточка станка → кнопка питания, рядом переключатель «вирт. оси / реальные приводы»режим sim или servo хранится в двойнике, его видят все окна
homeпривязать оси: нули по абсолютным энкодерамкнопка «Привязать оси (Home)?»на абсолютных энкодерах — защёлка флага без поиска; без базы AUTO-программа не пускается
sendположить программу в контроллеркнопка «Пуск» — кладёт, если ещё нет, и пускаетгейт: слот без вылета с названным происхождением блокирует отправку
обратная связьпозиции, ошибка слежения, statusword приводовмонитор станка, осциллограф cncctlфакт идёт снизу вверх: двойник отражает, не назначает
По кнопкам

Путь целиком — пять экранов

Снимки с живого cncai.ru. Порядок — тот, в котором работает человек: программа → станок → оснастка и «Сделать текущим» → пуск → монитор.

  1. Создать программу
    1

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

    /programs/cut или /programs/motion → «Новая программа». Род выбран списком, дальше он не меняется.

  2. Выбрать станок
    2

    Выбрать станок

    Один раз. Список делит станки по пригодности роду: «под CAM» и «на фланце захват, а не шпиндель». Внутри лабы станок не переспрашивают.

  3. Написать и сохранить
    3

    Написать и сохранить

    Лаборатория: глаголы реза или движения, Ctrl+↵ — программа сохранена, preflight показан счётчиком ошибок / предупреждений / справок.

  4. Оснастить и отправить
    4

    Оснастить и отправить

    «На станок»: оснастка по программе (слоты, вылет), «Сделать текущим» — стенд и профили осей, режим запуска (виртуальные оси или серво), проверки поимённо.

  5. Включить, дом, пуск, монитор
    5

    Включить, дом, пуск, монитор

    Стенд поднимает LinuxCNC из двойника; home; пуск. Монитор показывает DRO, строку, 3D по факту; отказ приходит текстом гейта дословно.

Preflight

Что проверяется до пуска

Статические проверки: доли секунды на программу любой длины, без симуляции съёма. Отчёт делит находки на ошибки (пуск заперт), предупреждения и справки. Коды — те, что печатает платформа.

что охраняеткодуровеньчто говорит человеку
безопасная высотаsafe_z_outside_axis_limit предупреждение текст собирается из контекста операции
геометрия: заготовка, инструмент, зонаdeep_hole_no_peck предупреждение

Отношение глубины к диаметру …× (depth=…, Ø…). Длинные отверстия требуют peck-drilling, иначе стружка забьёт канавки и сломает сверло.

envelope_<ось>_violation ошибка — пуск заперт

Ось …: машинная координата (G53) …… вне хода […, …]… — на …… ….

Ось …: …… вне хода […, …]… — на …… ….

Ось …: … мм вне зоны […, …] мм — на … мм … (деталь … + ноль ……).

Ось …: не поместится — …….

holder_collision по ситуации

Зазор между держателем фрезы и верхом заготовки … мм (gauge_length=… мм, depth=… мм). Минимум … мм.

table_crash ошибка — пуск заперт

Рез уходит на … мм ниже дна заготовки (толщина … мм), а подклад не задан — фреза придёт в стол.

through_cut_deeper_than_pad ошибка — пуск заперт

Подрез … мм больше подклада … мм — фреза пройдёт подложку насквозь и достанет стол.

through_cut_without_pad ошибка — пуск заперт

Шаг объявлен сквозным, а в установке станка подкладки нет — выходить резу некуда, фреза придёт в стол.

tool_too_large_for_pocket ошибка — пуск заперт

Диаметр фрезы … мм больше меньшей стороны кармана (… мм). Карман не поместится.

tool_too_short ошибка — пуск заперт

Длина режущей части фрезы … мм меньше глубины реза … мм + 1 мм запаса. Фреза физически не сможет дорезать.

zone_check_disabled_stand_no_mechanics справка

Проверка выхода за рабочую зону не выполнена: ….

кинематика и система координатkinematics_frame_mismatch ошибка — пуск заперт

Робот стартует в углах суставов, а программа — в координатах ячейки.

общееgcode_missing предупреждение

G-code ещё не сгенерирован — нечего валидировать.

machine_checks_not_run предупреждение

Шаг «…» НЕ СВЕРЕН со станком (конверт осей, режимы, парковочная высота): кинематику шага прочитать не удалось — …: …

tool_missing предупреждение

Инструмент … не найден в библиотеке.

оси станкаaxis_not_on_machine ошибка — пуск заперт

Программа адресует ось …, которой у станка нет: его оси — ….

программа движения и домmotion_program_predates_home предупреждение

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

режимы: обороты и подачаaxis_speed_unclaimed предупреждение

Подача зажата потолком оси … (… мм/мин), а источник этого потолка не назван — число принято умолчанием, не паспортом привода.

feed_above_recommended предупреждение

Подача F=… выше расчётной (…) на …%.

feed_too_high ошибка — пуск заперт

Подача F=… мм/мин превышает расчётную (…) в …× — риск поломки фрезы.

feed_too_low предупреждение

Подача F=… ниже расчётной (…) более чем в 3× — риск 'натирания' (rubbing) вместо резания.

material_missing предупреждение

Материал не задан или не распознан ('…') / — подачу и обороты не с чем сверить.

plunge_feed_too_high предупреждение

Плунж по Z идёт с F=… > plunge_feed_mm_min=… (профиль).

rpm_above_machine_max ошибка — пуск заперт

S… превышает максимум … …….

rpm_below_machine_min предупреждение

S… ниже минимума … …… — VFD может не выйти на режим. / луч может не пробить материал.

spindle_ceiling_assumed предупреждение

Обороты зажаты потолком шпинделя … об/мин, а это число … — режим посчитан под потолок, который никто не подтверждал.

резьбаthread_not_cuttable ошибка — пуск заперт

…: …

thread_quality предупреждение

…: …

таблица инструментаmissing_g43 предупреждение

После 'M6 T…' (стр. …) не найден парный 'G43 H…' — длина инструмента не активна.

tool_slot_not_in_table ошибка — пуск заперт

M6 T… — слот … отсутствует в tool.tbl станка (есть: …).

tool_table_empty справка

Стол инструментов станка пуст (0 слотов) — вызовы M6 в программе (, T…) НЕ сверены с tool.tbl: слот может как существовать, так и не существовать физически.

установка и ноль деталиstock_larger_than_program по ситуации

Программа посчитана по … … мм, а на станке замерено … мм (… мм). Глубины и контур считаны от размера, которого нет. / Останется необработанный припуск — деталь выйдет не та.

stock_smaller_than_program по ситуации

Программа посчитана по … … мм, а на станке замерено … мм (… мм). Глубины и контур считаны от размера, которого нет. / Останется необработанный припуск — деталь выйдет не та.

work_zero_invalid_axis_recalibrated ошибка — пуск заперт текст собирается из контекста операции
zero_corner_changed ошибка — пуск заперт

G-code посчитан от угла «…», а в установке станка сейчас «…» — все координаты отсчитаны от другой точки.

zero_disagrees_with_setup_place предупреждение текст собирается из контекста операции

Порождено из backend/src/aicnc/services/preflight_validator.py (PreflightIssue), machine_gate.py (launch refusals); «…» — место числа или имени из вашей программы.

Два гейта про инструмент — про разное. Preflight ловит «инструмент операции не найден в библиотеке» — это про замысел. Отправку блокирует «у слота нет вылета с названным происхождением» — это про факт станка. Стенд без механики понижает второй отказ до замечания в ответе отправки.

Эталон породы проходит чисто. Программа-пример каждой породы обязана дать preflight без предупреждений и отправку без замечаний — жалоба у эталона означает, что порода не настроена, а не «мелочь на экране».

Launch

Виртуальные оси или приводы

режимчто этозачем
вирт. оси (sim)все оси loopback, шины нет; момента нет — вылет не измеритьпроверить программу и порядок кадров без риска
приводы (servo)EtherCAT, реальные серво, момент внутри шага движениято же самое, но железо отвечает

Режим берётся из факта, а не из ответа кнопки: маркер стенда и cia402 в HAL говорят, на чём поднят контроллер; ответ команды говорит лишь о запросе. Пока стенд не подтвердил переход, кнопка крутится.

отказ запускаслойчто говорит
machine_deenergizedcontrollerнельзя выполнить …: станок во ВЗВЕДЁННОМ аварийном стопе
stand_snapshot_unavailableredisСнимок состояния стенда недоступен — не видно, идёт ли сейчас
launch_would_interrupt_runprogramтекст собирается из состояния стенда

Смена режима на поднятом станке спрашивает подтверждение: LinuxCNC перезапустится из двойника, привязка осей слетит. Момент на серво подаётся только внутри шага движения: включили → поехали → выключили, снятие подтверждается измерением.

Вертикаль SyncTwin: от описания в браузере через двойник и порождённый конфиг к LinuxCNC, EtherCAT и сервоприводам; обратная связь возвращается в двойник и на экран Браузер Описание детали или логики параметры детали · шаги узла автоматики замысел Двойник · единственный источник правды Двойник оборудования Machine: оси · приводы · входы-выходы · ноль порождение Генерация Конфигурация из двойника .ini · .hal · EtherCAT XML — только из двойника запуск на стенд Бокс у станка LinuxCNC / HAL в VM контур реального времени · без облака команды в цикле Шина EtherCAT единственная шина · цикл ≥ 1 кГц · CiA-402 уставки, момент Железо Сервоприводы и входы-выходы разные вендоры на одной шине Обратная связь позиции ошибка слежения statusword в двойник и экран команда вниз обратная связь вверх физический мир
Вертикаль: браузер → двойник → порождённый конфиг → LinuxCNC / HAL → EtherCAT → серво; обратная связь возвращается в двойник и на экран.
Обратная связь

Где смотреть ответ железа

Ответ кнопки доказывает, что запрос принят, и ничего больше. Факт снимается с другого канала: пин, позиция, слово состояния привода — и его видно на экране.

Монитор станка: позиции осей, состояние, живой трек двойника
Монитор станка: DRO, состояние, живой трек двойника.
Осциллограф привода в cncctl: команда и факт на одном графике
Осциллограф привода в cncctl: 1 кГц по шине, команда против факта.
окногдечто видно
монитор станка/machines/{id}/monitorDRO по осям, состояние, шпиндель, подача; метка «чем поднято»; живой трек двойника; графики положения, скорости, момента в % номинала
осциллограф cncctlвкладка слейва «Осциллограф»1 кГц по шине: положение, скорость, момент, ОШИБКА СЛЕЖЕНИЯ; режим «Команда vs реально» — где привод не успевает
привод в cncctlкарточка слейва на шинеstatusword: под моментом ли, фолт с расшифровкой, стадия CiA-402; параметры по группам
карточка станка/machines/{id}теги состояния: на связи · поднят · двойник разошёлся · инструмент не найден; тексты отказов дословно

Момент — в процентах от номинала привода: пока паспортный номинальный момент не задан, шкалы в Н·м не существует, и платформа её не рисует. Доработка параметра доказывается разницей обратной связи до и после.

Четыре окна одной возможности: двойник в облаке, стенд с конфигом и пином HAL, наладка cncctl, локальная панель у станка — одно значение, одно имя, один владелец записи Двойник · облако, cncai Поле в Machine где живёт факт и откуда он берётся; владелец записи — один Стенд · конфиг → HAL Пин HAL, строка .ini проброс до железа: объект шины, команда агента Одна возможность одно значение · одно имя один владелец записи Наладка · cncctl Наладка приводов задаётся и проверяется: осциллограф, параметры привода, диагностика Локальная панель · у станка Оператор у станка пуск, стоп, состояние без облака — связь с сервером не нужна Готово, когда все четыре окна показывают одно и то же
Четыре окна одной возможности: двойник, стенд, наладка cncctl, панель у станка — одно значение, одно имя, один владелец записи.