Узел автоматики — оси, выходы и входы физического механизма: питатель, поворотный стол, завинчивающая головка, конвейер. Ниже — путь от пустого блока до идущего цикла. Слова — в Понятиях, станочная сторона — в разделе Станки.
| Станок | Узел автоматики | |
|---|---|---|
| что исполняет | система ЧПУ (LinuxCNC) — интерпретатор G-code и решатель кинематики | контур реального времени без ЧПУ: цикл поднимается напрямую, интерпретатора G-code нет |
| откуда траектория | ВЫВОДИТСЯ из объёма, который надо снять с заготовки | её НАЗЫВАЕТ автор: каждая ось едет по своему заданию |
| чем меряется успех | деталь в допуске | цикл дошёл до конца, условия перехода сработали |
| кто доступен | кинематики, у которых есть решатель | ЛЮБОЙ механизм, включая тот, у которого решателя нет |
Поэтому программу движения можно написать и для трёхосевого фрезера, и для однооcевой ленты: «станочность» — это способность механизма, а не его порода.
Завести блок из каталога архетипов, описать оси и каналы, принести механизм.
Назначить узел на стенд — туда уедет описание, программа и профиль контура.
Написать цикл: шаги, дорожки, условия перехода, ожидание входа. Проверить в браузере.
Виртуальные серво, затем приводы. Наблюдение и работа у станка.
Меню ОБОРУДОВАНИЕ → Автоматика. Раздел называет себя прямо: «Блоки автоматики — двойники физических узлов (оси, шпиндели, выходы, входы с ролями и профилями)». Кнопка «Новый блок» открывает каталог архетипов.
Архетип даёт готовый состав осей и каналов плюс демонстрационную программу, которую можно разобрать и переписать. Каталог — девятнадцать позиций:
Состав каждого архетипа и словарь ролей каналов — справочник «Блоки автоматики».
Числа, унаследованные от архетипа, помечены значком «тип.» — «типовое число шаблона архетипа, не замер этого железа». Пока метка стоит, число — заготовка для разговора, а не факт вашего узла.
Карточка блока → вкладка «Настройки». Модель разложена по типам каналов.
Дискретные входы и выходы получают имена, которыми их зовёт программа. Аналоговый вход описывается величиной (давление, температура, уровень, вес, ток, расход, расстояние, усилие) и форматом сигнала. Формат назван так, чтобы было видно главное:
| Формат | Что это значит для диагностики |
|---|---|
| 4-20 мА | обрыв виден — ноль сигнала невозможен при исправной линии |
| 0-20 мА | обрыв не виден — ноль неотличим от «ничего» |
| 0-10 В | обрыв не виден |
| ±10 В | обрыв не виден |
| Отсчёты модуля | сырые значения, без пересчёта в величину |
Контроль обрыва задаётся отдельно: окно по сырому сигналу · вход исправности · не контролируется.
Правки уходят сами, через паузу после последнего нажатия. Это сделано намеренно: отдельная кнопка порождала два состояния — «на экране» и «на сервере», — и они расходились.
Паспорт привода — не украшение. Блок с неполным паспортом носит тег «паспорт неполон», а если без него пуск на приводах невозможен — «паспорт: пуск на серво откажет». Отказ называется заранее, а не в момент пуска.
Вкладка «URDF» на карточке блока. Механизм — это данные, а не код: звенья, шарниры, пределы, точки датчиков. Рисуете вы, в своём инструменте; платформа принимает и проверяет.
.urdf, .xml);Принесённый файл помечается как «свой файл», сгенерированный платформой — как «черновик». Вернуться к черновику можно, но принесённый файл при этом удаляется без возврата — платформа предупреждает об этом прямо.
Связь механизма с узлом — по имени. Имена устроены как «вид канала плюс номер»:
| Имя | Что это |
|---|---|
| srv0, srv1, … | приводные шарниры — то, что едет |
| di0, di1, … | дискретные входы — точки датчиков |
| do0, do1, … | дискретные выходы |
| ai0, ai1, … | аналоговые входы |
Если механизм нарисован не вами и шарниры зовутся по-своему, файл не переименовывается. Вместо этого заполняется «Таблица имён»: слева «Шарнир файла», справа «Канал программы». Платформа считает незакрытые места и показывает их числом — «без канала: 2», «канал дважды: srv0».
Требуется только то, что рисуется. Геометрия <collision> принимается и игнорируется —
столкновений мы не считаем, и вердикт проверки говорит это дословно. Не стройте на ней расчёт:
двойник покажет позу механизма, но не остановит его перед препятствием.
Требования к файлу механизма целиком — справочник «Механизм — это данные, а не код».
Меш, названный только в <collision> и отсутствующий в <visual>,
в двойник не попадёт — звено окажется невидимым.
Узел живёт в облаке, но едет на боксе. Назначение связывает блок с конкретным стендом, и с этого момента туда уезжает всё, что нужно для самостоятельной работы: описание осей и каналов, профиль контура реального времени, текущая программа.
Смысл в том, что пакет самодостаточен. Цикл идёт на боксе; облако получает факт о том, что произошло, и отдаёт замысел — программу и команды «выполняй» / «стоп». Жесты (толчковое движение, сырые команды приводу) через эту границу не проходят — они остаются у оборудования.
Шину держит кто-то один. Если её занял другой режим, платформа скажет, кто именно: «Шину держит наладка (cncctl) — переключите её в «режим станка»» · «Стенд отдан автоматике — остановите цикл в автоматике».
Меню ПРОГРАММЫ → PLC-программы → «Новая программа». В окне «Новая программа движения» — имя (подсказка: «Например: подача заготовки») и блок. Блок выбирается один раз: он даёт программе оси, роли, профили и имена входов-выходов. Кнопка «Создать и открыть» ведёт в лабораторию PLC.
| Действие | Где | Что делает |
|---|---|---|
| move | ось | приехать в позицию — абсолютно или относительно |
| spin | ось | крутить заданное время |
| push | ось | давить моментом — в процентах от номинала |
| hold | ось | держать позицию заданное время |
| stop | ось | остановить |
| on / off | выход | включить / выключить |
| pulse | выход | импульс заданной длительности |
| waitFor | вход | ждать фронт или уровень на входе |
На уровне программы — rig() (состав), param() (крутилка с пределами),
recipes() (наборы уставок под материал или изделие) и record()
(какие величины писать тактом стенда).
Устройство программы и разобранные примеры — справочник «Программы автоматики»; пути навесного у роботов — «Глаголы движения».
Полный справочник языка — «Справочник» рядом со списком программ
(в приложении, адрес /docs/plc): все действия, все формы условий и рецепты типовых задач
по IEC 61131-3. Он собирается из того же описания, по которому работает редактор, поэтому не расходится с ним.
В лаборатории программа проигрывается без стенда. Пять взглядов на одно и то же:
record().Отдельно задаётся, кто «нажимает» датчики в этой проверке: «Щёлкаю руками» — вход срабатывает по вашему клику, программа до этого стоит и ждёт; «Приходят сами» — датчик считается сработавшим через указанное время, и цикл проигрывается целиком.
«Приходят сами» — оценка для расчёта, на железо она не идёт. Время, за которое датчик срабатывает в браузере, вы придумали; на стенде его называет мир.
Пуск доступен и из списка программ, и из кокпита узла. У каждой программы — три переключателя рядом с кнопкой:
Виртуальная ось превьюется в симуляции и не идёт на железо. Это рабочее состояние для осей без подключённого привода: эмулятор не ломается, программа авторится заранее. Пуск на виртуальных серво идёт без EtherCAT и без сопоставления со слейвами мастера.
⚠ Момент на виртуальных осях — модель, а не замер. Порог момента пишется в промилле номинала. Если у привода не задан паспортный номинальный момент, шкалы промилле не существует — величина честно едет прочерком, и условие по моменту не сработает никогда. Заполните паспортный момент до того, как построите на нём переход.
Карточка узла → вкладка «Работа», блок «Прогоны»: последние запуски этого узла — какая программа, когда, чем кончилась. Исходов четыре, и четвёртый не «всё в порядке»:
Узел, который ещё не запускали, говорит «прогонов не было» — это состояние, а не сбой.
Несопоставленные серво блокируют пуск: подмены реального привода виртуальным «чтобы поехало» не происходит. Отказ показывается целиком, со своей причиной, а не общим «не получилось». Ниже — те, что встречаются на этом пути; тексты приведены дословно.
| Текст отказа | Что это значит | Что делать |
|---|---|---|
| в программе нет шагов — откройте её в лаборатории и сохраните | Программа существует, но пуста: шаги не сохранились. | Открыть в лаборатории и сохранить заново. Пустая программа не «ничего не делает» — она не исполняется вовсе. |
| стартовый шаг «…» не найден | Назван старт, которого в программе нет — обычно шаг переименовали или удалили. | Поправить имя стартового шага либо вернуть шаг. |
| шаги с одинаковым id: … | Два шага носят одно имя, и условие перехода не может выбрать между ними. | Переименовать один из названных. |
| до этих шагов не дойти от старта: … | Шаги есть, но ни одно условие перехода к ним не ведёт — оторванная ветка. | Либо связать условием, либо убрать. Молча их пропустить нельзя: автор считал, что они работают. |
| ни один шаг не двигает серво — нечего исполнять | Программа состоит из ожиданий и выходов, ходов нет. | Проверить, туда ли писались ходы. Такой прогон закончился бы «успехом», ничего не сделав, — поэтому он отклоняется. |
| серво … нет в составе блока «…» | Программа адресует ось, которой у этого узла не объявлено. | Свериться с составом каналов узла: либо программа написана под другой узел, либо канал не заведён. |
| серво …: пустая дорожка (нет ходов) — добавьте блоки или уберите | Ось объявлена в шаге, но её дорожка пуста. | Дописать ход или убрать дорожку. Пустая дорожка — почти всегда недоделанная правка. |
| предел аварии «…» должен быть положительным | Порог, по которому прогон рвётся, задан нулём или отрицательным — то есть выключен молча. | Задать положительное значение либо убрать порог явно. |
| серво 0 не сопоставлено со слейвом мастера | Ось программы не связана с приводом на шине узла. | Сопоставить в наладке. Заранее и списком это же показывает проверка сопоставления — до нажатия «Прогон». |
| IO не сопоставлено: … | То же самое про вход или выход: программа его использует, железу он не сопоставлен. | Сопоставить канал ввода-вывода в наладке. |
| стенд автоматики … не найден | Узел, которому адресован прогон, в платформе отсутствует — удалён или указан не тот. | Выбрать узел заново. |
| стенд отказал без причины | Узел отказал, но своей причины не прислал. Платформа не сочиняет её за него. | Смотреть журнал агента на боксе: причина осталась там. Пустая причина — сама по себе повод проверить связь с узлом. |
Демонстрационную программу править нельзя: попытка сохранить в неё отвечает отказом «программа только для чтения» и ссылкой на её копию — работайте в копии.
Кокпит узла — все дорожки под одной шкалой времени: серво, входы и выходы видно разом, «кто когда крутится» читается с одного взгляда. Слева у каждой дорожки — состояние привода, лампа входа и живое положение.
| Величина | Единица | Смысл |
|---|---|---|
| Позиция | мм / об | где ось сейчас |
| Скорость | мм/с / об/с | как быстро едет |
| Момент | ‰ | промилле номинала привода |
| Рассинхрон (ferr) | об | насколько ось отстала от задания |
Осциллограф разворачивается прямо под выбранной дорожкой, в той же шкале времени — курсоры совпадают с блоками программы, и видно, какой шаг дал всплеск.
Пределы аварии по умолчанию — момент 600 ‰ и рассинхрон 0,05 об, удерживаемые дольше 0,2 с. Это стартовые значения, а не паспорт вашего узла: под конкретное железо их задают явно.
Правило четырёх окон действует и здесь. Любая настройка узла должна одинаково читаться в двойнике, на стенде, в наладке и на панели. Канал, заведённый только в одном из четырёх, оператор увидит вслепую.
У шага, который ждёт внешнего условия, автор задаёт предел ожидания и исход по нему: продолжить · остановиться · авария. Пара обязательна — назван исход без предела (или наоборот) не принимается. Пуск заранее предупреждает, если выход из шага целиком в руках мира. Причина проста: ожидание без названного исхода заканчивалось тем же «успехом», что и нормальный выход, — и молчаливо прятало отказ.
В момент времени на стенде поднят ровно один режим; переключение гасит предыдущий. Сегодня о занятой шине сообщает сообщение об отказе, дальше это станет явным состоянием стенда.
Отдельный каталог на боксе, где живут уехавшие туда проекты — по каталогу на проект, на диске данных. Переживает пересоздание виртуальной машины: сегодня при этом теряется настройка режима.
Вход механизма не только из URDF, но и из STEP-сборки: платформа читает дерево сборки, геометрию, имена и цвета. Требование к файлу — структура сборки должна совпадать с кинематическим деревом. Оси движения, типы шарниров, пределы и приводы STEP не несёт: их называет человек, разметкой по граням. Направление в работе, детали могут измениться.
Два привода и один датчик: подача Z (линейная ось) подводит головку, шпиндель (затяжка моментом) заворачивает винт, выход «питатель винта» подаёт крепёж, вход «винт подан» подтверждает, что он на месте. Это архетип каталога «Завинчивание (момент)» — его можно взять целиком и переписать под своё железо.
Автоматика → «Новый блок» → архетип «Завинчивание (момент)». В блоке появятся две оси, один выход и один вход.
rig({
axes: { шпиндель: 0, 'подача Z': 1 },
outputs: { 'питатель винта': 0 },
inputs: { 'винт подан': 0 },
}) Слева — имена, которыми вы зовёте каналы в программе; справа — номера каналов узла. Если механизм принесён файлом, эти же имена стоят в «Таблице имён» напротив шарниров файла.
machine({
title: 'Завинчивание',
initial: 'подать винт',
states: {
'подать винт': {
entry: [pulse(0.3, 0)],
lanes: { 'винт подан': [waitFor('↑', { timeout: 5, onTimeout: 'error' })] },
on: { done: 'подвод' },
},
'подвод': {
lanes: { 'подача Z': [move(2, { v: 0.6 })] },
on: { done: 'завинчивание' },
},
'завинчивание': {
lanes: { шпиндель: [push(60, { sec: 2 })] },
on: { done: 'отвод' },
},
'отвод': {
lanes: { 'подача Z': [move(0, { v: 1 })] },
on: { done: 'подать винт' },
},
},
}) Читается сверху вниз: импульс на питатель → ждём фронт на входе «винт подан», не дольше 5 секунд (не пришёл — отказ, исход называет автор) → подача Z едет в 2 мм со скоростью 0,6 → шпиндель давит 60 % номинала две секунды → подача Z возвращается в 0 → цикл повторяется.
Логика покажет граф из четырёх состояний, План — сколько занимает цикл, Модель — как при этом движется механизм. Датчик «винт подан» на этом этапе щёлкаете вы — режим «Щёлкаю руками».
Переключатель вирт → Пуск. Цикл идёт на стенде без EtherCAT. Смотрите дорожки в кокпите: подача едет, шпиндель отрабатывает шаг затяжки.
Переключатель серво. Перед этим убедитесь, что паспорт привода заполнен — иначе блок носит тег «паспорт: пуск на серво откажет», а порог момента в промилле не с чем сравнить. Включите В цикле, когда цикл отработан и вы готовы к производственному прогону.
Проверьте исход ожидания до первого производственного цикла. Шаг «подать винт» держится на внешнем событии. Что должно случиться, если винт не пришёл за 5 секунд — пропустить, встать или объявить аварию, — решаете вы. Молчаливое «пойдём дальше» здесь означает завинчивание в пустоту.
Ненаписанная граница читается как обещание, поэтому вот они — прямо.
| Не делает | Почему | Где это есть |
|---|---|---|
| Не исполняет G-code | У узла автоматики нет системы ЧПУ вовсе: контур поднимается напрямую, без LinuxCNC. Кадров, координат детали и рабочих смещений здесь не существует. | Станки |
| Не знает инструмента и слотов | Стола инструмента, смены инструмента и вылета у узла нет — это понятия реза. Навесное узла объявляется каналом, а не номером в столе. | Инструмент и навесное |
| Не выводит траекторию из детали | Путь называет автор, шаг за шагом. Движка, который считал бы, что снять с заготовки, у этого рода программ нет — это разные движки, а не режимы одного. | Операции реза |
| Не принимает жест из облака | Через границу проходит замысел — программа и команды «выполняй» / «стоп». Толчковое движение и сырые команды приводу остаются у оборудования. | Наладка · Панель у станка |
| Не проверяет отставание оси на вирт. осях | Порог ошибки слежения там проверять не по чему: обратной связи нет. Прогон на виртуальных осях не докажет, что ось выдержит нагрузку. | прогон на приводах |
| Не подставляет привод вместо несопоставленного | «Чтобы поехало» — самая дорогая подмена: она даёт зелёный прогон при неподключённом железе. Вместо неё — отказ с именем канала. | сопоставление в наладке |
| Не строит программу по ведомым шарнирам | Где механизм объявляет шарнир ведомым от другого, программа адресует ступени явно; там, где ведомых большинство, программы-примера нет вовсе — и это сказано прямо, а не заменено подделкой. | Механизм и URDF |
Дальше: Станки · Понятия · Программы автоматики · Установка бокса