Автоматизация производства в LinuxCNC

Я уже писал вводную статью про автоматизацию производства. Там излагались основные принципы и… в, общем, я забыл уже про что она. Теперь же я хочу немного раскрыть тему автоматизации производства именно в контексте применения станка с ЧПУ под управлением LinuxCNC. Какие возможности есть в LinuxCNC для автоматизации, да и вообще, что такое «автоматизация производства» в моем понимании в данном контексте?

Как мне кажется, большинство производственников довольно мало знают о возможностях программно-аппаратного комплекса, коим является станок с ЧПУ, несмотря на успешное применение ЧПУ в своем производстве на протяжении многих лет. Для большинства станок с ЧПУ — это тупая железка, которая нужна только для отработки составленного где-то и кем-то еще G-кода. Отсюда появляются попытки сравнить станок с ЧПУ под управлением полноценного компьютера и автономного контроллера, в который вставляется карта памяти с управляющей программой. Граждане дорогие, вы просто не ведаете, что творите :) Конечно, если вам нужен станок с ЧПУ только для выполнения G-кода, ну тогда да — использовать компьютер в этом случае сродни забивания гвоздей лазерным микроскопом.

А вот если немного пофантазировать, то используя компьютер для управления станком с ЧПУ можно решать такие задачи, как:

  • Централизованное управление очередями заданий и создания взаимосвязанной «фермы» станков с ЧПУ. Очередное задание поступает на простаивающий в данный момент станок. Или задание идет только на тот станок, на котором установлена соответствующая оснастка. Или задание идет на станок, расположенный в том городе, из которого поступил заказ, если у вас распределенное территориально предприятие.
  • Динамическое формирование заданий исходя из поступающих напрямую от заказчика заданий. Более простыми словами — интеграция станка с ЧПУ напрямую с сайтом вашего электронного магазина. Возможность получать задания на станок с ЧПУ через интернет.
  • Интеграция станков с ЧПУ в систему управления запасами предприятия и управления ассортиментом.
  • Упрощение работы оператора станка с ЧПУ вплоть до приема на работу человека уровня гастарбайтера. Станок сам «говорит» оператору, что нужно делать, а тот просто это делает: «Переверни заготовку! Смести ее вверх на 97 мм! Сними заготовку и вставь новую синего цвета с полки №10! Поди передай бригадиру, что у нас кончились заготовки №55 желтого цвета!»
  • Полное освобождение от необходимости в операторе ЧПУ, если сделать робота, который бы сам клал и снимал заготовки. Но это уже, конечно, утопия на ближайшие 50-100 лет. Гастарбайтер выйдет-таки дешевле :)

Так как же прийти к эдакому технологическому коммунизму, описанному выше, используя LinuxCNC для управления станком с ЧПУ? Какие у LinuxCNC есть для этого возможности?

Управляющие M-коды

Во-первых — это наличие пользовательских M-кодов. Если в специальной папке LinuxCNC расположить исполняемые скрипты с именем M<номер-команды>, то при исполнении управляющей программы эти скрипты будут вызываться, и станок будет ожидать завершения их выполнения. В простейшем случае можно при вызове M-скриптов выводить оператору заранее заготовленную картинку, поясняющую, что именно он должен делать в данный момент. Когда оператор все сделает, он закрывает картинку, и выполнение управляющей программы с G-кодом продолжится дальше.

Вообще говоря, в M-скрипт можно запихнуть все, что угодно, вплоть до подачи сигналов управления на нестандартную железку, подключенную к тому же компу (например, робот, меняющий заготовки).

Управляющие O-коды

Во-вторых, в LinuxCNC есть возможность вызывать подпрограммы, обозначаемые O-кодами с именем. Вызов подпрограммы осуществляется так:

O<имя-подпрограммы> call [параметр1] [параметр2] …

Формат, конечно, нужно уточнить в документации к LinuxCNC, но вроде все так. Параметров может быть достаточно много через пробел. Их обязательно указывать в квадратных скобках.

Обратите внимание, что в LinuxCNC подпрограмма совершенно не обязательно должна располагаться в том же управляющем файле с G-кодами. Это только в простейшем случае так. Подпрограммы можно вынести в отдельные файлы с именем <имя-подпрограммы>, сложенные в специальной папке.

Но и это еще не все. В качестве подпрограммы может выступать не файл, а модуль на языке программирования Python! А это значит, что в подпрограмме может происходить вообще все что угодно! Например, запрос через интернет к удаленному серверу формирования заданий вашего предприятия или же к электронному магазину, собирающему заказы от конечных потребителей вашей продукции. Или же Python может нарисовать для оператора станка какую-либо картинку-подсказку (как установить очередную заготовку), причем картинка будет не заранее подготовленная, а динамически сформированная исходя из параметров, переданных в подпрограмму. Вот так-то!

Динамическая генерация G-кода

Ну и напоследок, в LinuxCNC можно вместо стандартного G-кода вызывать сразу программу на Python, который будет выплевывать обратно через стандартный поток вывода те же самые G-коды, но уже динамические. Или же опять же, взятые из одного или нескольких файлов. Причем сам скрипт на Python может делать опять же что угодно, как описано в разделе выше — работать с базой данных, соединяться с удаленными серверами и т.д. и т.п. — все зависит только от фантазии программиста!

Вот кратенько так я тут поведал о возможностях, которые открываются перед пользователем станка с ЧПУ под управлением LinuxCNC. Но это далеко не все возможности! Я тут совершенно не сказал о создании своих собственных графических интерфейсов управления станком, отличных от стандартного. Это может пригодиться при найме неквалифицированного сотрудника. Чтобы тот не натыкал того, чего нельзя. Также я еще не рассказал о том, чего еще пока сам не знаю :) Ведь в LinuxCNC я еще совсем новичок! Но уже того, о чем я тут рассказал, должно хватить для построения системы невероятной сложности и функциональности.

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

  • http://synxronica.com synxronica

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

    • http://tech.dimanjy.com/ Dimanjy

      Вай! Гидравлика? Как-то слишком человекообразно :) Я бы делал под листовые материалы что-то вроде автоматической сдвигалки. И положить-то, наверное, не проблема. Заготовку надо качественно зажать — вот тут какое-то бюджетное решение придумать бы…

      • http://synxronica.com synxronica

        Так вот да — жена игралась в эту свою весёлую ферму, и тут меня торкнуло. opencv конечно закроет лишь малу часть задач, хотя может я чего в нём ещё не понимаю. На geektimes вон недавно чувак спектральный анализатор собирал, в эту сторону думаю. Но это всё именно что побаловаться, интересно же, потому и «человекообразно».
        Про зажатие листа в станке примерно вот как думал. На прикреплённой фотке хреновина из старого советского магнитофона. Каретка зажатая на винтовой оси. Что-то на подобие смастерить, туда маленький редуктор может и дешёвый моторчик. Таких 3-4 штуки+н-мост и к компьютеру. Или в моём случае робота можно научить кнопку большую нажимать. Каретки вниз опускаются — полотно зажато, можно работать.

        • Andrew Smopuim

          смотря какая заготовка. Если оргстекло, можно попробовать присоски.

  • Evgen V

    Дмитрий а к LinuxCNC прикрутить обратную связь от энкодера возможно

    • http://tech.dimanjy.com/ Dimanjy

      Конечно возможно! Так делают при оЧПУшивании токарного, для нарезания резьбы в частности. На шпиндель ставят энкодер и крутят его рукой, а резец сам синхронно вдоль заготовки движется.