ООО «СинкТвин Технологии» +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 из двойника: конфиг генерится и уезжает на бокскарточка станка → «Пуск» — цепочка Конфиг → Стенд → 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 из двойника, база, программа — степпером по шагам. Монитор показывает DRO, строку, 3D по факту; отказ приходит текстом гейта дословно.

Preflight

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

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

что охраняеткодуровеньчто говорит человеку
_combo_changed_issuecombo_changed предупреждение текст собирается из контекста операции
_feed_above_axis_ceiling_issuesenvelope_<ось>_feed_above_max_velocity предупреждение

Кадр …: F = … мм/мин при потолке оси … … мм/мин — LinuxCNC зажмёт подачу молча, и деталь поедет медленнее замысла.

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

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

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

Сустав … уходит за ход при наклоне головы (…): строка … — каретка … мм против […, …] (плечо пивота от точки действия).

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

Болванка …×…×… мм не помещается в рабочую зону станка по … при … / : ……… мм против […, …] (зона = ход осей, коробка станком не названа)

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

Строка …: ускоренный ход G0 проводит инструмент сквозь заготовку…….

Строка …: кончик инструмента в заготовке на … мм глубже объявленной глубины шага … мм…….

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

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

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

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

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

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

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

stand_no_mechanics_table_unchecked справка

Стенд без механики: стола, упоров и оснастки нет, поэтому столкновение с ними не проверяется. Ход осей при этом судится по числам двойника — их же LinuxCNC печатает в [AXIS] MIN_LIMIT/MAX_LIMIT и держит до движения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

режимы: обороты и подача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 ошибка — пуск заперт

У станка нет инструментов — программа вызывает …, а стол инструментов станка пуст.

tool_table_no_machine справка

Станок не выбран — вызовы M6 (…) не с чем сверить: номера T есть только у стола станка.

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

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

stock_smaller_than_program по ситуации

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

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

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

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

Порождено из кода; «…» — место числа или имени из вашей программы.

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

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

Launch

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

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

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

отказ запускаслойчто говорит
machine_deenergizedcontrollerтекст собирается из состояния стенда
stand_snapshot_unavailableredisСостояние стенда сейчас не видно — пуск отложен.
launch_would_interrupt_runprogramНа стенде идёт ……… —
controller_not_upСтанок не поднялся перед отправкой (…): …

Смена режима на поднятом станке спрашивает подтверждение: 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, панель у станка — одно значение, одно имя, один владелец записи.