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

Автоматика: узел, механизм, программа

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

Отличие

Чем узел не похож на станок

СтанокУзел автоматики
что исполняетсистема ЧПУ (LinuxCNC) — интерпретатор G-code и решатель кинематикиконтур реального времени без ЧПУ: цикл поднимается напрямую, интерпретатора G-code нет
откуда траекторияВЫВОДИТСЯ из объёма, который надо снять с заготовкиеё НАЗЫВАЕТ автор: каждая ось едет по своему заданию
чем меряется успехдеталь в допускецикл дошёл до конца, условия перехода сработали
кто доступенкинематики, у которых есть решательЛЮБОЙ механизм, включая тот, у которого решателя нет

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

01–03

Узел

Завести блок из каталога архетипов, описать оси и каналы, принести механизм.

04

Стенд

Назначить узел на стенд — туда уедет описание, программа и профиль контура.

05–06

Программа

Написать цикл: шаги, дорожки, условия перехода, ожидание входа. Проверить в браузере.

07–09

Пуск

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

Шаг 1

Завести блок автоматики

Меню ОБОРУДОВАНИЕ → Автоматика. Раздел называет себя прямо: «Блоки автоматики — двойники физических узлов (оси, шпиндели, выходы, входы с ролями и профилями)». Кнопка «Новый блок» открывает каталог архетипов.

Архетип — с чего начать, а не во что упереться

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

Конвейер (транспортёр) Роликовый конвейер (накопление) Линейный трансфер Питатель (распределение) Pick&Place 2 оси Портал 3 оси + захват Поворотный делительный стол Поворотный стол + зажим Дозатор Завинчивание (момент) Запрессовка Сортировщик Контроль / тестирование Этикетирование Паллетайзер Формовка коробки Кран-штабелёр (склад) Подача + поворот + захват Пустой блок

Состав каждого архетипа и словарь ролей каналов — справочник «Блоки автоматики».

Числа, унаследованные от архетипа, помечены значком «тип.» — «типовое число шаблона архетипа, не замер этого железа». Пока метка стоит, число — заготовка для разговора, а не факт вашего узла.

Шаг 2

Описать узел

Карточка блока → вкладка «Настройки». Модель разложена по типам каналов.

Оси и шпиндели

  • «Линейная ось» — едет в миллиметрах: ползун, подача, лента;
  • «Сустав (две палки)» — вращается вокруг оси между звеньями;
  • «Шпиндель — вращение» — задаётся оборотами;
  • «Шпиндель — затяжка» — задаётся моментом: завинчивание, запрессовка, прижим.

Входы и выходы

Дискретные входы и выходы получают имена, которыми их зовёт программа. Аналоговый вход описывается величиной (давление, температура, уровень, вес, ток, расход, расстояние, усилие) и форматом сигнала. Формат назван так, чтобы было видно главное:

ФорматЧто это значит для диагностики
4-20 мАобрыв виден — ноль сигнала невозможен при исправной линии
0-20 мАобрыв не виден — ноль неотличим от «ничего»
0-10 Вобрыв не виден
±10 Вобрыв не виден
Отсчёты модулясырые значения, без пересчёта в величину

Контроль обрыва задаётся отдельно: окно по сырому сигналу · вход исправности · не контролируется.

Кнопки «Сохранить» нет

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

Паспорт привода — не украшение. Блок с неполным паспортом носит тег «паспорт неполон», а если без него пуск на приводах невозможен — «паспорт: пуск на серво откажет». Отказ называется заранее, а не в момент пуска.

Шаг 3

Принести механизм

Вкладка «URDF» на карточке блока. Механизм — это данные, а не код: звенья, шарниры, пределы, точки датчиков. Рисуете вы, в своём инструменте; платформа принимает и проверяет.

Как приносить

  • «Загрузить папку» — папка механизма целиком, URDF и меши одним жестом. Рекомендуемый путь;
  • «Загрузить файл» — только описание (.urdf, .xml);
  • «Образец механизма» — учебные образцы из галереи: посмотреть и попробовать, не для производства.

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

Имя шарнира — это имя канала программы

Связь механизма с узлом — по имени. Имена устроены как «вид канала плюс номер»:

ИмяЧто это
srv0, srv1, …приводные шарниры — то, что едет
di0, di1, …дискретные входы — точки датчиков
do0, do1, …дискретные выходы
ai0, ai1, …аналоговые входы

Если механизм нарисован не вами и шарниры зовутся по-своему, файл не переименовывается. Вместо этого заполняется «Таблица имён»: слева «Шарнир файла», справа «Канал программы». Платформа считает незакрытые места и показывает их числом — «без канала: 2», «канал дважды: srv0».

Что мы принимаем и не используем

Требуется только то, что рисуется. Геометрия <collision> принимается и игнорируется — столкновений мы не считаем, и вердикт проверки говорит это дословно. Не стройте на ней расчёт: двойник покажет позу механизма, но не остановит его перед препятствием.

Требования к файлу механизма целиком — справочник «Механизм — это данные, а не код».

Меш, названный только в <collision> и отсутствующий в <visual>, в двойник не попадёт — звено окажется невидимым.

Шаг 4

Назначить узел на стенд

Узел живёт в облаке, но едет на боксе. Назначение связывает блок с конкретным стендом, и с этого момента туда уезжает всё, что нужно для самостоятельной работы: описание осей и каналов, профиль контура реального времени, текущая программа.

Смысл в том, что пакет самодостаточен. Цикл идёт на боксе; облако получает факт о том, что произошло, и отдаёт замысел — программу и команды «выполняй» / «стоп». Жесты (толчковое движение, сырые команды приводу) через эту границу не проходят — они остаются у оборудования.

Шину держит кто-то один. Если её занял другой режим, платформа скажет, кто именно: «Шину держит наладка (cncctl) — переключите её в «режим станка»» · «Стенд отдан автоматике — остановите цикл в автоматике».

Шаг 5

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

Меню ПРОГРАММЫ → PLC-программы«Новая программа». В окне «Новая программа движения» — имя (подсказка: «Например: подача заготовки») и блок. Блок выбирается один раз: он даёт программе оси, роли, профили и имена входов-выходов. Кнопка «Создать и открыть» ведёт в лабораторию PLC.

Из чего состоит программа

  • Состав — какие оси и каналы узла программа использует и как зовёт;
  • Шаги (состояния) — что происходит: у каждого шага есть имя;
  • Дорожки — что делает каждая ось и каждый канал внутри шага;
  • Переходы — по какому условию шаг сменяется следующим.

Действия на дорожке

ДействиеГдеЧто делает
moveосьприехать в позицию — абсолютно или относительно
spinоськрутить заданное время
pushосьдавить моментом — в процентах от номинала
holdосьдержать позицию заданное время
stopосьостановить
on / offвыходвключить / выключить
pulseвыходимпульс заданной длительности
waitForвходждать фронт или уровень на входе

На уровне программы — rig() (состав), param() (крутилка с пределами), recipes() (наборы уставок под материал или изделие) и record() (какие величины писать тактом стенда).

Условия перехода

  • done — шаг доиграл в своих пределах;
  • таймаут — по времени в этом шаге; если названный предел шага истёк, переход идёт по нему, а не по done;
  • вход — по номеру порта или по имени;
  • ось — по номеру серво или по имени, с единицами;
  • составное — и · или · не;
  • формула — сравнение вычисленного;
  • порог из рецепта — уставка вместо литерала.

Устройство программы и разобранные примеры — справочник «Программы автоматики»; пути навесного у роботов — «Глаголы движения».

Полный справочник языка — «Справочник» рядом со списком программ (в приложении, адрес /docs/plc): все действия, все формы условий и рецепты типовых задач по IEC 61131-3. Он собирается из того же описания, по которому работает редактор, поэтому не расходится с ним.

Шаг 6

Проверить в браузере, до железа

В лаборатории программа проигрывается без стенда. Пять взглядов на одно и то же:

  • Логика — граф: что после чего и по какому условию;
  • План — гант: сколько займёт цикл и кто чем занят (сухой расчёт);
  • Прогон — осциллограмма проигранного цикла;
  • Модель — 3D механизма, идущее вместе с песочницей;
  • Запись — величины, снятые тактом стенда, если в программе есть record().

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

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

Шаг 7

Пуск

Пуск доступен и из списка программ, и из кокпита узла. У каждой программы — три переключателя рядом с кнопкой:

  • вирт / серво — на виртуальных серво или на приводах;
  • В цикле — крутить бесконечно, пока не «Стоп» на стенде;
  • Пуск — на стенде, без открытия редактора.

Что такое «вирт»

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

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

Журнал прогонов

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

  • дошла до конца — программа отработала;
  • остановлена — прервали раньше конца;
  • ошибка — прогон упал;
  • исход неизвестен — конец никто не увидел: страницу закрыли до конца прогона.

Узел, который ещё не запускали, говорит «прогонов не было» — это состояние, а не сбой.

Отказ называется, а не молчит

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

Текст отказаЧто это значитЧто делать
в программе нет шагов — откройте её в лаборатории и сохраните Программа существует, но пуста: шаги не сохранились. Открыть в лаборатории и сохранить заново. Пустая программа не «ничего не делает» — она не исполняется вовсе.
стартовый шаг «…» не найден Назван старт, которого в программе нет — обычно шаг переименовали или удалили. Поправить имя стартового шага либо вернуть шаг.
шаги с одинаковым id: … Два шага носят одно имя, и условие перехода не может выбрать между ними. Переименовать один из названных.
до этих шагов не дойти от старта: … Шаги есть, но ни одно условие перехода к ним не ведёт — оторванная ветка. Либо связать условием, либо убрать. Молча их пропустить нельзя: автор считал, что они работают.
ни один шаг не двигает серво — нечего исполнять Программа состоит из ожиданий и выходов, ходов нет. Проверить, туда ли писались ходы. Такой прогон закончился бы «успехом», ничего не сделав, — поэтому он отклоняется.
серво … нет в составе блока «…» Программа адресует ось, которой у этого узла не объявлено. Свериться с составом каналов узла: либо программа написана под другой узел, либо канал не заведён.
серво …: пустая дорожка (нет ходов) — добавьте блоки или уберите Ось объявлена в шаге, но её дорожка пуста. Дописать ход или убрать дорожку. Пустая дорожка — почти всегда недоделанная правка.
предел аварии «…» должен быть положительным Порог, по которому прогон рвётся, задан нулём или отрицательным — то есть выключен молча. Задать положительное значение либо убрать порог явно.
серво 0 не сопоставлено со слейвом мастера Ось программы не связана с приводом на шине узла. Сопоставить в наладке. Заранее и списком это же показывает проверка сопоставления — до нажатия «Прогон».
IO не сопоставлено: … То же самое про вход или выход: программа его использует, железу он не сопоставлен. Сопоставить канал ввода-вывода в наладке.
стенд автоматики … не найден Узел, которому адресован прогон, в платформе отсутствует — удалён или указан не тот. Выбрать узел заново.
стенд отказал без причины Узел отказал, но своей причины не прислал. Платформа не сочиняет её за него. Смотреть журнал агента на боксе: причина осталась там. Пустая причина — сама по себе повод проверить связь с узлом.

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

Шаг 8

Наблюдение

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

ВеличинаЕдиницаСмысл
Позициямм / обгде ось сейчас
Скоростьмм/с / об/скак быстро едет
Моментпромилле номинала привода
Рассинхрон (ferr)обнасколько ось отстала от задания

Осциллограф разворачивается прямо под выбранной дорожкой, в той же шкале времени — курсоры совпадают с блоками программы, и видно, какой шаг дал всплеск.

Пределы аварии по умолчанию — момент 600 ‰ и рассинхрон 0,05 об, удерживаемые дольше 0,2 с. Это стартовые значения, а не паспорт вашего узла: под конкретное железо их задают явно.

Шаг 9

Наладка и панель у станка

  • Наладка (cncctl) — настройка приводов узла: шина и модули, паспорт мотора, контуры регулирования, осциллографы, люфт и трение, разбор кодов аварий. То же рабочее место, что и у станка, — см. Станки, шаг 10.
  • Панель у станка — локальная веб-панель на боксе: состояние и координаты без облака, теми же именами каналов, что и везде.

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

Готовится

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

Готовится

Предел ожидания с названным исходом

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

Готовится

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

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

Готовится

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

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

Готовится

Механизм из STEP

Вход механизма не только из URDF, но и из STEP-сборки: платформа читает дерево сборки, геометрию, имена и цвета. Требование к файлу — структура сборки должна совпадать с кинематическим деревом. Оси движения, типы шарниров, пределы и приводы STEP не несёт: их называет человек, разметкой по граням. Направление в работе, детали могут измениться.

Пример

От нуля до движения: узел завинчивания

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

1. Блок

Автоматика → «Новый блок» → архетип «Завинчивание (момент)». В блоке появятся две оси, один выход и один вход.

2. Состав программы

rig({
  axes:    { шпиндель: 0, 'подача Z': 1 },
  outputs: { 'питатель винта': 0 },
  inputs:  { 'винт подан': 0 },
})

Слева — имена, которыми вы зовёте каналы в программе; справа — номера каналов узла. Если механизм принесён файлом, эти же имена стоят в «Таблице имён» напротив шарниров файла.

3. Цикл из четырёх шагов

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 → цикл повторяется.

4. Проверка

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

5. Пуск на виртуальных серво

Переключатель виртПуск. Цикл идёт на стенде без EtherCAT. Смотрите дорожки в кокпите: подача едет, шпиндель отрабатывает шаг затяжки.

6. Пуск на приводах

Переключатель серво. Перед этим убедитесь, что паспорт привода заполнен — иначе блок носит тег «паспорт: пуск на серво откажет», а порог момента в промилле не с чем сравнить. Включите В цикле, когда цикл отработан и вы готовы к производственному прогону.

Проверьте исход ожидания до первого производственного цикла. Шаг «подать винт» держится на внешнем событии. Что должно случиться, если винт не пришёл за 5 секунд — пропустить, встать или объявить аварию, — решаете вы. Молчаливое «пойдём дальше» здесь означает завинчивание в пустоту.

Границы

Чего узел автоматики не делает

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

Не делаетПочемуГде это есть
Не исполняет G-code У узла автоматики нет системы ЧПУ вовсе: контур поднимается напрямую, без LinuxCNC. Кадров, координат детали и рабочих смещений здесь не существует. Станки
Не знает инструмента и слотов Стола инструмента, смены инструмента и вылета у узла нет — это понятия реза. Навесное узла объявляется каналом, а не номером в столе. Инструмент и навесное
Не выводит траекторию из детали Путь называет автор, шаг за шагом. Движка, который считал бы, что снять с заготовки, у этого рода программ нет — это разные движки, а не режимы одного. Операции реза
Не принимает жест из облака Через границу проходит замысел — программа и команды «выполняй» / «стоп». Толчковое движение и сырые команды приводу остаются у оборудования. Наладка · Панель у станка
Не проверяет отставание оси на вирт. осях Порог ошибки слежения там проверять не по чему: обратной связи нет. Прогон на виртуальных осях не докажет, что ось выдержит нагрузку. прогон на приводах
Не подставляет привод вместо несопоставленного «Чтобы поехало» — самая дорогая подмена: она даёт зелёный прогон при неподключённом железе. Вместо неё — отказ с именем канала. сопоставление в наладке
Не строит программу по ведомым шарнирам Где механизм объявляет шарнир ведомым от другого, программа адресует ступени явно; там, где ведомых большинство, программы-примера нет вовсе — и это сказано прямо, а не заменено подделкой. Механизм и URDF

Дальше: Станки · Понятия · Программы автоматики · Установка бокса