cncctl.ru — рабочее место наладчика приводов: шина EtherCAT, привязка осей к железу, параметры привода, осциллограф, джог. Двенадцать шагов от логина до подтверждённого движения оси. Каждый шаг — одно действие: зачем, что делаете, что видите, чем проверить. Слова — в Понятиях, станочная сторона — в разделе Станки.
Инструментов два, и они не спорят. В cncai живёт замысел: двойник оборудования, программа, симуляция. В cncctl живёт факт и руки: что реально висит на кабеле, как настроен привод, куда едет ось.
| cncai — замысел | cncctl — факт и руки | |
|---|---|---|
| вопрос | деталь выйдет правильной? | привод настроен правильно? |
| предмет | двойник, программа, заготовка, нули | шина, слейв, ось, паспорт мотора, контур регулирования |
| единицы | машинные — миллиметры детали | моторные — обороты, импульсы, момент |
| где стоит человек | за столом | у шкафа |
Сопоставление «ось ↔ слейв шины» делается ИМЕННО ЗДЕСЬ. В карточке станка в cncai этой операции нет вовсе — там стоит подсказка «Сопоставление ось↔слейв шины делается при наладке в cncctl» и кнопка «Открыть наладку (cncctl)». То же с дискретикой: cncai записывает, ЧТО установлено, а к какому пину это привязано — назначается здесь.
Результат наладки не остаётся в наладке: привязка осей и паспорт оси уезжают в двойник, и конфигурация системы ЧПУ по-прежнему генерится из двойника. Второй правды не появляется.
Войти, выбрать стенд, взять шину в наладку.
Разобрать состав шины, привязать оси и дискретные роли.
Параметры привода, питание и момент, джог и масштаб оси.
Осциллографы, конфиги и оверлеи, диагностика контура.
Вход по логину и паролю — форма «Логин» / «Пароль» / кнопка «Войти». Самостоятельная регистрация закрыта: доступ выдаётся по приглашению.
Аккаунт видит свои промышленные боксы и разведённые на них стенды (виртуальные машины). В таблице стендов — состояние (онлайн/оффлайн), что на стенде сейчас развёрнуто, автозапуск, максимальный джиттер. Кнопка «Открыть стенд» ведёт в верстак наладки.
Выбранный стенд всегда стоит в адресе страницы параметром ?node=.
Ссылку из адресной строки можно переслать коллеге — он откроет ТОТ ЖЕ стенд,
а не тот, что остался у него в браузере.
Стенд, на который ничего не залито, работать не мешает: шина принадлежит стенду, а не проекту. Экраны, которым нужен двойник (конфиги, привязка осей), скажут об этом прямо: «Стенд свободен — проект не залит» с кнопкой «К боксам».
На шине EtherCAT ровно один мастер. Значит, вопрос «что мне сейчас можно» сводится к одному: кто держит шину прямо сейчас. Это не тумблер и не настройка — это факт, который читается со стенда.
| Что показано в шапке | Кто владеет | Что доступно |
|---|---|---|
| Работа · станок | LinuxCNC — станок выполняет задание | только наблюдение; прямое управление приводами закрыто |
| Работа · автоматика | cncctl, но под ним ИГРАЕТ цикл партитуры | только наблюдение; правка под работающим сценарием запрещена |
| Наладка | cncctl, ничего не играет | джог, осциллограф привода, правка настроек привода |
| Шина свободна | никто — мастер не поднят | ни прогонов, ни джога; наблюдение по SDO работает |
Владелец шины — это ФАКТ, читаемый со стенда, а не выбор в интерфейсе. Подсказка к свободной шине говорит это прямо: «Это состояние ШИНЫ, а не назначения».
Кнопка в шапке — «Войти в наладку». Перед захватом система говорит, что именно произойдёт, и текст разный в зависимости от того, у кого шину забирают:
Наладка cncctl заберёт шину у станка: приводы аварийно обесточатся (E-STOP), LinuxCNC перестанет вести шину (сам EtherCAT-мастер остаётся). Поднимется наладка: джог, осциллограф 1 кГц, прямой доступ к серво. Пока идёт наладка, со стороны станка ничего не запустить. Переключение ~10-15 с.
Со свободной шины наладка занимает её без отъёма, и там прямо сказано: «Приводы остаются обесточенными, пока вы сами их не включите». Из-под играющей партитуры цикл сначала останавливают.
Решение «можно ли взять шину» принимает арбитр на самом стенде, а не браузер. Занято — приходит отказ, и он не молчит:
станок занят — переключение отменено. Подтверди «застопить и в наладку».
Причину подставляет арбитр (когда он её называет); ручка рядом — та же кнопка входа в наладку, второе нажатие идёт уже с явным подтверждением человека, кнопка подтверждения — «В НАЛАДКУ».
Отказ называет причину занятости, но не имя держателя. Кто именно держит шину, читается рядом — значком владельца в шапке. Это два разных места на экране, и они дополняют друг друга.
Кнопка «Выйти из наладки». Подтверждение говорит буквально:
Освободит шину и ОБЕСТОЧИТ приводы. Станок этим НЕ запускается и питание НЕ подаётся — его поднимают отдельно, со стороны станка. Это просто отдаёт шину станку.
Итог: «Наладка выключена — шина свободна, приводы обесточены».
После выбора стенда открывается верстак — одна рама для всех экранов наладки.
Набор вкладок выбранного слейва приходит из профиля его устройства с бэкенда. У серво и у IO-куплера наборы разные, и платформа не подставляет чужие: открыть «Ось и редуктор» на куплере нельзя, потому что этой вкладки там просто нет.
Пункты наладки привода видны только когда шину держит cncctl. Иначе на их месте — неактивная строка «Наладка приводов — возьмите шину» с подсказкой, что нажать. Пустое меню без объяснения — худший ответ, поэтому его тут нет.
Три экрана группы «② Монитор · LinuxCNC» открыты ВСЕГДА, при любом владельце шины: они только читают и сами объясняют, если HAL не поднят.
Меню «③ Шина · EtherCAT» → «Мастер + слейвы». Отдельной кнопки «Сканировать» нет: состав шины перечитывается сам, раз в несколько секунд, и читается со стенда напрямую — видно даже когда агент офлайн.
| Колонка | Что в ней |
|---|---|
| Слейв | позиция S0, S1…, имя, тип («серво» · «IO-куплер» · «raw»), вендор, vid, pcode, состояние на шине |
| Ось станка | селектор оси текущего станка + «Привязать» / «Отвязать» |
| Диагностика | «Открыть» — полная карточка слейва |
Ниже на той же странице — сравнение всех слейвов бок о бок: AL-состояние, состояние CiA-402, CRC и его прирост, PHY/FWD, напряжение шины, температура, нагрузка. Это ответ на вопрос «чем эти три привода отличаются друг от друга».
Карточка слейва, блок «Идентификация (паспорт серво)» — четыре поля, читаются из объекта 0x1018 словаря CoE:
| Поле | Что называет |
|---|---|
| Vendor Id | изготовителя |
| Product code | модель устройства |
| Revision | ревизию — по ней подбирается описание модели |
| Serial | серийный номер экземпляра |
Этой тройкой (vendor + product code + revision) устройство опознаётся в каталоге и получает свой профиль: какие у него объекты, какие лимиты, какие вкладки. Не опознано — тип «raw», и работа идёт напрямую по индексам словаря (см. Привод).
Проверяйте личность до привязки. Если слейв не назвал себя, никакой профиль под него не подставляется — в списке он честно стоит как «Неизвестный (raw SDO)», и осью его делать нельзя, пока не понятно, что это.
Карточка слейва показывает ошибки по портам и отделяет «накоплено» от «растёт прямо сейчас» — это разные диагнозы:
линия чистая накоплено с момента подъёма шины · сейчас не растут ▲ +14 за 30 с — ошибки РАСТУТ: кабель, разъём или помеха
Кадр, помеченный битым выше по цепочке, отмечается отдельно — это не вина текущего слейва.
Шину не опросить: «Шину опросить не удалось — проверь связь с боксом и что мастер EtherCAT поднят».
Два входа, одна запись: селектор «Ось станка» прямо в таблице «Мастер + слейвы» или меню «① СТАНОК» → «Сопоставление» → вкладка «Оси / серво» с кнопкой «Сохранить оси».
Шпиндель на шине — отдельная привязка, не ось: слот, назначенный генератором конфигурации, помечен и осью занят быть не может.
После привязки откройте вкладку слейва «Ось и редуктор»: если слейв не привязан, она честно скажет «Слейв не привязан ни к одной оси двойника — масштаб и пределы взять неоткуда». Появился масштаб и паспорт оси — привязка доехала.
Привязка недоступна — читайте причину, она конкретная: «Стенд свободен — на нём не развёрнут ни станок, ни блок автоматики» · «На этом стенде развёрнута автоматика, а не станок. Шина, мастер и диагностика слейвов работают; привязать слейв к оси можно только на стенде со станком».
«Сопоставление» → вкладка «Датчики и IO». Роли обвеса станка разложены по группам — Безопасность · Концевики · Измерение · Шпиндель · СОЖ · Пульт · Сигнализация — и в строке каждой роли четыре колонки:
| Колонка | Что в ней |
|---|---|
| Роль | имя, тег «вход» / «выход», пометка «обязателен», описание |
| Пин | выбор физического пина шины из живого списка |
| Инверсия | галочка для нормально замкнутого контакта; доступна только у привязанной роли |
| Тест / сигнал | у выхода — кнопка «Мигнуть», у входа — живой индикатор |
Отдельной кнопки «Сохранить» тут нет: выбор пина, инверсия и привязка сохраняются сразу, строка за строкой.
Это и есть главное отличие экрана от таблицы в конфиге: он даёт РУЧКУ проверить связь с железом, не выходя со страницы.
Роль появляется в списке, только если она отмечена установленной в оснащении станка (в cncai). Не отмечена — экран скажет «Не отмечено как установленное» и даст ссылку туда, где отмечают. Агент не отвечает: «Агент шины не отвечает — селекторы пинов и живой DI недоступны».
Канал, которым управляет сам привод со своих клемм, помечен тегом «управляется приводом» — привязывать его к пину куплера не нужно.
⚠ Инверсия — про безопасность, а не про удобство. Нормально замкнутый контакт концевика или аварийной цепи ставится этой галочкой. Ошибка в ней означает, что защита «сработает» ровно тогда, когда её нет — и проверяется она ровно так, как описано выше: рукой, глядя на индикатор.
Если на стенде текущая не станок, а партитура автоматики, шапка говорит это прямо («Стенд ведёт автоматику»), прогон станка скрывается, а вкладки «Сопоставление» меняют содержимое. Наладка приводов при этом работает как обычно — она про владельца шины, а не про потребителя.
| Колонка | Что в ней |
|---|---|
| Компонент | роль канала: линейная ось · сустав (поворот) · шпиндель — вращение · шпиндель — затяжка |
| Шарнир механизма | какой шарнир принесённого механизма ведёт этот канал |
| Серво на шине | какой привод назначен каналу |
| Канал движения | номер дорожки в HAL, по которой исполнитель гонит траекторию |
| Адресуемо | «да» · «по алиасу» · «нет» |
Имя канала у автоматики — srv0, srv1…, у точек — di0, do0…
Это и есть то, чем зовёт шарнир программа. У станка на этом месте стоит БУКВА оси —
разные породы, разные имена, и подменять одно другим нельзя.
Две карточки — «Выходы (DO)» и «Входы (DI)». Колонка называется уже не «шарнир», а «Звено механизма»: датчик сидит не на суставе, а на звене. Колонка «Ведёт» показывает, стоит ли за каналом реальный привод или заглушка виртуального стенда. Кнопка сохранения одна — «Сохранить сопоставление».
Тег «не назван в карте» — не косметика. Он означает, что программа адресует шарнир или звено, которого в принесённом механизме нет. Карта имён — предмет раздела Механизм (URDF); сами компоненты объявляются в cncai при сборке узла, здесь им назначается железо.
Вкладка слейва «Параметры»: сверху блок «Главное» (передаточные числа, лимиты, жёсткость), ниже вкладки «Наладка (группы)» и «Все параметры (полный каталог)».
Ключевое отличие от правки конфига: параметр SDO живёт в самом приводе и переживает перезагрузку стенда, а конфигурация LinuxCNC генерится из двойника при каждом пуске. Одно и то же число, заведённое в обоих местах, разъедется — поэтому масштаб оси держат в одном месте (см. шаг 10).
Подробно — Привод: параметры, фолты, паспорт. Профиль движения и машина состояний — CiA-402. Объектные словари по моделям — каталог приводов.
Питание приводов — не «режим интерфейса», а безопасность человека у станка. Поэтому оно живёт на отдельном экране и подтверждается железом.
Меню «② Монитор · LinuxCNC» → «Прогон · джог». Одна кнопка, три подписи:
| Кнопка | Когда показана |
|---|---|
| Включить станок | станок обесточен |
| Снять E-STOP + ВКЛ | стоит E-STOP |
| E-STOP / ВЫКЛ | станок под питанием |
Состояние подписано словами, а не кодом: «🟢 ПОД ПИТАНИЕМ · ось удерживается» либо «⚪ обесточен · ось свободна», при аварии — суффикс « · E-STOP».
«Нажал ВЫКЛ» — это намерение. Снят ли момент на самом деле, знает только железо. Поэтому снятие питания проверяется обратным чтением, и если подтверждения нет, экран не рисует успех, а оставляет висеть предупреждение:
Момент НЕ подтверждён снятым — проверьте приводы вручную; при сомнении жмите аппаратный грибок
Выход из наладки обесточивает приводы, но снятие момента не подтверждает. Это разные пути: подтверждение живёт на пути питания станка, а «Выйти из наладки» просто отдаёт шину. Уходя от стенда после прогона — проверьте фактом: вал свободен, ось проворачивается рукой. «Дошло до IDLE» моментом снятым не является.
В шапке — два тега состояния: «○ вирт. оси» и «● серво», и кнопка перевода. Это не про наладку, а про то, крутит ли поднятый станок реальные приводы. Пока шину держит наладка, переключатель заблокирован: «Идёт наладка — шину ведёт cncctl. Сначала выйдите из наладки».
Перевести станок на живые приводы? Конфиг соберётся заново из двойника и LinuxCNC перезапустится уже на EtherCAT. Дальше любое движение — реальное: уберите руки и инструмент из зоны, приводы должны быть свободны. Программа, если она загружена, слетит — отправьте её заново.
| Джог наладки (по приводу) | Джог станка (LinuxCNC) | |
|---|---|---|
| где | док внизу на вкладках слейва | «Прогон · джог» |
| единицы | обороты вала, об/мин | миллиметры, мм/с |
| когда доступен | только пока шину держит cncctl | только когда станок включён |
| что двигает | вал мотора, напрямую по CiA-402 | ось станка через интерполятор |
Три кнопки — «назад», «СТОП», «вперёд» — и подпись шага в оборотах. Полная панель на странице слейва даёт настройку: шаг (до 5 об) и скорость (до 5 об/с) в режиме позиции, скорость до 300 об/мин в режиме скорости. Режим момента (CST) помечен как в разработке и кнопка выключена.
Состояние привода подписано баннером и объясняет само себя:
🟢 ЗАПИТАН — удерживает, вал жёсткий. Отпустится сам после хода (или STOP). ⚪ ОТПУЩЕН — вал свободен. Команда сама запитает только на время движения. 🔴 ФОЛТ — нажми STOP, при необходимости сбрось в Диагностике. ⚪ Нет связи с приводом — управление НЕДОСТУПНО. Запитай привод.
Привод сам обесточивается после хода — это защита от нагрева на простое, а не сбой. Просадка момента и смена статусворда на осциллографе в этот момент — норма.
Вкладка «Ось и редуктор»: кнопки «Назад» / «Вперёд» / «Стоп» рядом с живой 3D-механикой (шестерни, ходовой винт), анимация идёт от энкодера. Дайте короткий ход и сверьте: вал крутится в ту сторону, куда просите, ось едет в ту сторону, в какую должна.
Отдельной кнопки «направление верно» в наладке нет. Направление проверяется глазами и, если ось едет не туда, инвертируется в паспорте оси двойника — там же, где MIN, MAX и База.
Блок «Паспорт оси: двойник ↔ привод» кладёт рядом три колонки — «Объект», «Двойник (паспорт)» и «Привод (прочитано)» — по двум объектам:
| Объект | Что это |
|---|---|
| 0x6091 | электронный редуктор привода |
| 0x607D:1 / :2 | программные пределы MIN и MAX |
Каждая строка помечена «совпадает» / «расходится» / «не прочитано». Разошлось — «Либо примите значения привода как паспорт оси, либо перезапишите привод из двойника следующим launch». Кнопка «Принять как паспорт оси» пишет прочитанные значения в двойник:
Записать прочитанные с привода 0x6091 и 0x607D в двойник (ось X)? Двойник — источник правды: следующий launch сгенерирует конфиг из этих значений.
⚠ Масштаб не задваивают. Электронный редуктор привода держат 1:1, а реальный масштаб (импульсов на миллиметр, шаг ШВП) живёт в конфигурации LinuxCNC — он выводится из двойника. Слайдеры на вкладке «Ось и редуктор» — визуализатор механики, а не запись в привод. Вся цепочка (энкодер → электронный редуктор → механический редуктор → шаг винта → импульсов на мм) показана карточкой «Передача» и НИКОГДА не пересчитывается на экране — только отображается, чтобы не разъехаться с двойником.
Там же — строка «Ход до стены int32»: сколько миллиметров укладывается в счётчик позиции при текущем масштабе. Уперлись в это число — виноват масштаб, а не ось.
Привод ушёл в ошибку после нескольких ходов подряд? Частая причина названа прямо на экране: программный лимит 0x607D — каждый повторный ход добавляет путь в ту же сторону, и серия запусков уходит в упор. Сбросьте ошибку и дайте ход в обратную сторону.
Инструментов наблюдения три, и они снимают РАЗНОЕ. Путать их дорого:
| Инструмент | Что снимает | Когда работает |
|---|---|---|
| Осциллограф (вкладка слейва) | шину EtherCAT напрямую, 1 кГц | шина у cncctl |
| Осциллограф пинов | HAL-пины поднятого контура | при любом поднятом HAL |
| Мониторинг приводов (/live) | приводы по SDO, опрос 1 Гц | при любом владельце шины |
Подробно — Осциллографы и замеры.
Меню «① СТАНОК» → «Файлы конфигов»: список файлов стенда слева, редактор справа
с подсветкой ini/hal/xml, «Назад»/«Вперёд» (отмена и повтор), «Сохранить»
(на боксе создаётся резервная копия .bak). Читается по SSH — работает даже когда агент лежит.
Кнопка «Отправить проект на стенд» пересобирает конфиг из двойника и заливает его;
станок при этом не запускается.
Правка файла на стенде — это вторая правда, и она живёт до следующего пуска. Конфиг всегда генерится из двойника: постоянное изменение делается в двойнике, а не здесь. Экран так и говорит, когда файлов ещё нет: «Конфиг ещё не сгенерён на боксе. Отправь станок на стенд — файлы появятся здесь».
Свои фрагменты HAL поверх сгенерированного конфига: имя, область («станок (рез)» · «наладка» · «оба»), переключатель «включён», текст. Материализуются при отправке проекта на стенд. Плашка на странице не оставляет двусмысленности:
Оверлей — временный патч наладчика Он ДОПОЛНЯЕТ граф (грузится последним), а не пересоздаёт его. Если один и тот же оверлей нужен на 2+ станках — просите расширить конструктор, а не держите патч навечно.
Вкладка слейва «Диагностика»: активный фолт с расшифровкой статусворда и кнопкой «Сбросить фолт». Ниже — карточка «Контур» и кнопка «Прогнать диагностику»: одним запросом собирается вся цепочка
двойник → стенд → агент → LinuxCNC → нули → шина → пины → инструменты
Каждое звено получает статус (норма / внимание / отказ), деталь и, где возможно, подсказку «что делать». Прогон читает уже собранное состояние — станок не трогает.
Состояние привода не прочиталось — это не «ошибок нет». Экран так и пишет: «Запрос состояния не прошёл — это НЕ значит „ошибок нет“», и называет варианты причин: слейв не в OP, шину держит другой владелец, привод не отвечает по SDO, агент недоступен.
Пошагового мастера пусконаладки в инструменте нет — экраны независимы. Но порядок задаёт сам инструмент: каждый следующий шаг просто не откроется, пока не сделан предыдущий. Отсюда рабочая последовательность:
?node=;Реальное время живёт на боксе: контур, HAL, EtherCAT-мастер, арбитр шины. Из браузера идут команды и приходят факты; сам цикл наружу не выносится и в облаке не считается. Поэтому наладка не ломается от качества канала — она либо командует и получает ответ, либо честно говорит, что команда не дошла.
| Гейт | Что не пустит |
|---|---|
| Владелец шины | правка настроек и джог — только когда шину держит наладка; под работающим циклом правка запрещена |
| Питание | джог станка заблокирован, пока станок обесточен |
| Подтверждение | любая запись в привод требует явного подтверждения; сервер отдельно требует признак согласия и проверяет диапазон |
| Обратное чтение | записали — прочитали обратно; не совпало — предупреждение, а не «сохранено» |
Отказ не приходит кодом. Он называет слой, причину и следующее действие:
Станок не включён (E-STOP или обесточен) — джог не выполнен. → Снимите E-STOP и включите станок (ВКЛ), затем повторите джог. Нельзя выполнить толчковое перемещение (jog): станок выполняет программу → Остановите программу («Стоп»), затем повторите Шину держит LinuxCNC (станок в резе) — переключите стенд в наладку. Агент станции не отвечает — команда не выполнена. Проверьте связь с боксом и что шина в НАЛАДКЕ (cncctl), затем повторите.
Аварийный останов принадлежит станку и его цепи, а не наладочному инструменту. В cncctl он виден с трёх сторон:
⚠ Аппаратный грибок остаётся главным. Экранная кнопка — это команда, и она подтверждается обратным чтением; если подтверждения нет, инструмент прямо просит проверить приводы вручную и при сомнении нажать грибок. Никакая веб-страница не заменяет физическую цепь останова.
Кнопка есть, но выключена: нужен циклический объект задания момента в драйвере устройства. Режимы позиции (CSP) и скорости (CSV) работают. Сроков не называем.
Сейчас доступны ручная жёсткость, онлайн-инерция и усиления через ацикличный SDO. Одно-кнопочная автонастройка требует циклического прогона.
Поля объявлены, значения появятся, когда их начнёт слать агент. Пока в наблюдении — момент, напряжение шины и температура модуля.
Вкладка «Ось и редуктор» пока построена под один вендор — адреса объектов вендор-специфичны. Для остальных приводов работают «Параметры» и «Обзор», и экран говорит об этом прямо.
Сейчас читается активный код и состояние по статусворду; расшифровка таблицы ошибок есть для распространённых кодов.
Дальше: Привод: параметры и фолты · Осциллографы и замеры · CiA-402 · Каталог приводов · Станки · Установка бокса